python时间序列分析之_用pandas中的rolling函数计算时间窗口数据

 

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

滑动窗口示意图

pandas.DataFrame.rolling参数详解

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

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

rolling参数详解

用法代码演示

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

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)

数据预览

ser_data.rolling(3).mean()

window=3

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

min_periods=1

上面讲解了两个常用的参数,下面我们通过绘图来观察原始序列与滑动窗口产生的序列值的关系图,如下:

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

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

猜你喜欢

转载自blog.csdn.net/smartab/article/details/89242504
今日推荐