日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

用 Python 進(jìn)行金融數(shù)據(jù)可視化

系統(tǒng) 2225 0

Python量化的關(guān)鍵是金融數(shù)據(jù)可視化,無論是傳統(tǒng)的K線圖,還是現(xiàn)在的策略分析,都需要大量的可視化圖表。具體到編程代碼,就是使用Python繪圖模塊庫(kù)繪圖,比如傳統(tǒng)的Python繪圖模塊庫(kù)有Matplotlib,Seaborn等。

對(duì)于股票和財(cái)經(jīng)的金融數(shù)據(jù)源,可以使用Tushare庫(kù)來獲取和分析股票財(cái)經(jīng)數(shù)據(jù),我們獲得財(cái)經(jīng)數(shù)據(jù)源后,就可以使用Pandas對(duì)金融數(shù)據(jù)的各種指標(biāo)進(jìn)行定制化的分析了,最后讓數(shù)據(jù)可視化,可以使用Matplotlib來繪制出美觀大方的金融圖形,為企業(yè)的決策提供便利。金融繪圖的主要步驟如下:

用 Python 進(jìn)行金融數(shù)據(jù)可視化_第1張圖片

獲得股票數(shù)據(jù)源

Tushare是一個(gè)免費(fèi)、開源的Python財(cái)經(jīng)數(shù)據(jù)接口包。主要實(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ù)分析和可視化。

Tushare的官網(wǎng)地址

              
                http:
                
                  //tushare.org
                
                

在Tushare中使用的股票代碼,可以參考東方財(cái)富網(wǎng)提供的股票代碼查詢頁(yè)面,如圖7-63所示

              
                http:
                
                  //quote.eastmoney.com/stocklist.html
                
                

用 Python 進(jìn)行金融數(shù)據(jù)可視化_第2張圖片

圖763股票代碼查詢頁(yè)面

使用pip安裝Tushare。安裝Tushare之前,需要使用pip命令先安裝好lxml,requests和bs4模塊。

              
                
                  pip
                
                ?install?tushare
                


640?wx_fmt=jpeg

顯示股票歷史數(shù)據(jù)

TuShare里的 get_hist_data()函數(shù)用于獲取到目前為止3年的歷史數(shù)據(jù)。獲取個(gè)股歷史交易數(shù)據(jù)(包括均線數(shù)據(jù)),可以通過參數(shù)設(shè)置獲取日k線、周k線、月k線,以及5分鐘、15分鐘、30分鐘和60分鐘k線數(shù)據(jù)。本接口只能獲取近3年的日線數(shù)據(jù),適合搭配均線數(shù)據(jù)進(jìn)行選股和分析。

參數(shù)說明:

  • code:股票代碼,即6位數(shù)字代碼,或者指數(shù)代碼(sh=上證指數(shù) sz=深圳成指 hs300=滬深300指數(shù) sz50=上證50 zxb=中小板 cyb=創(chuàng)業(yè)板)

  • start:開始日期,格式Y(jié)YYY-MM-DD

  • end:結(jié)束日期,格式Y(jié)YYY-MM-DD

  • ktype:數(shù)據(jù)類型,D=日k線 W=周 M=月 5=5分鐘 15=15分鐘 30=30分鐘 60=60分鐘,默認(rèn)為D

  • retry_count:當(dāng)網(wǎng)絡(luò)異常后重試次數(shù),默認(rèn)為3

  • pause:重試時(shí)停頓秒數(shù),默認(rèn)為0

返回值說明:

  • date:日期

  • open:開盤價(jià)

  • high:最高價(jià)

  • close:收盤價(jià)

  • low:最低價(jià)

  • volume:成交量

  • price_change:價(jià)格變動(dòng)

  • p_change:漲跌幅

  • ma5:5日均價(jià)

  • ma10:10日均價(jià)

  • ma20:20日均價(jià)

  • v_ma5:5日均量

  • v_ma10:10日均量

  • v_ma20:20日均量

  • turnover:換手率[注:指數(shù)無此項(xiàng)]

查看編號(hào)為600848的股票代碼在2018年3月的歷史數(shù)據(jù),使用Tushare的get_hist_data()返回的是Pandas的DataFrame對(duì)象,這個(gè)DataFrame對(duì)象的columns比較多,在控制臺(tái)顯示不全,所以使用Pandas的to_csv()函數(shù)保存到hist_data.csv文件中。

              
                
                  import
                
                ?tushare?
                
                  as
                
                ?ts
                
data ?=?ts.get_hist_data( '600848' ,start= '2018-03-01' ,end= '2018-03-31' )
data .to_csv( 'hist_data.csv' ?)

運(yùn)行腳本,已記事本打開hist_data.csv文件。

用 Python 進(jìn)行金融數(shù)據(jù)可視化_第3張圖片

我們查看hist_data.csv文件會(huì)發(fā)現(xiàn),編號(hào)為600848的股票代碼在2018年3月的歷史交易數(shù)據(jù)是按照交易日期降序排列的。但展示在折線圖上的的日期一般要按升序排列。所以還要對(duì)DataFrame對(duì)象的index屬性進(jìn)行排序。使用Pandas的DataFrame對(duì)象的sort_index()函數(shù),使交易日期按照從小到到大的升序排列。這樣畫出的折線圖就符合人們查看歷史交易數(shù)據(jù)的正常習(xí)慣了,完整代碼如下。

              
                
                  import
                
                ?tushare?
                
                  as
                
                ?ts
                

data ?=?ts.get_hist_data( '600848' ,start= '2018-03-01' ,end= '2018-03-31' )
#?對(duì)交易時(shí)間進(jìn)行降序排列
data ?=? data .sort_index()
data .to_csv( 'hist_data.csv' ?)

獲得編號(hào)為600848的股票代碼在2018年3月的歷史交易數(shù)據(jù)后,就可以使用Maplotlib畫出股票歷史數(shù)據(jù)的折線圖,折線圖的橫坐標(biāo)是股票歷史數(shù)據(jù)的交易日期,縱坐標(biāo)是股票交易數(shù)據(jù)的開盤價(jià)(open)。

              
                
                  import
                
                ?tushare?
                
                  as
                
                ?ts
                
import ?matplotlib.pyplot? as ?plt
from?datetime? import ?datetime

data ?=?ts.get_hist_data( '600848' ,start= '2018-03-01' ,end= '2018-03-31' )
#?對(duì)時(shí)間進(jìn)行降序排列
data ?=? data .sort_index()

xs?=?[datetime.strptime(d,? '%Y-%m-%d' ).toordinal()? for ?d? in ? data .index?]
plt.plot_date(?xs?,? data [ 'open' ]?,? 'b-' )
plt.gcf().autofmt_xdate()??#?自動(dòng)旋轉(zhuǎn)日期標(biāo)記
plt.show()

運(yùn)行腳本輸出以下圖形。

用 Python 進(jìn)行金融數(shù)據(jù)可視化_第4張圖片

以上代碼的核心代碼如下,使用Tushare的get_hist_data()函數(shù)返回股票交易代碼的股票歷史數(shù)據(jù),也就是Pandas的DataFrame對(duì)象data,data.index索引值是日期型字符串,使用Matplotlib的plot_date()畫圖函數(shù),需要轉(zhuǎn)換成函數(shù)可以識(shí)別的Gregoian Calendar類型數(shù)據(jù)。

              
                xs?=?[datetime.strptime(d,?
                
                  '%Y-%m-%d'
                
                ).toordinal()?
                
                  for
                
                ?d?
                
                  in
                
                ?data.
                
                  index
                
                ?]
                

以上表達(dá)式語句等同于以下語句。

              
                xs?=?[]
                
for ? date ? in ?data.index:
???? print (? date ?)
????transDate?=?datetime.strptime(? date ?,? '%Y-%m-%d' )
????xs.append(?transDate.toordinal())

繪制折線圖的X 軸的日期也可以使用 matplotlib.dates.strpdate2num() 函數(shù)進(jìn)行轉(zhuǎn)換,完整代碼如下。

              
                
                  import
                
                ?tushare?
                
                  as
                
                ?ts
                
import ?matplotlib.pyplot? as ?plt
import ?matplotlib.dates? as ?mdates

data ?=?ts.get_hist_data( '600848' ,start= '2018-03-01' ,end= '2018-03-31' )
#?對(duì)時(shí)間進(jìn)行降序排列
data ?=? data .sort_index()

xs?=?[mdates.strpdate2num( '%Y-%m-%d' )(d?)? for ?d? in ? data .index?]

plt.plot_date(?xs?,? data [ 'open' ]?,? 'b-' )
plt.gcf().autofmt_xdate()??#?自動(dòng)旋轉(zhuǎn)日期標(biāo)記
plt.show()

運(yùn)行腳本輸出以下圖形。

用 Python 進(jìn)行金融數(shù)據(jù)可視化_第5張圖片

獲取60分鐘k線數(shù)據(jù)。

              
                
                  import
                
                ?tushare?
                
                  as
                
                ?ts
                
import ?matplotlib.pyplot? as ?plt
import ?matplotlib.dates? as ?mdates

data ?=?ts.get_hist_data( '600848' ,?ktype= '60' )
xs?=?[mdates.strpdate2num( '%Y-%m-%d?%H:%M:%S' )(d?)? for ?d? in ? data .index?]

#設(shè)置時(shí)間標(biāo)簽顯示格式
ax?=?plt.gca()
ax.xaxis.set_major_formatter(mdates.DateFormatter( '%Y-%m-%d?%H:%M:%S' ))

plt.plot_date(xs,? data [ 'open' ], '-' ?,?label= 'open' )
plt.legend(loc= 0 ??)

plt.gcf().autofmt_xdate()
plt.show()

運(yùn)行腳本輸出以下圖形。

用 Python 進(jìn)行金融數(shù)據(jù)可視化_第6張圖片

圖768編號(hào)為600848的股票代碼的60分鐘內(nèi)的k線圖

留言回復(fù)你用Python做過哪些有趣的應(yīng)用 ,我們會(huì)在留言中隨機(jī)抽取一位讀者免費(fèi)送出北京大學(xué)出版社出版的《Python 3 數(shù)據(jù)分析與機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》圖書一本。


熱 門 推 薦
用Python創(chuàng)建微信機(jī)器人

用Python機(jī)器人監(jiān)聽微信群聊

用Python獲取攝像頭并實(shí)時(shí)控制人臉

開源項(xiàng)目 | 用Python美化LeetCode倉(cāng)庫(kù)

推薦Python中文社區(qū)旗下的幾個(gè)服務(wù)類公眾號(hào)
征稿啟事 | Python中文社區(qū)有獎(jiǎng)?wù)魑?

用 Python 進(jìn)行金融數(shù)據(jù)可視化_第7張圖片 文章節(jié)選自北京大學(xué)出版社出版的《Python 3 數(shù)據(jù)分析與機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》,本書現(xiàn)在5折優(yōu)惠,點(diǎn)擊閱讀原文 購(gòu)書~


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 延边| 江永县| 八宿县| 荆州市| 昭苏县| 册亨县| 蚌埠市| 苍梧县| 峨山| 出国| 林甸县| 余庆县| 望都县| 宜兰市| 丰宁| 永寿县| 公安县| 陇西县| 苍梧县| 永寿县| 全椒县| 邹平县| 新民市| 池州市| 江津市| 鹤峰县| 安平县| 德惠市| 临泽县| 五原县| 吴川市| 英山县| 肃北| 名山县| 伽师县| 江西省| 陕西省| 潞城市| 荥阳市| 广元市| 项城市|