9、求取每个用户六七八月用水量和,与二三四月用水量和的比值,最大值的比值,最小值的比值,均值(日均水量)的比值。 10、合并上述特征。 11、根据2015-2016年用水量数据,预测编号1-200的用户,2017年每个月用水量,并对预测值进行评价。
时间: 2024-02-25 11:59:28 浏览: 26
9. 求取每个用户六七八月用水量和,与二三四月用水量和的比值,最大值的比值,最小值的比值,均值(日均水量)的比值:
```python
# 求取每个用户六七八月用水量和
summer_sum = pivot_table.loc[:, '2017/6/1':'2017/8/31'].sum(axis=1)
# 求取每个用户二三四月用水量和
spring_sum = pivot_table.loc[:, '2017/2/1':'2017/4/30'].sum(axis=1)
# 六七八月用水量和与二三四月用水量和的比值
summer_spring_ratio = summer_sum / spring_sum
# 最大值的比值
max_ratio = pivot_table.max(axis=1) / diff_table.max(axis=1)
# 最小值的比值
min_ratio = pivot_table.min(axis=1) / diff_table.min(axis=1)
# 均值(日均水量)的比值
mean_ratio = pivot_table.mean(axis=1) / diff_table.mean(axis=1)
```
10. 合并上述特征:
```python
# 合并上述特征
features = pd.concat([summer_sum, spring_sum, summer_spring_ratio, max_ratio, min_ratio, mean_ratio], axis=1)
features.columns = ['summer_sum', 'spring_sum', 'summer_spring_ratio', 'max_ratio', 'min_ratio', 'mean_ratio']
```
11. 根据2015-2016年用水量数据,预测编号1-200的用户,2017年每个月用水量,并对预测值进行评价:
这里我们使用时间序列模型进行预测,具体来说,我们使用 ARIMA 模型。首先,需要对每个用户的用水量数据进行时间序列分析,确定 ARIMA 模型的参数。然后,使用确定好的参数,对每个用户在 2017 年的每个月的用水量进行预测。最后,使用均方根误差(RMSE)来评估预测效果。
```python
from statsmodels.tsa.arima.model import ARIMA
from sklearn.metrics import mean_squared_error
# 读取数据
data = pd.read_csv('waterConsump.csv')
# 将日期转换为时间序列数据
data['DATE'] = pd.to_datetime(data['DATE'])
# 将用户编号作为索引
data = data.set_index('编号')
# 将数据透视为时间序列数据
ts_table = pd.pivot_table(data, values='NUM', index='DATE', columns='编号')
# 对每个用户的用水量数据进行时间序列分析,确定 ARIMA 模型的参数
params = {}
for i in range(1, 201):
ts = ts_table[i]
model = ARIMA(ts, order=(1, 1, 1))
fit = model.fit()
params[i] = fit.params
# 对每个用户在 2017 年的每个月的用水量进行预测
pred_table = pd.DataFrame()
for i in range(1, 201):
# 取出该用户的 ARIMA 模型参数
p, d, q = params[i]
# 取出该用户在 2015 年和 2016 年的用水量数据
ts_train = ts_table.loc['2015':'2016', i]
# 构建 ARIMA 模型,并进行预测
model = ARIMA(ts_train, order=(p, d, q))
fit = model.fit()
pred = fit.forecast(steps=12)[0]
# 将预测结果保存到预测表中
pred_table[i] = pred
# 对预测值进行评价
actual_table = ts_table.loc['2017', :]
rmse = mean_squared_error(actual_table, pred_table, squared=False)
print('RMSE:', rmse)
```