十一、 移动窗口函数

  1. 时间序列的移动窗口上的各种统计函数是一种常见的操作。这一类函数我们称作移动窗口函数

    • 与其他统计函数一样,移动窗口函数也排除了NA

    • 所谓移动窗口,就是两层含义:

      • 窗口:统计函数作用的对象为该窗口内的数值
      • 移动:该窗口是移动的,每个窗口对应一个统计量 。最终生成一个统计量序列
  2. 计算移动窗口的平均值:

    1. Series/DataFrame.rolling(window, min_periods=None, freq=None, center=False,
    2. 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()等方法。

    rolling0 rolling1 rolling2

  3. 计算移动窗口的指数加权平均值:

    1. Series/DataFrame.ewm(com=None, span=None, halflife=None, alpha=None, min_periods=0,
    2. freq=None, adjust=True, ignore_na=False, axis=0)
    • com:一个浮点数,以center of mass的方式给出了衰减因子。 十一、 移动窗口函数 - 图4
    • span:一个浮点数,以span的方式给出了衰减因子。 十一、 移动窗口函数 - 图5
    • halflife:一个浮点数,以halflife的方式给出了衰减因子: 十一、 移动窗口函数 - 图6
    • alpha:一个浮点数,为光滑因子。这种方式直接给出了 十一、 移动窗口函数 - 图7,要求 十一、 移动窗口函数 - 图8
    • min_periods:一个整数。给出了窗口内有效值的数量。
    • adjust:一个布尔值。见下面的解释。
    • ignore_na:一个布尔值,如果为True,则计算权重时,忽略缺失值。

    加权移动平均的计算公式为:

    十一、 移动窗口函数 - 图9

    其中 十一、 移动窗口函数 - 图10 为输入值。

    • adjust=True时, 十一、 移动窗口函数 - 图11,此时:

    十一、 移动窗口函数 - 图12

    • adjust=False

    十一、 移动窗口函数 - 图13

    它等价于

    十一、 移动窗口函数 - 图14

    上式中的 十一、 移动窗口函数 - 图15 有四种方式,其中最简单的就是直接设置 alpha参数。剩下的三种就是间接给出:

    十一、 移动窗口函数 - 图16

    该函数返回的是一个EWM对象。其统计方法有:

    • mean():指数加权移动平均的均值
    • var():指数加权移动平均的方差
    • std():指数加权移动平均的标准差
    • corr():指数加权移动平均的相关系数
    • cov():指数加权移动平均的协方差

    ewm0 ewm1 ewm2

  4. 拓展窗口是rolling窗口的特殊情况:当窗口大小等于序列长度。另外expanding窗口中,如果数据有空缺,则剔除空缺值再计算。

    1. 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() :相关系数

    expanding0 expanding1

    Center中,2016-11-01为中心的话,它右侧有4个数据,左侧理论上有5个数据(窗口总长为10),而左侧为空,因此第一个窗口就是前 5 个数据的统计量。