需要源码和数据集请点赞关注收藏后评论区留言私信~~~
一、重采样、降采样、升采样
重采样是时间序列频率转换的过程,Pandas中的resample函数用于各种频率的转换工作,高频率聚合到低频率称为降采样,而低频率转换为高频率为升采样
1:重采样
resample方法的参数与说明见下表
将间隔为天的频率转换为间隔为月的频率
w = pd.date_range(start = '2018/6/1',periods = 100,freq = 'D') y = pd.Series(np.arange(100),index = w) print(y.head(8)) ps = y.resample('M').mean() print(ps)
2:降采样
在降采样中,需要考虑closed和label参数,分别表示哪边区间是闭合的,哪边是标记的
降采样示例如下
wdate = pd.date_range(start = '2019/5/1',periods = 10,freq = 'D') w = pd.Series(np.arange(10),index = wdate) print(w) w.resample('3D',closed = 'right',label = 'right').sum()
3:升采样
在升采样中主要是数据的插值,即对缺失值进行填充,填充方法与fillna相似。
升采样示例
ydata = [datetime(2019,6,1),datetime(2019,6,6)] y = pd.Series([1,6],index = ydata) print(y) y.resample('D').ffill()
二、时间序列的平稳性检验
在做时间序列分析时,经常要对时间序列进行平稳性检验。用Python来进行平稳性检验主要有时序图检验、自相关图检验以及构造统计量进行检验3种方法
1:时序图检验
时序图就是普通的时间序列图,即以时间为横轴,观察值为纵轴进行检验。利用时序图可以粗略观察序列的平稳性
首先打印数据 如下图
然后利用时序图检验稳定性
import pandas as pd import matplotlib.pyplot as plt # import matplotlib.dates as mdates # from statsmodels.graphics.tsaplots import plot_acf data = pd.read_excel('.\data\Bike_count.xls', index_col='Date', parse_dates=True) fig = plt.figure(figsize=(12,6), dpi=100) # ax = fig.add_subplot(111) from matplotlib.dates import DateFormatter plt.gca().xaxis.set_major_formatter(DateFormatter('%m-%d-%H')) # #自动旋转X轴的刻度,适应坐标轴 # plt.gcf().autofmt_xdate() # ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M')) plt.xticks(pd.date_range(data.index[0],data.index[-1],freq='3H'), rotation=45) plt.plot(data['Total'])
从时序图可以看出 数据走势没有明显的趋势或者周期,基本可以视为平稳序列,但还需要利用自相关图进一步验证
2:自相关图检验
平稳序列通常具有短期相关性,即随着延迟期数k的增加,平稳序列的自相关系数会很快地衰减向零,而非平稳序列的自相关系数的衰减速度会比较慢。画自相关图用到的是statsmodels中的plot_acf方法。自相关图中横轴表示延迟期数,纵轴表示自相关系数
from statsmodels.graphics.tsaplots import plot_acf plt.rcParams['font.family'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plot_acf(data.Total) #生成自相关图 plt.xlabel('延迟期数') plt.ylabel('自相关系数')
从自相关图可以看出,该序列的自相关图经过波动衰减为0,可以视作平稳序列
3:构造统计量检验
利用绘图判断序列的平稳性比较直观,但不够精确,ADF(Augmented Dickey-Fuller)法直接通过假设检验的方式来验证平稳性。ADF的原假设(H0)和备择假设(H1)如下
H0:具有单位根,属于非平稳序列;
H1:没有单位根,属于平稳序列
Python中可以使用statsmodels中的adfuller方法进行ADF检验,直接输入数据,即可返回7个数值。其中的第一个返回值adf就是ADF方法的检验结果,这个值理论上越负越能拒绝原假设;第二个返回值pvalue以常用的判断标准值0.05作为参考,若其值大于0.05,说明支持原假设,反之拒绝原假设,表明该序列是一个平稳序列
测试结果如下
from statsmodels.tsa.stattools import adfuller data_result = adfuller(data.Total) #生成adf检验结果 print('The ADF Statistic of data: %f' % data_result[0]) print('The p value of data: %f' % data_result[1])
创作不易 觉得有帮助请点赞关注收藏~~~