ML-ARIMA

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#判定时序数据稳定性
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:/python/anaconda/ARIMA/airPassenger.csv',encoding='utf-8',index_col='time')
ts.index = pd.to_datetime(ts.index)

plt.plot(ts,color='red')   #时序图
plt.show()

dftest = adfuller(ts['num'],1,autolag='AIC')   #ADF检验
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)
'''
由于Test Statistic = -2.345,大于3个临界值(-3.48,-2.88,-2.58)
且p-value > 0.05
故:序列非平稳
'''
fig,ax = plt.subplots(2,1,figsize=(6,12))   #自相关图ACF和偏相关图PACF
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'])

猜你喜欢

转载自blog.csdn.net/qq_42394743/article/details/81415781
ML