ARIMA時間序列分析

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#ADF單位根檢驗
from statsmodels.tsa.stattools import adfuller
#序列分解(季節+趨勢+殘差)
from statsmodels.tsa.seasonal import seasonal_decompose
#ACF/PACF
from statsmodels.tsa.stattools import acf, pacf
#繪製ACF,PACF圖
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
#建立ARIMA(p,d,q)
from statsmodels.tsa.arima_model import ARIMA

#讀取數據(將時間列設置爲索引)
ts = pd.read_csv('D:/passenger.csv',encoding='utf-8',index_col='time')
ts.index = pd.to_datetime(ts.index)
'''
輸入ts['1960'] --- 會輸出1960年的數據記錄(1月到12月)
輸入ts['1960-8'] --- 會輸出1960年8月份的數據記錄
'''

#繪製時序圖(含有上升趨勢,則序列非平穩)
plt.plot(ts,color='red')   
plt.show()

#ADF檢驗(P-value>0.05,則序列非平穩)
dftest = adfuller(ts['num'],1,autolag='AIC')   
dfoutput = pd.Series(dftest[0:4], index=['Test Statistic','p-value','#Lags Used','Number of Observations Used'])
for key,value in dftest[4].items():
    dfoutput['Critical Value (%s)'%key] = value
print(dfoutput)

#自相關圖ACF和偏相關圖PACF
fig,ax = plt.subplots(2,1,figsize=(6,12))   
plot_acf(ts,lags=20,ax=ax[0])
plot_pacf(ts,lags=20,ax=ax[1])

#序列分解
decomposition = seasonal_decompose(ts)   
trend = decomposition.trend
season = decomposition.seasonal
residual = decomposition.resid
fig,ax = plt.subplots(4,1,figsize=(10,16))
ax[0].plot(ts)
ax[0].legend(['origin'])
ax[1].plot(trend)
ax[1].legend(['trend'])
ax[2].plot(season)
ax[2].legend(['seasonal'])
ax[3].plot(residual)
ax[3].legend(['residuals'])

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

注:前期時序分析沒有問題,但是ARIMA建模時報錯,該問題尚未解決

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章