Python时间序列分析:使用ARIMA模型进行数据平稳性检验与预测
Python时间序列分析:使用ARIMA模型进行数据平稳性检验与预测
本文将介绍如何使用Python进行时间序列分析,主要内容包括:
- 使用ADF检验进行数据平稳性检验2. 进行差分处理直至数据平稳3. 构建ARIMA模型并拟合数据4. 可视化拟合结果并输出模型系数
以下是完整的代码示例:pythonimport pandas as pdimport matplotlib.pyplot as pltfrom matplotlib.font_manager import FontPropertiesfrom statsmodels.tsa.stattools import adfullerfrom statsmodels.tsa.arima.model import ARIMA
设置合适的字体font_path = 'C:/Windows/Fonts/simsun.ttc' # 修改为你系统中合适的字体路径font_prop = FontProperties(fname=font_path)
读取数据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
查看差分后数据的平稳性print(f'经过{diff_count}阶差分后数据的平稳性检验结果:')check_stationarity(data.iloc[:, 0])
构建ARIMA模型,并拟合数据model = ARIMA(data, order=(1, 0, 1))result = model.fit()
输出模型系数print('模型系数:')print(result.summary().tables[1])
获取差分序列拟合值fitted_values = result.fittedvalues
可视化拟合结果plt.figure(figsize=(12, 6)) # 设置图像大小plt.plot(data.index, data.values, label='差分后数据')plt.plot(fitted_values.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()
代码说明:
- 导入必要的库: 包括pandas用于数据处理,matplotlib用于绘图,statsmodels用于时间序列分析。2. 设置字体: 确保中文能够正确显示。3. 读取数据: 使用pandas读取Excel文件。4. 定义平稳性检验函数: 使用ADF检验判断时间序列的平稳性。5. 对原始数据进行平稳性检验: 并打印检验结果。6. 对数据进行差分处理: 直至数据满足平稳性要求。7. 构建ARIMA模型并拟合数据: 使用差分后的数据训练模型。8. 输出模型系数: 用于解释模型。9. 获取拟合值: 用于后续的可视化。10. 可视化拟合结果: 绘制原始数据和拟合曲线,并添加标题、标签等信息。
注意:
- 请将代码中的字体路径和数据文件路径替换为你自己的路径。 * 可以根据实际情况调整ARIMA模型的参数,以获得更好的拟合效果。
希望这篇文章能够帮助你理解如何使用Python进行时间序列分析
原文地址: http://www.cveoy.top/t/topic/bJ25 著作权归作者所有。请勿转载和采集!