时间序列分析:ACF、PACF及ARIMA模型拟合结果可视化
时间序列分析:ACF、PACF及ARIMA模型拟合结果可视化
本文将介绍如何使用Python对时间序列数据进行分析,并以图示的方式展示分析结果,包括ACF、PACF图,以及ARIMA模型拟合后图像与原图像的对比。
代码实现pythonimport pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom matplotlib.font_manager import FontPropertiesfrom statsmodels.tsa.stattools import adfullerfrom statsmodels.tsa.arima.model import ARIMAfrom statsmodels.graphics.tsaplots import plot_acf, plot_pacf
设置合适的字体font_path = 'C:/Windows/Fonts/simsun.ttc' # 修改为你系统中合适的字体路径font_prop = FontProperties(fname=font_path, size=12)
读取数据data = pd.read_excel('D:\M_hua\text.xlsx', index_col=0, header=None, skiprows=[0])data = data.astype(float)
平稳性检验def check_stationarity(series): result = adfuller(series) print('ADF检验结果:') print('ADF Statistic:', result[0]) print('p-value:', result[1]) print('Critical Values:') for key, value in result[4].items(): print(f'{key}: {value}')
查看原始数据的平稳性print('原始数据的平稳性检验结果:')check_stationarity(data.iloc[:, 0])
进行差分处理,直至平稳diff_count = 0while not adfuller(data.iloc[:, 0])[1] < 0.05: data = data.diff().dropna() diff_count += 1
重新设置时间索引为整数索引data.reset_index(drop=True, inplace=True)
查看差分后数据的平稳性print(f'经过{diff_count}阶差分后数据的平稳性检验结果:')check_stationarity(data.iloc[:, 0])
绘制ACF和PACF图fig, ax = plt.subplots(2, 1, figsize=(10, 8))plot_acf(data, ax=ax[0], lags=20)plot_pacf(data, ax=ax[1], lags=20)ax[0].set_xlabel('Lags', fontproperties=font_prop)ax[0].set_ylabel('ACF', fontproperties=font_prop)ax[0].set_title('自相关系数图', fontproperties=font_prop)ax[1].set_xlabel('Lags', fontproperties=font_prop)ax[1].set_ylabel('PACF', fontproperties=font_prop)ax[1].set_title('偏自相关系数图', fontproperties=font_prop)plt.tight_layout()plt.show()
构建ARIMA模型,并拟合数据model = ARIMA(data, order=(1, 0, 1))result = model.fit()
输出模型系数print('模型系数:')print(result.summary().tables[1])
获取差分序列拟合值fitted_values = result.fittedvalues
可视化拟合结果plt.figure(figsize=(10, 6))plt.plot(data.index, data.values, label='差分后数据')plt.plot(data.index, fitted_values.values, color='red', label='拟合结果')plt.legend(prop=font_prop)plt.xlabel('时间', fontproperties=font_prop)plt.ylabel('数据', fontproperties=font_prop)plt.title('ARIMA模型拟合结果', fontproperties=font_prop)plt.show()
代码解读
- 导入必要的库: 包括数据处理、统计模型、绘图等。2. 加载数据: 使用pandas读取数据,并进行预处理。3. 平稳性检验: 使用ADF检验判断时间序列的平稳性,并进行差分处理直至序列平稳。4. 绘制ACF和PACF图: 使用statsmodels库绘制自相关和偏自相关系数图,帮助确定ARIMA模型的阶数。5. 构建ARIMA模型: 根据ACF和PACF图确定模型阶数,并使用statsmodels库构建ARIMA模型。6. 模型拟合: 使用历史数据拟合ARIMA模型。7. 可视化: 绘制拟合结果与原始数据的对比图,直观地展示模型的拟合效果。
总结
本文介绍了如何使用Python进行时间序列分析,并以图示的方式展示了ACF、PACF图以及ARIMA模型拟合结果。这将帮助你更好地理解时间序列数据,并构建预测模型。
原文地址: https://www.cveoy.top/t/topic/bO7p 著作权归作者所有。请勿转载和采集!