大数跨境
0
0

系列四:教女朋友学时间序列

系列四:教女朋友学时间序列 数据皮皮侠
2020-04-14
2
导读:微信公众号:数据皮皮侠如果你觉得该公众号对你有帮助,欢迎关注、推广和宣传内容目录:时间序列 Python实

微信公众号:数据皮皮侠
如果你觉得该公众号对你有帮助,欢迎关注、推广和宣传

内容目录:时间序列  Python实现

时间序列——Pandas滑动窗口:简介详细教程

时间序列——Pandas滑动窗口:简介

详细教程

····为了提升数据的准确性,将某个点的取值扩大到包含这个点的一段区间,用区间来进行判断,这个区间就是窗口。例如想使用2019年1月1日的一个数据,单取这个时间点的数据当然是可行的,但是太过绝对,有没有更好的办法呢?可以选取2018年12月16日到2019年1月15日,通过求均值来评估1月1日这个点的值,2018-12-16到2019-1-15就是一个窗口,窗口的长度window=30.
·····移动窗口就是窗口向一端滑行,默认是从右往左,每次滑行并不是区间整块的滑行,而是一个单位一个单位的滑行。例如窗口2018-12-16到2019-1-15,下一个窗口并不是2019-1-15到2019-2-15,而是2018-12-17到2019-1-16(假设数据的截取是以天为单位),整体向右移动一个单位,而不是一个窗口。这样统计的每个值始终都是30单位的均值。
····也就是我们在统计学中的移动平均法。

import matplotlib.pylab
import numpy as np
import pandas as pd

指定六百个数据的序列:

df = pd.Series(np.random.randn(600), index = pd.date_range('7/1/2019', freq = 'D', periods = 600))
df.head()

显示结果:

2019-07-01    0.072234
2019-07-02   -0.108435
2019-07-03    0.949843
2019-07-04   -0.204133
2019-07-05    0.065032
FreqDdtypefloat64

指定该序列一个单位长度为10的滑块:

r = df.rolling(window = 10)
r
Rolling [window=10,center=False,axis=0]

输出滑块内的平均值,窗口中的值从覆盖整个窗口的位置开始产生,在此之前即为NaN,举例如下:窗口大小为10,前9个都不足够为一个一个窗口的长度,因此都无法取值。

#r.maxr.medianr.stdr.skewr.sumr.var
print(r.mean())

显示结果:

2019-07-01         NaN
2019-07-02         NaN
2019-07-03         NaN
2019-07-04         NaN
2019-07-05         NaN
                ...   
2021-02-15    0.016631
2021-02-16    0.216708
2021-02-17    0.488198
2021-02-18    0.415350
2021-02-19    0.390343
Freq: D, Length: 600, dtype: float64

通过画图库来看原始序列与滑动窗口产生序列的关系图,原始数据用红色表示,移动平均后数据用蓝色点表示:

import matplotlib.pyplot as plt
%matplotlib inline
plt.figure(figsize=(155))
df.plot(style='r--')
df.rolling(window=10).mean().plot(style='b')


显示结果:

可以看到,原始值浮动差异较大,而移动平均后数值较为平稳。


【声明】内容源于网络
0
0
数据皮皮侠
社科数据综合服务中心,立志服务百千万社科学者
内容 2137
粉丝 0
数据皮皮侠 社科数据综合服务中心,立志服务百千万社科学者
总阅读615
粉丝0
内容2.1k