python时间序列分析之_用pandas中的rolling函数计算时间窗口数据(讲的透彻,NBplus)

时点的数据波动较大,某一点的数据不能很好的表现它本身的特性,于是我们就想,能否用一个区间的的数据去表现呢,这样数据的准确性是不是更好一些呢?因此,引出滑动窗口(移动窗口)的概念,简单点说,为了提升数据的可靠性,将某个点的取值扩大到包含这个点的一段区间,用区间来进行判断,这个区间就是窗口。如下面的示意图所示,其中时间序列数据代表的是15日每日的温度,现在我们以3天为一个窗口,将这个窗口从左至右依次滑动,统计出3天的平均值作为这个点的值,比如3号的温度就是1号、2号、3号的平均温度,通过示意图我们已经理解了滑动窗口,下面我们就看看pandas中使用的函数及各参数的含义。

滑动窗口示意图

滑窗个数3
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    5 7 6 5 9 1 4 5 4 4 6 7 9 13 6
窗数=3                            
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    5 7 6 5 9 1 4 5 4 4 6 7 9 13 6
  窗数=3                          
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    5 7 6 5 9 1 4 5 4 4 6 7 9 13 6
    窗数=3                        
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    5 7 6 5 9 1 4 5 4 4 6 7 9 13 6
      窗数=3                      
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    5 7 6 5 9 1 4 5 4 4 6 7 9 13 6
        窗数=3                    

pandas.DataFrame.rolling参数详解

pandas中提供了pandas.DataFrame.rolling这个函数来实现滑动窗口值计算,下面是这个函数的原型:

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None),参数含义如下图:

 

 

参数 参数说明
windws 滑窗大小,注意两种形式int或者offset。如果使用int,则数值via哦是计算统计量的观测值的数量即向前几个数据。如果是offset类型,表示时间窗的大小。
min_periods 每个窗口最少包含的观测值数量,小于这个值的窗口结果为NA.值可以是int,默认NONE。offset情况下,默认为1
center 把窗口的标签设置为居中。布尔型默认为False,默认为1。
win_type 窗口的类型。截取窗的各种函数。字符串类型,默认为None
on 可选参数。对于dataframe而言,制定要计算滚动窗口的列。值为列名。
axis int、字符串。默认为0,即对列进行计算
closed 定义区间的开闭,支持int类型的Window。offset类型的默认为佐凯右闭的。即默认为right。

 

 

用法代码演示

上面我们介绍了滑动窗口的概念及实现函数的参数,下面我们通过代码演示,依次展示各参数的作用。

import matplotlib.pylab as pltimport numpy as npimport pandas as pdindex=pd.date_range('20190116','20190130')data=[4,8,6,5,9,1,4,5,2,4,6,7,9,13,6]ser_data=pd.Series(data,index=index)

 

python时间序列分析之_用pandas中的rolling函数计算时间窗口数据(讲的透彻,NBplus)_第1张图片

如上图所示,当窗口开始滑动时,第一个时间点和第二个时间点的时间为空,这是因为这里窗口长度为3,他们前面的数都不够3,所以到2019-01-18时,他的数据就是2019-01-16到2019-01-18三天的均值。那么有人就会这样想,在计算2019-01-16序列的窗口数据时,虽然不够窗口长度3,但是至少有当天的数据,那么能否就用当天的数据代表窗口数据呢?答案是肯定的,这里我们可以通过min_periods参数控制,表示窗口最少包含的观测值,小于这个值的窗口长度显示为空,等于和大于时有值,如下所示:

#表示窗口最少包含的观测值为1ser_data.rolling(3,min_periods=1).mean()

python时间序列分析之_用pandas中的rolling函数计算时间窗口数据(讲的透彻,NBplus)_第2张图片

index=pd.date_range('20190116','20190216')np.random.seed(2)data=np.random.randint(20,size=len(index))ser_data=pd.Series(data,index=index)plt.figure(figsize=(15, 5))ser_data.plot(style='r--')ser_data.rolling(3).mean().plot(style='b')

python时间序列分析之_用pandas中的rolling函数计算时间窗口数据(讲的透彻,NBplus)_第3张图片红色是原始序列折线图,蓝色是窗口平均

 

 

你可能感兴趣的:(python,股市,期货,量化)