rolling用法实例

rolling()的主要用途为进行移动均值计算,常用来对时间序列数据做均值操作。rolling()支持对Sries和DataFrame的操作。

一、函数定义

rolling()函数的定义如下:

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None, step=None, method='single')

其中,

window:均值计算的窗口大小,>=0的整数。如果设置为N,假设当前为第M行,则计算从M-N+1至M行的算术平均值(行号M从1开始)。当(M-N+1)<1,则其值为NAN,即从第N行开始才有均值,1~(N-1)行的值为NAN。注意窗口大小取0时,所有结果均为NAN;取1时结果为计算的输入值。

min_periods:窗口总向前计算的最小数量,默认为等于window,表示与window相等。当window设置为N时,向前数据不足N行,则该行均值设置为NAN;当设置为1时,计算时会抛弃不存在的行。

center:设置window的计算结束位置,默认False,居右,即当前行为窗口中的最后一行。True为居中,表示当前行为窗口的中间位置。

win_type:指定窗口的类型,字符串类型,默认为None,对窗口内所有数据进行平均加权计算。可以指定窗口类型来获得不同的加权方式,窗口的类型包括boxcar、triang、blackman、hamming、bartlett等,可参考《Window functions》。在量化中通常是采用平均加权,使用默认值即可。

on: 可选参数。对于dataframe,可以指定需要操作的列名。

axis:0或者‘index’/1或者‘columns’,默认为0,即对某列数据进行计算;1为对某行数据进行计算。

例如,上面求收盘价的5日均值,axis=0,是对‘close’列的数据进行计算。

closed:定义窗口区间的开闭,支持int类型的window。默认值None表示左开右闭,即‘right‘。可以根据情况指定为‘left‘、‘both‘、‘neither‘等。这里简单解释下意思,假设N=5,那么‘right‘表示均值计算采用的数据包括当前行以及前4行。

step:1.5.0以上版本支持。按指定的step计算每个step处的加权平均值,默认为None,表示step为1。

method:1.3.0以上版本支持。计算均值的范围,字符串类型,’single’表示计算单独的列或者行,‘table‘为计算整个表。

其它未覆盖的内容请参考官方文档

二、使用示例

(1)求N=5的加权平均值

df['MA5']=df['close'].rolling(5).mean()

(2)设置计算位置为’center=True’

df['PMA5']=df['close'].rolling(5,center=True).mean()

比较MA5和PMA5的值会发现,MA5的值从第5行开始不为NAN,而PMA5的值从第三行开始不为NAN,相当于将均值数据整体上移了2行。

(3)设置窗口区间开闭’closed=left’

df['PMA5']=df['close'].rolling(5,closed='left').mean()

closed=’right’时,均值有效数据从第5行开始;closed=’left’时,均值不包含当前行,因此有效数据从第6行开始。

三、与rolling()配合的常用函数

与rolling()配合使用的常用函数包括:

count:返回移动窗口中非NA观测值的数量。

max:返回移动窗口的最小值。

min:返回移动窗口的最大值。

diff:返回观测值的第一个离散差。

mean:返回移动窗口的均值。

median:返回移动窗口的中位数。

round:返回保留指定位数的观测值。

sum:返回移动窗口中观测值的总和。

std:返回移动窗口的标准差。

var:返回移动窗口的方差。

corr:移动窗口的相关系数。

abs:返回观测值的绝对值。

cov:计算数据样本的协方差矩阵。

skew:样本值的偏度(三阶矩),即数据分布的对称性。

kurt:样本值的峰度(四阶矩),即数据在均值附近分布的集中度。

describe:给出样本的基本描述(基本统计量如均值、标准差等)。

apply:对移动窗口中的值进行函数计算。

agg:在指定的轴上实现一个或多个操作。

cumsum:依次给出前1、2、… 、n个数的和。

cumprod:依次给出前1、2、… 、n个数的积。

cummax:依次给出前1、2、… 、n个数的最大值。

cummin:依次给出前1、2、… 、n个数的最小值。

其它可参考官方文档

四、综合示例

1.计算前5日成交量

df['VOL']=df['volume'].rolling(5).sum()

2.后N行平均值计算

由于rolling的window参数只能为正,因此只能向前滑动,无法向后滑动。这里需要将dataframe反转后进行计算。

df['FMA10'] = df.iloc[::-1]['close'].rolling(10).mean()

3.计算5日价格之和的平方根

df['MA53']=df['close'].rolling(5).sum().apply(np.sqrt)

4.计算5日成交量均值的累积

df['MA54']=df['volume'].rolling(5).mean().cumsum()

5.对’close’列求均值同时对’volume’求和

df.rolling(3).agg({"volume": "sum", "close": "mean"})

以上只是列举了一下简单的例子,如何组合能够解决实际问题需要去实践。实际上DataFrame提供了相同丰富的函数,通过与移动平均rolling等功能联合使用,可以大大简化量化中的计算过程。

-----------------------------------

原创不易,请多支持

  • 0
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值