python股票分析系列_Python股票分析系列——基础股票数据操作(一).p3
該系列視頻已經搬運至bilibili:?點擊查看
歡迎來到Python for Finance教程系列的第3部分。在本教程中,我們將使用我們的股票數據進一步分解一些基本的數據操作和可視化。我們將要使用的開始代碼(在前面的教程中已經介紹過)是:
importdatetime as dtimportmatplotlib.pyplot as pltfrom matplotlib importstyleimportpandas as pdimportpandas_datareader.data as web
style.use('ggplot')
df= pd.read_csv('tsla.csv', parse_dates=True, index_col=0)
pandas模塊配備了一系列可以利用的內置功能,以及創建自定義pandas功能的方法。稍后我們將介紹一些自定義函數,但現在讓我們對這些數據執行一個非常常見的操作:移動平均線moving averages。
簡單移動平均線的想法是花時間窗口,并計算該窗口中的平均價格。然后我們把這個窗口轉過一段時間,然后再做一次。在我們的例子中,我們將執行100日均線(100ma)。因此,這將采用當前價格,并將過去99天的價格加起來除以100,然后確定當前的100日均線。然后我們移動窗戶超過1天,然后再做同樣的事情。在pandas中這樣做很簡單:
df['100ma'] = df['Adj Close'].rolling(window=100).mean()
做df ['100ma']允許我們重新定義包含現有列的內容(如果我們有一個名為“100ma”的),或者創建一個新列,這就是我們在這里所做的。我們說df ['100ma']列等同于應用滾動方法的df ['Adj Close']列,窗口為100,這個窗口將是一個平均值( )(平均)操作。
現在,我們可以這樣做:
print(df.head())
Date Open High Low Close Volume \
Date2010-06-29 2010-06-29 19.000000 25.00 17.540001 23.889999 18766300
2010-06-30 2010-06-30 25.790001 30.42 23.299999 23.830000 17187100
2010-07-01 2010-07-01 25.000000 25.92 20.270000 21.959999 8218800
2010-07-02 2010-07-02 23.000000 23.10 18.709999 19.200001 5139800
2010-07-06 2010-07-06 20.000000 20.00 15.830000 16.110001 6866900Adj Close 100ma
Date2010-06-29 23.889999NaN2010-06-30 23.830000NaN2010-07-01 21.959999NaN2010-07-02 19.200001NaN2010-07-06 16.110001 NaN
發生了什么? 在100ma列下,我們只看到NaN。 我們選擇了100個移動平均線,理論上需要100個之前的數據點進行計算,所以我們在前100行中不會有任何數據。 NaN的意思是“Not a Number”。 在Pandas,你可以決定做許多事情與缺失的數據,但現在,讓我們實際上只是改變最小周期參數:
df['100ma'] = df['Adj Close'].rolling(window=100,min_periods=0).mean()print(df.head())
Date Open High Low Close Volume \
Date2010-06-29 2010-06-29 19.000000 25.00 17.540001 23.889999 18766300
2010-06-30 2010-06-30 25.790001 30.42 23.299999 23.830000 17187100
2010-07-01 2010-07-01 25.000000 25.92 20.270000 21.959999 8218800
2010-07-02 2010-07-02 23.000000 23.10 18.709999 19.200001 5139800
2010-07-06 2010-07-06 20.000000 20.00 15.830000 16.110001 6866900Adj Close 100ma
Date2010-06-29 23.889999 23.889999
2010-06-30 23.830000 23.860000
2010-07-01 21.959999 23.226666
2010-07-02 19.200001 22.220000
2010-07-06 16.110001 20.998000
看吧,現在生效了,現在我們想看看它! 但是我們已經看到了簡單的圖表,稍微復雜一點的東西呢?
ax1 = plt.subplot2grid((6,1), (0,0), rowspan=5, colspan=1)
ax2= plt.subplot2grid((6,1), (5,0), rowspan=1, colspan=1,sharex=ax1)
基本上,我們說我們要創建兩個子圖,并且這兩個子圖都會像6x1網格一樣工作,我們有6行1列。 第一個子圖從該網格上的(0,0)開始,跨越5行,并跨越1列。 下一個軸也位于6x1網格上,但它始于(5,0),跨越1行和1列。 第二個軸也有sharex = ax1,這意味著ax2將始終將其x軸與ax1的x軸對齊,反之亦然。 現在我們只是制作我們的地塊:
ax1.plot(df.index, df['Adj Close'])
ax1.plot(df.index, df['100ma'])
ax2.bar(df.index, df['Volume'])
plt.show()
綜上,我們繪制了第一軸上的close和100ma,第二軸上的volume。 我們的結果:
完整的代碼到目前為止:
importdatetime as dtimportmatplotlib.pyplot as pltfrom matplotlib importstyleimportpandas as pdimportpandas_datareader.data as web
style.use('ggplot')
df= pd.read_csv('tsla.csv', parse_dates=True, index_col=0)
df['100ma'] = df['Adj Close'].rolling(window=100, min_periods=0).mean()print(df.head())
ax1= plt.subplot2grid((6,1), (0,0), rowspan=5, colspan=1)
ax2= plt.subplot2grid((6,1), (5,0), rowspan=1, colspan=1, sharex=ax1)
ax1.plot(df.index, df['Adj Close'])
ax1.plot(df.index, df['100ma'])
ax2.bar(df.index, df['Volume'])
plt.show()
在接下來的幾節教程中,我們將學習如何通過Pandas數據重采樣制作燭臺圖形,并學習更多關于使用Matplotlib的知識。
總結
以上是生活随笔為你收集整理的python股票分析系列_Python股票分析系列——基础股票数据操作(一).p3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信公众号获取 时间戳 随机数
- 下一篇: 熊市挣钱秘笈统计套与对易