Python时间序列分析:使用ARIMA模型进行预测
Python时间序列分析:使用ARIMA模型进行预测
本文将介绍如何使用Python进行时间序列分析,并使用ARIMA模型进行预测。
1. 数据准备
首先,我们需要准备时间序列数据。这里我们使用一个示例数据集,该数据集包含某个时间段内的销售数据。
import pandas as pd
# 读取数据
data = pd.read_excel('D:\\M_hua\\text.xlsx')
print(data.columns)
# 将时间列作为时间索引
data.set_index('time', inplace=True)
2. 数据探索
在进行建模之前,我们需要先对数据进行探索性分析,以了解数据的基本特征,例如趋势、季节性等。
import matplotlib.pyplot as plt
# 绘制原始数据图
plt.plot(data.index, data.values, label='原始数据')
plt.legend()
plt.xlabel('时间')
plt.ylabel('数据')
plt.title('原始数据')
plt.show()
3. 平稳性检验
ARIMA模型要求时间序列数据是平稳的,因此我们需要对数据进行平稳性检验。
from statsmodels.tsa.stattools import adfuller
# 查看原始数据的平稳性
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])
4. 差分处理
如果数据不平稳,我们需要对其进行差分处理,直到数据变得平稳为止。
# 进行差分处理,直至平稳
diff_count = 0
while not adfuller(data.iloc[:, 0])[1] < 0.05:
diff_count += 1
diff_data = data.diff().dropna()
# 绘制差分后数据图
plt.figure()
plt.plot(diff_data.index, diff_data.values, label=f'差分{diff_count}阶数据')
plt.legend()
plt.xlabel('时间')
plt.ylabel('数据')
plt.title(f'差分{diff_count}阶数据')
plt.savefig(f'差分{diff_count}阶数据.png')
plt.show()
# 更新数据
data = diff_data
5. 模型构建
一旦数据平稳,我们就可以构建ARIMA模型。
from statsmodels.tsa.arima.model import ARIMA
# 构建ARIMA模型,并拟合数据
model = ARIMA(data, order=(1, 0, 1))
result = model.fit()
# 输出模型系数
print('模型系数:')
print(result.summary().tables[1])
6. 模型评估
在使用模型进行预测之前,我们需要先评估模型的性能。
# 获取差分序列拟合值
fitted_values = result.fittedvalues
# 可视化拟合结果
plt.plot(np.arange(len(data)), data.values, label='差分后数据')
plt.plot(np.arange(len(data)), fitted_values.values, color='red', label='拟合结果')
plt.legend()
plt.xlabel('时间')
plt.ylabel('数据')
plt.title('ARIMA模型拟合结果')
plt.show()
7. 预测
最后,我们可以使用训练好的模型进行预测。
# 预测未来二十天的数据
forecast = result.get_forecast(steps=20)
forecast_mean = forecast.predicted_mean
forecast_conf_int = forecast.conf_int()
# 设置预测结果的日期索引
forecast_dates = pd.date_range(start=data.index[-1], periods=len(forecast_mean))
forecast_mean.index = forecast_dates
forecast_conf_int.index = forecast_dates
# 可视化预测结果
plt.plot(forecast_mean.index, forecast_mean.values, color='red', label='预测结果')
plt.fill_between(forecast_conf_int.index, forecast_conf_int.iloc[:, 0], forecast_conf_int.iloc[:, 1], color='gray', alpha=0.3)
plt.legend()
plt.xlabel('时间')
plt.ylabel('数据')
plt.title('ARIMA模型预测结果')
plt.show()
# 输出预测结果
forecast_df = pd.DataFrame({'预测结果': forecast_mean})
forecast_df.index.name = '日期'
forecast_df.to_csv('预测结果.csv', encoding='utf-8-sig')
print('预测结果已保存到文件'预测结果.csv'中。')
总结
本文介绍了如何使用Python进行时间序列分析,并使用ARIMA模型进行预测。时间序列分析是一个复杂的主题,本文仅介绍了基本概念和步骤。
原文地址: https://www.cveoy.top/t/topic/cgLQ 著作权归作者所有。请勿转载和采集!