grace731

一、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()

输出结果


 
 

绘制一下开盘指数

df[\'Open\'].plot(figsize=(16, 6), \'-\')
 
 

rolling

现在开始绘制滚动平均值


 
 

根据官方文档,我们主要设置窗口大小就可以了。

#注意在滚动之后是要设置聚合函数的,expanding一样,跟groupby操作类似
df.rolling(7).mean().head(10)
 
 

可以看到前6天是没有值的,原因是前6天都没有之前的7天数据,所以是nan。

#绘制出open的原数据的曲线和滚动平均值的曲线
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曲线相对于原数据点的曲线要更加稳定一些,它可以用来看这只股票的长期稳定性。

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()#在这里我们取20天内的标准差
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,它是一个字符串的形式给出,表示我们希望以年月日工作日等等来对数据进行编组,同样地是编组完之后需要有个聚合函数。
看一下rule的种类。


 
 

我们先把以上麦当劳的数据的index进行转换成datetime格式,可以使用pd.to_datetime的方法。

df.index=pd.to_datetime(df.index)
type(df.index)
 
 

通过转换以后就是datetime格式了,接下来就是进行resample。

df.resample(\'M\').mean()
 
 

可以看得到,在按照月份resample之后多余的行会去掉,只剩下最后统计的那一行(在这里就是每个月底统计上一个月的平均值)。
也可以自己定义我要对group后的元素怎么操作(比如说按照一个月group以后我想取出第一个值,或者说是其他的)

def first_day(grp):
    return grp[0]#返回这个月的第一天的值
df.resample(\'M\').apply(first_day)
 
 

这样,每个月底都会返回这个月的第一天的值。

三、Time shifting

time shifting其实就是把索引往前或者往后挪动


 
 
df.shift(10)
 
 

这里索引往前挪了10天,相当于数据往后挪动了10天,缺失值用nan补充。

 
 
7人点赞
 
 


作者:九日照林
链接:https://www.jianshu.com/p/67f9dfa31c67
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

分类:

技术点:

相关文章: