pandas的rolling函数
原文链接 :http://www.wangluoshenghuo.com/2019/04/12/pandas%E7%9A%84rolling%E5%87%BD%E6%95%B0/
pandas的新版本rolling函数已经修改,而网上大部分都是老版本的解释。我想python2基本上面临淘汰的命运,学习新的rolling函数对你我都有好处。
什么是rolling window?
翻译成中文就是滑动,移动的窗口的意思,对于一组数据,比如一年的工商银行的每日股票数据,我们要分析它的趋势,但全年的数据波动明显太大,并且与历史的数据关联不大,有没有方法解决这个问题?
答案是有,我们可以定义一段时间的数据做为参考,比如一周或一个月,而每天有5天在交易,我就可以设置一个窗口,把这5天的数据做一个平均,这样5天波动的数据就会成为一个数据点,而第六天的数据会成为第二天到第六天的平均,这样一直循环下去,你会得到一组新的数据,比原数据更平滑,你也可以看成把情绪波动的价格做了回归。
下面是rolling函数和它的参数。
DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
里面的window就是窗口的大小。
我们举个例子,便于大家理解,取一年的深圳000001股票每天的数据。
df = pro.daily(ts_code=’000001.SZ’, start_date=’20180401′, end_date=’20190401′) #取一年的股票数据。
df[‘close’].head(10) #查看前10天的收盘价格
0 13.18
1 12.82
2 12.22
3 12.38
4 12.10
5 12.11
6 12.59
7 12.69
8 12.75
9 12.79
Name: close, dtype: float64
df[‘close’].rolling(5).mean().head(10)#使用rolling函数,window取值为5,代表5天。同样取前10天的数据,我们发现前面4个数据是NaN,而第5天的是前面5天的平均。 第六天是第二天到第六天的平均。
0 NaN
1 NaN
2 NaN
3 NaN
4 12.540
5 12.326
6 12.280
7 12.374
8 12.448
9 12.586
Name: close, dtype: float64
df[‘close’][0:5].mean()
12.540000000000001
df[‘close’][1:6].mean()
12.326
通过上面的例子,可以看到rolling函数的参数window的作用。我们在看看rolling函数其他参数的作用。
min_periods : 参数的数值是整数,缺省无。窗口中需要有值的最小观察次数(否则结果为na)。对于由偏移量指定的窗口,最小时段将默认为1。否则,最小时段将默认为窗口大小。
center : 参数的是布尔值 , 缺省为False,设置标签在窗口的中心。
win_type : 参数为字符串, 缺省为None提供一个窗口类型. 如果是None,也就是缺省,全部的点都平均加权.
win——type的类型:
boxcar
triang
blackman
hamming
bartlett
parzen
bohman
blackmanharris
nuttall
barthann
kaiser (needs beta)
gaussian (needs std)
general_gaussian (needs power, width)
slepian (needs width).
具体这些类型的使用,参考: scipy.signal window functions.
on:参数为字符串,可选,对于数据帧,计算滚动窗口而不是索引的列
axis:参数为0或1,默认为0,0为按列,1为按行
close:参数为字符串,默认无,在“right”、“left”、“both”或“neither”终结点上关闭间
隔。对于基于偏移量的窗口,它默认为“left”。对于固定窗口,默认为“both”。
在使用rolling函数后,我们还可以使用下面的统计方法对数据进行汇聚,比如:
rolling.count()计算非空观察数
rolling. sum()值的总和
rolling. mean()平均值
rolling. median()计算中值
rolling. min()得到最小值
rolling. max()得到最大值
rolling. std()求贝塞尔修正样本标准差
rolling. var()求无偏方差
rolling. skew()样本偏度
rolling. kurt()样本峰度
rolling. quantile()样本分位数(参数值为百分比)
rolling. apply()这个自己可以定义函数来灵活运用。
rolling. cov()无偏协方差在数据处理中用于衡量两个变量的总体误差。
rolling. corr()相关系数, 它是研究变量之间线性相关程度的量