版權(quán)聲明:本文為作者原創(chuàng)文章,可以隨意轉(zhuǎn)載,但必須在明確位置標(biāo)明出處?。?!
最近一直在想怎么去寫好pandas,「送給2018的你我」這篇文章也說(shuō)了今年我個(gè)人的目標(biāo)是要去學(xué)習(xí)投資,理財(cái)和股票。所以我決定從這個(gè)方向入手,畢竟跟錢相關(guān)的學(xué)習(xí)更有動(dòng)力。
在正式開始之前需要介紹一個(gè)開源的財(cái)經(jīng)數(shù)據(jù)接口包TuShare,它主要實(shí)現(xiàn)對(duì)股票等金融數(shù)據(jù)從數(shù)據(jù)采集、清洗加工 到 數(shù)據(jù)存儲(chǔ)的過程,能夠?yàn)榻鹑诜治鋈藛T提供快速、整潔、和多樣的便于分析的數(shù)據(jù),為他們?cè)跀?shù)據(jù)獲取方面極大地減輕工作量,使他們更加專注于策略和模型的研究與實(shí)現(xiàn)上??紤]到Python pandas包在金融量化分析中體現(xiàn)出的優(yōu)勢(shì),Tushare返回的絕大部分的數(shù)據(jù)格式都是pandas DataFrame類型,非常便于用pandas/NumPy/Matplotlib進(jìn)行數(shù)據(jù)分析和可視化。當(dāng)然,如果您習(xí)慣了用Excel或者關(guān)系型數(shù)據(jù)庫(kù)做分析,您也可以通過Tushare的數(shù)據(jù)存儲(chǔ)功能,將數(shù)據(jù)全部保存到本地后進(jìn)行分析。應(yīng)一些用戶的請(qǐng)求,從0.2.5版本開始,Tushare同時(shí)兼容Python 2.x和Python 3.x,對(duì)部分代碼進(jìn)行了重構(gòu),并優(yōu)化了一些算法,確保數(shù)據(jù)獲取的高效和穩(wěn)定。當(dāng)然你們可以到官網(wǎng)上去了解更多的詳情http://tushare.org/index.html
話說(shuō)鐵柱和小花都在證券公司工作,公司那是狼多肉少啊,小花又正值芳華,年方二八,青春靚麗、膚白貌美、凹凸有致。是公司里公認(rèn)的女神啊,只要一有空閑時(shí)間公司里的狼總是圍繞在小花身邊轉(zhuǎn)啊轉(zhuǎn),都想把女神變成自己的私有財(cái)產(chǎn)啊。當(dāng)然鐵柱也不例外,但鐵柱有自知之明啊,他知道知己是個(gè)“屌絲”,這種想法想法只在夜深人靜的時(shí)候在心里“意淫,意淫”。
一天領(lǐng)導(dǎo)給鐵柱安排了很多工作,鐵柱沒辦發(fā)只能加班了啊。哼哧,哼哧,晚上10點(diǎn)鐵柱終于把工作搞定了,在心里罵了句“萬(wàn)惡的資本家”,準(zhǔn)備收拾東西走人。剛把公司燈關(guān)了就聽到一聲嬌滴滴的聲音“還有人吶”。哎呀!媽啊,鐵柱一個(gè)激靈。這不是女神小花的聲音是誰(shuí)的聲音。尼瑪,鐵柱的小心臟撲撲亂跳啊,現(xiàn)在公司只有我和小花了啊,機(jī)會(huì)難得啊。要不要上去打個(gè)招呼、要不要上去問問女神有沒有什么需要幫助的,要不要送回家、要不要去吃個(gè)夜宵,哎呀,媽啊,鐵柱的腦子里那是天人交戰(zhàn)。這時(shí)又一個(gè)聲音傳來(lái)“給我開一下燈,謝謝”,鐵柱把燈打開,走向了小花的工位,告訴自己不能慫。小花這么完了咋還不回去啊。小花:“領(lǐng)導(dǎo)讓我統(tǒng)計(jì)一下茅臺(tái)去年到現(xiàn)在的數(shù)據(jù),我剛來(lái)不知道咋統(tǒng)計(jì)啊, 咋辦啊,領(lǐng)導(dǎo)讓我今天一定要弄完,完了,完了,這回我死定了”。鐵柱一聽,尼瑪!這不正是我這個(gè)屌絲程序員擅長(zhǎng)的嗎。鐵柱虎軀一震說(shuō):“小花這個(gè)我會(huì)一點(diǎn),你看是不是下面這樣的”,鐵柱拿出自己的筆記本“啪,啪,啪”敲出下面的下面的代碼執(zhí)行,這一刻的鐵柱查克拉簡(jiǎn)直是爆滿狀態(tài)啊。
import pandas as pd
import numpy as np
import tushare as tu
df = tu.get_k_data('600519', start='2017-01-01')
print(df)
OUT:
date open close high low volume code
0 2017-01-03 329.299 329.575 331.979 327.851 20763.0 600519
1 2017-01-04 329.634 346.667 346.923 329.615 65257.0 600519
2 2017-01-05 344.785 341.574 346.213 340.293 41704.0 600519
3 2017-01-06 341.475 345.534 354.419 340.943 68095.0 600519
4 2017-01-09 342.618 343.317 347.622 341.377 35405.0 600519
5 2017-01-10 343.258 343.800 346.755 341.436 31727.0 600519
6 2017-01-11 342.815 340.303 342.815 338.382 23598.0 600519
7 2017-01-12 341.386 341.879 342.224 339.377 17779.0 600519
8 2017-01-13 341.810 339.731 342.214 338.756 18282.0 600519
9 2017-01-16 339.003 336.382 339.663 333.752 36855.0 600519
10 2017-01-17 337.495 343.928 346.263 336.904 35188.0 600519
11 2017-01-18 343.682 349.789 351.454 342.037 46005.0 600519
12 2017-01-19 349.711 349.435 353.139 346.460 28523.0 600519
13 2017-01-20 349.612 349.701 352.075 347.770 21344.0 600519
14 2017-01-23 351.563 345.987 354.439 344.253 32581.0 600519
15 2017-01-24 346.036 345.090 347.543 341.583 26914.0 600519
16 2017-01-25 344.765 342.450 344.765 341.042 22990.0 600519
17 2017-01-26 342.953 339.288 343.603 336.215 37826.0 600519
18 2017-02-03 340.845 341.682 343.977 339.860 20936.0 600519
19 2017-02-06 343.298 341.682 343.692 339.820 15680.0 600519
20 2017-02-07 341.672 338.461 342.224 338.027 20519.0 600519
.. ... ... ... ... ... ... ...
小花看到上面的結(jié)果高興極了,告訴鐵柱:“鐵柱,這就是我要的結(jié)果,當(dāng)有些地方不對(duì),想0,1,2,3...這些數(shù)字能不能把它換成date這一列的日期格式”。鐵柱聽完一想這還不簡(jiǎn)單嗎,不就是重新設(shè)置一下索引嗎,so easy。
import pandas as pd
import numpy as np
import tushare as tu
df = tu.get_k_data('600519', start='2017-01-01')
df.set_index('date', inplace=True)
print(df)
OUT:
open close high low volume code
date
2017-01-03 329.299 329.575 331.979 327.851 20763.0 600519
2017-01-04 329.634 346.667 346.923 329.615 65257.0 600519
2017-01-05 344.785 341.574 346.213 340.293 41704.0 600519
2017-01-06 341.475 345.534 354.419 340.943 68095.0 600519
2017-01-09 342.618 343.317 347.622 341.377 35405.0 600519
2017-01-10 343.258 343.800 346.755 341.436 31727.0 600519
2017-01-11 342.815 340.303 342.815 338.382 23598.0 600519
2017-01-12 341.386 341.879 342.224 339.377 17779.0 600519
2017-01-13 341.810 339.731 342.214 338.756 18282.0 600519
2017-01-16 339.003 336.382 339.663 333.752 36855.0 600519
2017-01-17 337.495 343.928 346.263 336.904 35188.0 600519
2017-01-18 343.682 349.789 351.454 342.037 46005.0 600519
2017-01-19 349.711 349.435 353.139 346.460 28523.0 600519
2017-01-20 349.612 349.701 352.075 347.770 21344.0 600519
小花看到上面的結(jié)果跟鐵柱說(shuō):“把code這一列改成茅臺(tái)漢字, high,low, volume列不要”,鐵柱一聽就知道這不就是刪除列和替換列嗎,于是又一陣鼓搗
import pandas as pd
import numpy as np
import tushare as tu
df = tu.get_k_data('600519', start='2017-01-01')
df.set_index('date', inplace=True)
df['code'] = '茅臺(tái)'
df.drop(['high', 'low', 'volume'], axis=1, inplace=True)
print(df)
OUT:
open close code
date
2017-01-03 329.299 329.575 茅臺(tái)
2017-01-04 329.634 346.667 茅臺(tái)
2017-01-05 344.785 341.574 茅臺(tái)
2017-01-06 341.475 345.534 茅臺(tái)
2017-01-09 342.618 343.317 茅臺(tái)
2017-01-10 343.258 343.800 茅臺(tái)
2017-01-11 342.815 340.303 茅臺(tái)
2017-01-12 341.386 341.879 茅臺(tái)
鐵柱能不能篩選出收盤價(jià)大于開盤價(jià)的記錄啊,小花問道。鐵柱一想這不就是邏就是一個(gè)比較操作嗎。pandas里還有邏輯操作且(“&”),或(“|”),包含(“isin”),非(“~”)
按照小花提的要求鐵柱又釋放一下查克拉
import pandas as pd
import numpy as np
import tushare as tu
df = tu.get_k_data('600519', start='2017-01-01')
df.set_index('date', inplace=True)
df['code'] = '茅臺(tái)'
df.drop(['high', 'low', 'volume'], axis=1, inplace=True)
df1 = df[df['close'] > df['open']]
print(df1)
小花看到結(jié)果很滿意啊,距離老板要求的結(jié)果越來(lái)越近了,這時(shí)小花跟鐵柱說(shuō):“鐵柱,根據(jù)收盤價(jià)排一下序行不”。行啊,必須行啊,鐵柱一聽想都不帶想得說(shuō)道,自己現(xiàn)在是查卡拉爆滿狀態(tài)啊,遇神殺神,遇佛殺佛。
import pandas as pd
import numpy as np
import tushare as tu
df = tu.get_k_data('600519', start='2017-01-01')
df.set_index('date', inplace=True)
df['code'] = '茅臺(tái)'
df.drop(['high', 'low', 'volume'], axis=1, inplace=True)
df1 = df[df['close'] > df['open']].copy()
df1.sort_values(by='close', inplace=True)
print(df1)
OUT:
open close code
date
2017-01-03 329.299 329.575 茅臺(tái)
2017-02-08 338.638 339.081 茅臺(tái)
2017-02-03 340.845 341.682 茅臺(tái)
2017-01-12 341.386 341.879 茅臺(tái)
2017-02-09 339.860 342.431 茅臺(tái)
2017-01-09 342.618 343.317 茅臺(tái)
2017-01-10 343.258 343.800 茅臺(tái)
2017-01-17 337.495 343.928 茅臺(tái)
2017-02-13 338.874 344.539 茅臺(tái)
2017-02-14 344.332 344.992 茅臺(tái)
2017-02-17 343.701 345.337 茅臺(tái)
2017-01-06 341.475 345.534 茅臺(tái)
2017-01-04 329.634 346.667 茅臺(tái)
2017-01-20 349.612 349.701 茅臺(tái)
2017-01-18 343.682 349.789 茅臺(tái)
2017-03-03 349.711 351.228 茅臺(tái)
鐵柱就是這個(gè)結(jié)果了,我明天給領(lǐng)導(dǎo)看看。不過鐵柱你能把結(jié)果寫到Excel里嗎,可以啊,必須的可以啊,誰(shuí)叫你是女神呢,你什么要求我都答應(yīng),鐵柱賤兮兮的回答到,強(qiáng)勢(shì)調(diào)戲一波。
import pandas as pd
import numpy as np
import tushare as tu
df = tu.get_k_data('600519', start='2017-01-01')
df.set_index('date', inplace=True)
df['code'] = '茅臺(tái)'
df.drop(['high', 'low', 'volume'], axis=1, inplace=True)
df1 = df[df['close'] > df['open']].copy()
df1.sort_values(by='close', inplace=True)
File = r'600519.xlsx'
writer = pd.ExcelWriter(File)
df1.to_excel(writer, 'Sheet1')
writer.save()

NICE,鐵柱帥氣的說(shuō)了句洋文,小花怎么樣,是你要的結(jié)果吧。小花看到Excel上的數(shù)據(jù)心里面壓著的石頭終于落地了,整個(gè)人也變得輕松了。真不知道怎么謝謝你鐵柱,要不我請(qǐng)你吃夜宵吧。鐵柱當(dāng)然滿心歡喜的答應(yīng)了,看看時(shí)間已經(jīng)夜里12點(diǎn)多了,這時(shí)間過得真TM快啊,愛因斯坦哪個(gè)老頭果真沒有騙我,時(shí)間是相對(duì)的。鐵柱和小花吃完夜宵然后.........