Python股票分析系列——基礎股票數據操作(一).p3


該系列視頻已經搬運至bilibili: 點擊查看

 

歡迎來到Python for Finance教程系列的第3部分。在本教程中,我們將使用我們的股票數據進一步分解一些基本的數據操作和可視化。我們將要使用的開始代碼(在前面的教程中已經介紹過)是:

import datetime as dt
import matplotlib.pyplot as plt
from matplotlib import style
import pandas as pd
import pandas_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  \
Date                                                                       
2010-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   6866900   

            Adj Close  100ma  
Date                          
2010-06-29  23.889999    NaN  
2010-06-30  23.830000    NaN  
2010-07-01  21.959999    NaN  
2010-07-02  19.200001    NaN  
2010-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  \
Date                                                                       
2010-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   6866900   

            Adj Close      100ma  
Date                              
2010-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。 我們的結果:

完整的代碼到目前為止:

import datetime as dt
import matplotlib.pyplot as plt
from matplotlib import style
import pandas as pd
import pandas_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股票分析系列——基礎股票數據操作(二).p4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM