pandas的rolling函数

时间:2024-10-27 15:26:28

原文链接 :/2019/04/12/pandas%E7%9A%84rolling%E5%87%BD%E6%95%B0/

pandas的新版本rolling函数已经修改,而网上大部分都是老版本的解释。我想python2基本上面临淘汰的命运,学习新的rolling函数对你我都有好处。

什么是rolling window?

翻译成中文就是滑动,移动的窗口的意思,对于一组数据,比如一年的工商银行的每日股票数据,我们要分析它的趋势,但全年的数据波动明显太大,并且与历史的数据关联不大,有没有方法解决这个问题?

答案是有,我们可以定义一段时间的数据做为参考,比如一周或一个月,而每天有5天在交易,我就可以设置一个窗口,把这5天的数据做一个平均,这样5天波动的数据就会成为一个数据点,而第六天的数据会成为第二天到第六天的平均,这样一直循环下去,你会得到一组新的数据,比原数据更平滑,你也可以看成把情绪波动的价格做了回归。

下面是rolling函数和它的参数。

(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)

里面的window就是窗口的大小。

我们举个例子,便于大家理解,取一年的深圳000001股票每天的数据。

df = (ts_code=’’, 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).
具体这些类型的使用,参考: window functions.

on:参数为字符串,可选,对于数据帧,计算滚动窗口而不是索引的列

axis:参数为0或1,默认为0,0为按列,1为按行

close:参数为字符串,默认无,在“right”、“left”、“both”或“neither”终结点上关闭间
隔。对于基于偏移量的窗口,它默认为“left”。对于固定窗口,默认为“both”。

在使用rolling函数后,我们还可以使用下面的统计方法对数据进行汇聚,比如:

()计算非空观察数

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()相关系数, 它是研究变量之间线性相关程度的量