Bootstrap

数据分析--时间序列的处理--滑动窗口 --降采样--升采样

 

前提必备知识:学会使用pandas 和numpy 产生时间序列数据--在pandas数据分析中有讲解

1,数据重采样:

1.1 降采样:

假设我收集了一年的数据,时间数据的频率是1天,一共365天的数据,那么我想按照月这个频率记,那么时间频率就变成了12个月了,频率变低了,叫做降采样。

1.2 升采样:

与降采样相反,时间频率变高了。

1.2 代码演示:

降采样

import pandas as pd
import numpy as np
# 创建一个时间序列:以天为周期90天的数据
rng = pd.date_range('1/1/2011', periods=90, freq='D')
ts = pd.Series(np.random.randn(len(rng)), index=rng)

# 降低频率
ts.resample('M').sum() # 将其以按照月为单位,
ts.resample('3D').sum()# 每隔3天合并
day3Ts = ts.resample('3D').mean() #可以以均值合并,也可以自己写一个apply函数自己定义算法


# 升采样
print(day3Ts.resample('D').asfreq()) # 原来3天一个间隔,现在将其分隔开,但是有问题,有缺失值。解决方法看下一段代码升采样插值方法:
'''
2011-01-01   -1.007135
2011-01-02         NaN
2011-01-03         NaN
2011-01-04    0.776943
2011-01-05         NaN
2011-01-06         NaN
...

'''

升采样插值方法:

  • ffill 空值取前面的值
  • bfill 空值取后面的值
  • interpolate 线性取值
day3Ts.resample('D').ffill(1) #缺失值的地方 取前一个不是缺失值的数据。ffill里面的1 效果如下
'''
2011-01-01    0.015214
2011-01-02         NaN
2011-01-03   -0.751735
2011-01-04   -0.751735
2011-01-05         NaN
2011-01-06    0.190381

ffill(2):
2011-01-01    0.015214
2011-01-02   -0.240435
2011-01-03   -0.496085
2011-01-04   -0.751735
2011-01-05   -0.437697
2011-01-06   -0.123658

'''
day3Ts.resample('D').bfill(1)

day3Ts.resample('D').interpolate('linear') # 这个是线性的感觉比较好,就是中间找出来两个点,使间距相等。

滑动窗口

这个比较容易理解

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

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

''' 定义滑动窗口'''
r = df.rolling(window = 10) # 窗口长度为10,可以计算这十个数的信息,比如最大值,均值等等
#r.max, r.median, r.std, r.skew, r.sum, r.var
print(r.mean()) #计算均值
'''
df.rolling(window=10).mean() 效果如下
2016-07-01         NaN
2016-07-02         NaN
2016-07-03         NaN
2016-07-04         NaN
2016-07-05         NaN
2016-07-06         NaN
2016-07-07         NaN
2016-07-08         NaN
2016-07-09         NaN
2016-07-10    0.365879
2016-07-11    0.154923
2016-07-12    0.085345
2016-07-13    0.117916
...

'''


# 画图,pandas的画图也不错啊!
import matplotlib.pyplot as plt
%matplotlib inline

plt.figure(figsize=(15, 5))

df.plot(style='r--')
df.rolling(window=10).mean().plot(style='b')

 

 

 

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;