python股票分析系列_Python股票分析系列——基础股票数据操作(一)
該系列視頻已經(jīng)搬運(yùn)至bilibili:?點(diǎn)擊查看
歡迎來(lái)到Python for Finance教程系列的第3部分。在本教程中,我們將使用我們的股票數(shù)據(jù)進(jìn)一步分解一些基本的數(shù)據(jù)操作和可視化。我們將要使用的開(kāi)始代碼(在前面的教程中已經(jīng)介紹過(guò))是:
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模塊配備了一系列可以利用的內(nèi)置功能,以及創(chuàng)建自定義pandas功能的方法。稍后我們將介紹一些自定義函數(shù),但現(xiàn)在讓我們對(duì)這些數(shù)據(jù)執(zhí)行一個(gè)非常常見(jiàn)的操作:移動(dòng)平均線moving averages。
簡(jiǎn)單移動(dòng)平均線的想法是花時(shí)間窗口,并計(jì)算該窗口中的平均價(jià)格。然后我們把這個(gè)窗口轉(zhuǎn)過(guò)一段時(shí)間,然后再做一次。在我們的例子中,我們將執(zhí)行100日均線(100ma)。因此,這將采用當(dāng)前價(jià)格,并將過(guò)去99天的價(jià)格加起來(lái)除以100,然后確定當(dāng)前的100日均線。然后我們移動(dòng)窗戶超過(guò)1天,然后再做同樣的事情。在pandas中這樣做很簡(jiǎn)單:
df['100ma'] = df['Adj Close'].rolling(window=100).mean()
做df ['100ma']允許我們重新定義包含現(xiàn)有列的內(nèi)容(如果我們有一個(gè)名為“100ma”的),或者創(chuàng)建一個(gè)新列,這就是我們?cè)谶@里所做的。我們說(shuō)df ['100ma']列等同于應(yīng)用滾動(dòng)方法的df ['Adj Close']列,窗口為100,這個(gè)窗口將是一個(gè)平均值( )(平均)操作。
現(xiàn)在,我們可以這樣做:
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
發(fā)生了什么? 在100ma列下,我們只看到NaN。 我們選擇了100個(gè)移動(dòng)平均線,理論上需要100個(gè)之前的數(shù)據(jù)點(diǎn)進(jìn)行計(jì)算,所以我們?cè)谇?00行中不會(huì)有任何數(shù)據(jù)。 NaN的意思是“Not a Number”。 在Pandas,你可以決定做許多事情與缺失的數(shù)據(jù),但現(xiàn)在,讓我們實(shí)際上只是改變最小周期參數(shù):
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
看吧,現(xiàn)在生效了,現(xiàn)在我們想看看它! 但是我們已經(jīng)看到了簡(jiǎn)單的圖表,稍微復(fù)雜一點(diǎn)的東西呢?
ax1 = plt.subplot2grid((6,1), (0,0), rowspan=5, colspan=1)
ax2 = plt.subplot2grid((6,1), (5,0), rowspan=1, colspan=1,sharex=ax1)
基本上,我們說(shuō)我們要?jiǎng)?chuàng)建兩個(gè)子圖,并且這兩個(gè)子圖都會(huì)像6x1網(wǎng)格一樣工作,我們有6行1列。 第一個(gè)子圖從該網(wǎng)格上的(0,0)開(kāi)始,跨越5行,并跨越1列。 下一個(gè)軸也位于6x1網(wǎng)格上,但它始于(5,0),跨越1行和1列。 第二個(gè)軸也有sharex = ax1,這意味著ax2將始終將其x軸與ax1的x軸對(duì)齊,反之亦然。 現(xiàn)在我們只是制作我們的地塊:
ax1.plot(df.index, df['Adj Close'])
ax1.plot(df.index, df['100ma'])
ax2.bar(df.index, df['Volume'])
plt.show()
綜上,我們繪制了第一軸上的close和100ma,第二軸上的volume。 我們的結(jié)果:
完整的代碼到目前為止:
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()
在接下來(lái)的幾節(jié)教程中,我們將學(xué)習(xí)如何通過(guò)Pandas數(shù)據(jù)重采樣制作燭臺(tái)圖形,并學(xué)習(xí)更多關(guān)于使用Matplotlib的知識(shí)。
總結(jié)
以上是生活随笔為你收集整理的python股票分析系列_Python股票分析系列——基础股票数据操作(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 奥运圣火门口过 广东四市公布奥运圣火路线
- 下一篇: 2021-09-01 学习笔记:Pyth