十一、 移动窗口函数
时间序列的移动窗口上的各种统计函数是一种常见的操作。这一类函数我们称作移动窗口函数
与其他统计函数一样,移动窗口函数也排除了
NA
值所谓移动窗口,就是两层含义:
- 窗口:统计函数作用的对象为该窗口内的数值
- 移动:该窗口是移动的,每个窗口对应一个统计量 。最终生成一个统计量序列
计算移动窗口的平均值:
Series/DataFrame.rolling(window, min_periods=None, freq=None, center=False,
win_type=None, on=None, axis=0)
window
:一个整数或者一个offset
。如果是个整数,则给出了窗口的大小(窗口大小是固定的)。如果是个offset
,则每个窗口对应一个时间段,因此窗口大小不固定。min_periods
:一个整数。给出了窗口内有效值的数量。freq
:一个字符串或者DateOffset
对象,该参数被废弃。它用于对数据重采样,因为我们一般使用resample()
来完成,所以该参数被废弃。center
:一个布尔值。如果为True
,则聚合结果的label
为窗口的中心点的索引。默认情况下,聚合结果的label
为窗口的最右点的索引。(因为一个聚合结果对应了window
个数据,因此该聚合结果可选的索引可以从这些数据的索引中选取)win_type
:一个字符串,给出了窗口类型on
:一个字符串。对于DataFrame
,它指定在哪一column
上进行移动平均。否则是index
axis
:一个整数。指定沿着0轴还是1轴移动平均。如果为0/'index'
则沿着0轴;如果为1/'columns'
则沿着0轴
窗口类型可以为:
'boxcar'
'triang'
'blackman'
'hamming'
'bartlett'
'parzen'
'bohman'
'blackmanharris'
'nuttall'
'barthann'
'kaiser'
(需要beta
参数),该参数由后面的.mean()
等方法给出'guassian'
(需要std
参数),该参数由后面的.mean()
等方法给出'general_gaussian'
(需要power,width
参数),该参数由后面的.mean()
等方法给出'slepian'
(需要width
参数),该参数由后面的.mean()
等方法给出
该方法返回一个
Window
对象,你可以在该对象上调用.mean()/.sum()/.agg()/.aggregate()
等方法。计算移动窗口的指数加权平均值:
Series/DataFrame.ewm(com=None, span=None, halflife=None, alpha=None, min_periods=0,
freq=None, adjust=True, ignore_na=False, axis=0)
com
:一个浮点数,以center of mass
的方式给出了衰减因子。span
:一个浮点数,以span
的方式给出了衰减因子。halflife
:一个浮点数,以halflife
的方式给出了衰减因子:alpha
:一个浮点数,为光滑因子。这种方式直接给出了 ,要求min_periods
:一个整数。给出了窗口内有效值的数量。adjust
:一个布尔值。见下面的解释。ignore_na
:一个布尔值,如果为True
,则计算权重时,忽略缺失值。
加权移动平均的计算公式为:
其中 为输入值。
- 当
adjust=True
时, ,此时:
- 当
adjust=False
时
它等价于
上式中的 有四种方式,其中最简单的就是直接设置
alpha
参数。剩下的三种就是间接给出:该函数返回的是一个
EWM
对象。其统计方法有:mean()
:指数加权移动平均的均值var()
:指数加权移动平均的方差std()
:指数加权移动平均的标准差corr()
:指数加权移动平均的相关系数cov()
:指数加权移动平均的协方差
拓展窗口是
rolling
窗口的特殊情况:当窗口大小等于序列长度。另外expanding
窗口中,如果数据有空缺,则剔除空缺值再计算。DataFrame/Series.expanding(min_periods=1, freq=None, center=False, axis=0)
min_periods
:一个整数。给出了窗口内有效值的数量。freq
:一个字符串或者DateOffset
对象,该参数被废弃。它用于对数据重采样,因为我们一般使用resample()
来完成,所以该参数被废弃。center
:一个布尔值。如果为True
,则label
为窗口的中心的值。默认情况下,label
为窗口的右侧的值。axis
:一个整数。指定沿着0轴还是1轴移动平均。如果为0/'index'
则沿着0轴;如果为1/'columns'
则沿着0轴
它返回一个
Expanding
对象。它的统计方法如下:
count()
:有效值数量sum()
:和mean()
:均值median()
:中位数min()
:最小值max()
:最大值std()
:标准差var()
:方差skew()
:斜度kurt()
:峰度quantile()
:百分位数apply()
:通用处理函数。其参数为一个可调用对象,该可调用对象接受一个序列,返回一个标量。cov()
:协方差corr()
:相关系数
在
Center
中,2016-11-01
为中心的话,它右侧有4个数据,左侧理论上有5个数据(窗口总长为10),而左侧为空,因此第一个窗口就是前 5 个数据的统计量。