趋势模型时间序列预测python
时间: 2023-06-25 18:03:58 浏览: 180
时间序列预测是时间序列分析中的一个重要应用,可以帮助我们预测未来一段时间内的数据趋势。在Python中,我们可以使用许多库来进行时间序列预测,其中最常用的是`pandas`和`statsmodels`。以下是一个简单的趋势模型时间序列预测的Python代码示例:
```python
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.tsa.arima_model import ARIMA
# 读取数据
data = pd.read_csv('data.csv', index_col='date', parse_dates=True)
# 绘制数据时序图
plt.plot(data)
plt.xlabel('Year')
plt.ylabel('Data')
plt.show()
# 进行ADF检验,判断数据是否平稳
result = adfuller(data['value'])
print('ADF Statistic: %f' % result[0])
print('p-value: %f' % result[1])
if result[1] > 0.05:
print('数据不平稳')
else:
print('数据平稳')
# 进行季节分解
decomposition = seasonal_decompose(data, model='additive', freq=12)
trend = decomposition.trend
seasonal = decomposition.seasonal
residual = decomposition.resid
# 绘制分解后的数据
plt.subplot(411)
plt.plot(data, label='Original')
plt.legend(loc='best')
plt.subplot(412)
plt.plot(trend, label='Trend')
plt.legend(loc='best')
plt.subplot(413)
plt.plot(seasonal, label='Seasonality')
plt.legend(loc='best')
plt.subplot(414)
plt.plot(residual, label='Residuals')
plt.legend(loc='best')
plt.tight_layout()
plt.show()
# 建立ARIMA模型并进行预测
model = ARIMA(data, order=(1, 1, 1))
model_fit = model.fit(disp=0)
predict = model_fit.predict(start='2019-01-01', end='2020-12-31', dynamic=True)
plt.plot(data)
plt.plot(predict, color='red')
plt.xlabel('Year')
plt.ylabel('Data')
plt.show()
```
在这个示例中,我们首先使用`pandas`库读取了一个时间序列数据,并绘制了它的时序图。然后,我们使用`statsmodels`库的`adfuller`函数对数据进行ADF检验,以判断数据是否平稳。接下来,我们使用`seasonal_decompose`函数对数据进行季节分解,并绘制了分解后的数据图。最后,我们使用`ARIMA`模型对数据进行了预测,并绘制了预测结果的图形。
阅读全文