waterConsump.csv为用户的用水量数据,数据中有编 号为1-200的200位用户,DATE表示时间,如2017/1/1表 示2017年1月1日,NUM为用量单位,根据2015-2016年用水量数据,预测编号1-200的用 户,2017年每个月用水量,并对预测值进行评价,帮我写代码
时间: 2024-03-23 07:36:27 浏览: 10
好的,以下是Python代码,用于对waterConsump.csv数据进行时间序列预测:
```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("waterConsump.csv", parse_dates=["DATE"], index_col="DATE")
# 按时间顺序排序
data = data.sort_index()
# 将数据集分成训练集和测试集
train_size = int(len(data) * 0.8)
train_data, test_data = data.iloc[:train_size], data.iloc[train_size:]
# 特征工程
train_data['YEAR'] = train_data.index.year
train_data['MONTH'] = train_data.index.month
train_data['DAY'] = train_data.index.day
test_data['YEAR'] = test_data.index.year
test_data['MONTH'] = test_data.index.month
test_data['DAY'] = test_data.index.day
# 模型训练
model = ARIMA(train_data['NUM'], order=(1, 1, 1))
model_fit = model.fit(disp=0)
# 模型预测
predictions = model_fit.predict(start='2017-01-01', end='2018-01-01')
# 模型评估
mse = mean_squared_error(test_data['NUM'], predictions)
rmse = np.sqrt(mse)
mae = np.mean(np.abs(predictions - test_data['NUM']))
print("MSE: ", mse)
print("RMSE: ", rmse)
print("MAE: ", mae)
# 可视化
plt.plot(data['NUM'], label='Actual')
plt.plot(predictions, label='Predicted')
plt.legend()
plt.show()
```
注意,以上代码中`order=(1,1,1)`表示使用ARIMA(1,1,1)模型,可以根据实际情况进行调整。另外,需要安装statsmodels库和sklearn库。