Python的股票價格可視化實踐
最近學習的心態起起伏伏,不經意間就被大佬完虐,差距還是很客觀的,這種時候要穩定心態,虛心學習,向大佬們看齊。
利用Python的pandas_datareader包可以直接從網上獲取想要了解的股票的價格信息,同時利用matplotlib可以將數據實現可視化。
由於是初學繪圖,很過名詞一開始見到很陌生,在此整理如下:
figure 畫板
Axes/Subplot 畫紙
title 標題Axis 坐標軸xlabel X軸ylabel Y軸
plot 策劃legend 圖例scatter 散點圖annotate 注釋shrink 收縮
index 索引row 行column 列grid 網格
先導入包
import pandas as pd
from pandas_datareader import data
將想要獲取的股票的代碼以及公司名稱反映在一個字典里
gafataDict = {谷歌: GOOG,
亞馬遜: AMZN,
Facebook: FB,
蘋果: AAPL,
阿里巴巴: BABA,
騰訊: 0700.hk}
#這裡要注意,獲取國內股票數據的方式是:「股票代碼」+「對應股市」(港股為.hk,A股為.ss)
我們想要獲取谷歌、亞馬遜、Facebook、蘋果、騰訊、阿里巴巴這六家超級公司的股票信息
先列出時間節點
start_date = 2017-01-01
end_date = 2018-01-01
獲取股票價格信息
googDf = data.get_data_yahoo(gafataDict[谷歌], start_date, end_date)
amznDf = data.get_data_yahoo(gafataDict[亞馬遜], start_date, end_date)
fbDf = data.get_data_yahoo(gafataDict[Facebook], start_date, end_date)
aaplDf = data.get_data_yahoo(gafataDict[蘋果], start_date, end_date)
babaDf = data.get_data_yahoo(gafataDict[阿里巴巴], start_date, end_date)
txDf = data.get_data_yahoo(gafataDict[騰訊], start_date, end_date)
為了防止後面數據報錯,我們需要重置索引列
googDf.reset_index(inplace = True)
googDf.set_index(Date, inplace=True)
googDf[Date] = googDf.index
amznDf.reset_index(inplace = True)
amznDf.set_index(Date, inplace=True)
amznDf[Date] = amznDf.index
fbDf.reset_index(inplace=True)
fbDf.set_index(Date, inplace=True)
fbDf[Date] = fbDf.index
aaplDf.reset_index(inplace=True)
aaplDf.set_index(Date,inplace=True)
aaplDf[Date] = aaplDf.index
txDf.reset_index(inplace= True)
txDf.set_index(Date, inplace= True)
txDf[Date]= txDf.index
babaDf.reset_index(inplace= True)
babaDf.set_index(Date, inplace= True)
babaDf[Date] = babaDf.index
下面就可以繪製簡單的折線圖了
單個圖形以谷歌展示,其餘五個類似
import matplotlib.pyplot as plt
googDf.plot( x = Date, y = Close, label = 谷歌)
plt.xlabel(時間)
plt.ylabel(股價(美元))
plt.title(2017年谷歌股價走勢)
plt.grid(True)
plt.show()
散點圖可以看出成交量與股價的關係
googDf.plot(x = Volume, y = Close, kind = scatter)
plt.xlabel(成交量)
plt.ylabel(股價(美元) )
plt.grid(True)
plt.show()
成交量與估計整體呈正線性相關
在比較多家公司股票價格之前,由於騰訊是港股,我們根據匯率將其換算成美元表示
txDf[Close] = txDf[Close]/7.83
下面利用代碼將六家公司股票價格變化情況顯示在一張畫紙上
ax1 = googDf.plot(x = Date, y = Close, label = 谷歌)
amznDf.plot(ax = ax1, x = Date, y = Close, label = 亞馬遜)
fbDf.plot(ax = ax1, x = Date, y = "Close", label = "Facebook")
aaplDf.plot(ax = ax1, x = Date, y = Close, label = 蘋果)
txDf.plot( ax = ax1, x = "Date", y = "Close", label = 騰訊)
babaDf.plot(ax = ax1, x = Date, y = Close, label = 阿里巴巴)
plt.xlabel(時間)
plt.ylabel(股價(美元))
plt.grid(True)
plt.show()
考慮谷歌與亞馬遜的價格相對於其他四家較高,將其單獨反應
ax2 = googDf.plot(x = Date, y = Close, label = 谷歌)
amznDf.plot(ax = ax2, x = "Date", y = Close, label = 亞馬遜)
plt.xlabel (時間)
plt.ylabel(股價(美元))
plt.grid(True)
plt.show()
ax3 = fbDf.plot( x = "Date", y = Close, label = Facebook)
aaplDf.plot(ax = ax3, x = Date, y = Close, label = 蘋果)
txDf.plot(ax = ax3, x = Date, y = Close, label = 騰訊)
babaDf.plot(ax = ax3, x = Date, y = Close, label = 阿里巴巴)
plt.xlabel (時間)
plt.ylabel(股價(美元))
plt.grid(True)
plt.show()
平均股價可以用柱狀圖顯示
gafataMeanList = [googDf[Close].mean(),
amznDf[Close].mean(),
fbDf[Close].mean(),
aaplDf[Close].mean(),
txDf[Close].mean(),
babaDf[Close].mean()]
gafataMeanSer = pd.Series(gafataMeanList,index=
[谷歌,
亞馬遜,
Facebook,
蘋果,
阿里巴巴,
騰訊])
gafataMeanSer.plot(kind = bar, label = GAFATA)
plt.xlabel(公司名稱)
plt.ylabel(平均股價(美元))
plt.title(2017年GAFATA平均股價)
plt.grid(True)
plt.show()
箱線圖可以去除波動的異常值的影響
closeDf = pd.DataFrame()
closeDf = pd.concat([closeDf,googDf[Close],amznDf[Close],fbDf[Close],aaplDf[Close],txDf[Close],babaDf[Close]],axis=1)
closeDf.columns = [谷歌,亞馬遜,Facebook,蘋果,騰訊,阿里巴巴]
closeDf.plot(kind = box)
plt.xlabel(公司名稱)
plt.ylabel(股票價格(美元))
plt.grid(True)
plt.show()
戒驕戒躁,虛心學習,看到大佬好的代碼一定要臨摹一番。
推薦閱讀:
TAG:Python | Pandas(Python) | 數據可視化 |