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

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

滑动窗口示意图

滑窗个数3
  123456789101112131415
  5765914544679136
窗数=3              
  123456789101112131415
  5765914544679136
 窗数=3             
  123456789101112131415
  5765914544679136
  窗数=3            
  123456789101112131415
  5765914544679136
   窗数=3           
  123456789101112131415
  5765914544679136
    窗数=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而言,制定要计算滚动窗口的列。值为列名。
axisint、字符串。默认为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)

 

如上图所示,当窗口开始滑动时,第一个时间点和第二个时间点的时间为空,这是因为这里窗口长度为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()

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')

红色是原始序列折线图,蓝色是窗口平均

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值