一固惯、Rolling 和 Expanding
rolling和expanding都是類似的弯囊,目的是查看股票市場價格隨著時間的變化虽缕,不同的是rolling average算的是最近一個窗口期(比如說20天)的一個平均值台妆,過了一天這個窗口又會向下滑動一天算20天的平均值础锐;expanding的話扶叉,是從第一個值就開始累加地計算平均值勿锅。
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
df=pd.read_csv('walmart_stock.csv')
df.head()
#在這里我把索引設為日期列
df.set_index('Date')
df.head()
輸出結(jié)果
繪制一下開盤指數(shù)
df['Open'].plot(figsize=(16, 6), '-')
rolling
現(xiàn)在開始繪制滾動平均值
根據(jù)官方文檔,我們主要設置窗口大小就可以了枣氧。
#注意在滾動之后是要設置聚合函數(shù)的溢十,expanding一樣,跟groupby操作類似
df.rolling(7).mean().head(10)
可以看到前6天是沒有值的达吞,原因是前6天都沒有之前的7天數(shù)據(jù)张弛,所以是nan。
#繪制出open的原數(shù)據(jù)的曲線和滾動平均值的曲線
df['former 30 days rolling Open mean']=df['Open'].rolling(30).mean()
df[['Open', 'former 30 days rolling Open mean']].plot(figsize=(16, 6))
可以看到滾動平均值會更加地差異化更小。
Expanding
#在這里要定義最小的觀察元素是1個乌庶,否則前面的可能都會是nan
df['former 30 days expanding Open mean']=df['Open'].expanding(min_periods=1).mean()
df[['Open', 'former 30 days expanding Open mean']].plot(figsize=(16, 6))
從圖上可以看得出种蝶,expanding曲線相對于原數(shù)據(jù)點的曲線要更加穩(wěn)定一些,它可以用來看這只股票的長期穩(wěn)定性瞒大。
Bollinger Bands
df['former 30 days rolling Close mean']=df['Close'].rolling(20).mean()
df['upper bound']=df['former 30 days rolling Close mean']+2*df['Close'].rolling(20).std()#在這里我們?nèi)?0天內(nèi)的標準差
df['lower bound']=df['former 30 days rolling Close mean']-2*df['Close'].rolling(20).std()
df[['Close', 'former 30 days rolling Close mean','upper bound','lower bound' ]].plot(figsize=(16, 6))
二螃征、Resampling
重采樣可以認為跟 group以及上面說到的rolling和expanding都是一樣的,都是分組操作透敌。
官方文檔當中主要注意的是rule盯滚,它是一個字符串的形式給出,表示我們希望以年月日工作日等等來對數(shù)據(jù)進行編組酗电,同樣地是編組完之后需要有個聚合函數(shù)魄藕。
看一下rule的種類。
我們先把以上麥當勞的數(shù)據(jù)的index進行轉(zhuǎn)換成datetime格式撵术,可以使用pd.to_datetime的方法背率。
df.index=pd.to_datetime(df.index)
type(df.index)
通過轉(zhuǎn)換以后就是datetime格式了,接下來就是進行resample嫩与。
df.resample('M').mean()
可以看得到寝姿,在按照月份resample之后多余的行會去掉,只剩下最后統(tǒng)計的那一行(在這里就是每個月底統(tǒng)計上一個月的平均值)划滋。
也可以自己定義我要對group后的元素怎么操作(比如說按照一個月group以后我想取出第一個值饵筑,或者說是其他的)
def first_day(grp):
return grp[0]#返回這個月的第一天的值
df.resample('M').apply(first_day)
這樣,每個月底都會返回這個月的第一天的值处坪。
三根资、Time shifting
time shifting其實就是把索引往前或者往后挪動
df.shift(10)
這里索引往前挪了10天,相當于數(shù)據(jù)往后挪動了10天同窘,缺失值用nan補充玄帕。