python实现ARIMA预测PM2.5
时间: 2023-10-25 21:10:53 浏览: 97
ARIMA(自回归积分滑动平均模型)是一种常用的时间序列分析和预测方法。在Python中,可以使用statsmodels包来实现ARIMA模型。
下面是使用ARIMA模型预测PM2.5的示例代码:
首先,导入相关的库和数据集:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima_model import ARIMA
from sklearn.metrics import mean_squared_error
# 读取数据集
data = pd.read_csv('PM2.5.csv', parse_dates=['date'], index_col='date')
```
接着,对数据进行预处理,包括缺失值处理、平稳性检验和差分等:
```python
# 缺失值处理
data = data.fillna(data.mean())
# 平稳性检验
diff1 = data.diff(1)
diff1 = diff1.dropna()
adf = sm.tsa.stattools.adfuller(diff1['PM2.5'])
print('ADF统计量: %f' % adf[0])
print('p-value: %f' % adf[1])
print('1阶差分后序列的白噪声检验结果为:', sm.stats.acorr_ljungbox(diff1, lags=1))
# 差分
diff2 = data.diff(2)
diff2 = diff2.dropna()
```
接下来,使用ARIMA模型进行拟合和预测:
```python
# 拟合模型
model = ARIMA(data, order=(1,1,1))
model_fit = model.fit(disp=0)
# 预测
forecast = model_fit.forecast(steps=12)[0]
```
最后,计算预测误差并可视化预测结果:
```python
# 计算预测误差
rmse = np.sqrt(mean_squared_error(data[-12:], forecast))
print('RMSE: %.3f' % rmse)
# 可视化预测结果
plt.plot(data[-24:])
plt.plot(forecast, color='red')
plt.xlabel('date')
plt.ylabel('PM2.5')
plt.legend(['actual', 'predicted'])
plt.show()
```
完整代码如下:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima_model import ARIMA
from sklearn.metrics import mean_squared_error
# 读取数据集
data = pd.read_csv('PM2.5.csv', parse_dates=['date'], index_col='date')
# 缺失值处理
data = data.fillna(data.mean())
# 平稳性检验
diff1 = data.diff(1)
diff1 = diff1.dropna()
adf = sm.tsa.stattools.adfuller(diff1['PM2.5'])
print('ADF统计量: %f' % adf[0])
print('p-value: %f' % adf[1])
print('1阶差分后序列的白噪声检验结果为:', sm.stats.acorr_ljungbox(diff1, lags=1))
# 差分
diff2 = data.diff(2)
diff2 = diff2.dropna()
# 拟合模型
model = ARIMA(data, order=(1,1,1))
model_fit = model.fit(disp=0)
# 预测
forecast = model_fit.forecast(steps=12)[0]
# 计算预测误差
rmse = np.sqrt(mean_squared_error(data[-12:], forecast))
print('RMSE: %.3f' % rmse)
# 可视化预测结果
plt.plot(data[-24:])
plt.plot(forecast, color='red')
plt.xlabel('date')
plt.ylabel('PM2.5')
plt.legend(['actual', 'predicted'])
plt.show()
```
其中,数据集可以从公开数据集网站或者相关的政府部门网站下载。在代码中,我们假设数据集已经被读取并且包含一个名为“PM2.5”的列,在这一列上进行预测。同时,我们使用ARIMA模型的(1,1,1)参数进行拟合和预测。最后,我们使用RMSE指标评估预测结果的精度,并可视化预测结果和真实值。