前言:我用的是python3.6版本。这篇博客参考了以下两篇博文,根据自己的理解重新整合,稍作修改代码,希望能够帮到大家。如果在过程中发现错误或者有更好的方式实现,欢迎大家发表评论。
参考1: https://blog.csdn.net/u010414589/article/details/49622625
参考2: https://blog.csdn.net/hal_sakai/article/details/51965657
正文:
一、时间序列建模基本步骤
1、获取被观测系统时间序列数据;
2、对数据绘图,观测是否为平稳时间序列;对于非平稳时间序列要先进行d阶差分运算,化为平稳时间序列;
3、经过第二步处理,已经得到平稳时间序列。要对平稳时间序列分别求得其自相关系数ACF 和偏自相关系数PACF ,通过对自相关图和偏自相关图的分析,得到最佳的阶层 p 和阶数 q
4、由以上得到的d、q、p得到ARIMA模型。然后开始对得到的模型进行模型检验。
二、实战解析
基础库: pandas;numpy;scipy;matplotlib;statsmodels :
#-*- coding:utf-8 -*- from __future__ import print_function import pandas as pd import numpy as np from scipy import stats import matplotlib.pyplot as plt import statsmodels.api as sm from statsmodels.graphics.api import qqplot plt.rcParams['font.sans-serif']=['SimHei'] #用来画图时正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来画图时正常显示坐标轴负数 from statsmodels.graphics.tsaplots import plot_acf from statsmodels.graphics.tsaplots import plot_pacf
2.1获取数据
这里我们使用一个具有周期性的测试数据,进行分析。
dta=
[10930,10318,10595,10972,7706,6756,9092,10551,9722,10913,11151,8186,6422, 6337,11649,11652,10310,12043,7937,6476,9662,9570,9981,9331,9449,6773,6304,9355, 10477,10148,10395,11261,8713,7299,10424,10795,11069,11602,11427,9095,7707,10767, 12136,12812,12006,12528,10329,7818,11719,11683,12603,11495,13670,11337,10232, 13261,13230,15535,16837,19598,14823,11622,19391,18177,19994,14723,15694,13248, 9543,12872,13101,15053,12619,13749,10228,9725,14729,12518,14564,15085,14722, 11999,9390,13481,14795,15845,15271,14686,11054,10395]
dta=np.array(dta,dtype=np.float) #转换数据类型 dta=pd.Series(dta) #print(type(dta)) dta.index=pd.Index(sm.tsa.datetools.dates_from_range('2001','2090')) plt.plot(dta,label='原始数据') plt.legend()