waterConsump.csv 为用户的用水量数据,数据中有编 号为1-200 的200 位用户,DATE 表示时间,如2017/1/1表示2017 年1 月1 日,NUM 为用量单位。请完成以下工作 : 1 、将数据进行透视表操作,行为用户编号,列为日期、 值为用户每日用水量。 2 、对数据中的异常数据进行识别并处理。 3 、统计每个用户用水数据的基本统计量,包括:最大 值、最小值、均值、中位数、和、方差、偏度、峰度。 4 、每个用户用水数据按日差分,并求取差分结果的基 本统计量,统计量同3。 5 、求取每个用户的20% 分位数。 6 、每个用户按季度求和并差分(按照日历的一周,年 度分开),并求取差分结果的基本统计量,统计量同3。 7 、统计每个用户的日用水量在其最大值0.8 倍以上的次 数。 8 、求取每个用户日为最大值/ 最小值的索引月份,若最 大值/ 最小值存在于多个月份中,则输出含有最大值/最 最 小值最多的那个月份。如1 号用户的在最小值为0 ,12个 月每个月都有0 ,则看哪个月的0 最多。 9、 求取每个用户六七八月用水量和,与二三四月用水 量和的比值,最大值的比值,最小值的比值,均值(日均水量)的比值。 10 、合并上述特征。 11 、根据2015-2016 年用水量数据,预测编号1-200 的用 户, ,2017 年每个月用水量,并对预测值进行评价
时间: 2024-03-03 08:51:48 浏览: 118
1. 透视表操作:
使用 pandas 库,读取 waterConsump.csv 文件,转换为 DataFrame。然后使用 pivot_table() 方法进行透视表操作,代码如下:
```
import pandas as pd
# 读取数据
df = pd.read_csv('waterConsump.csv')
# 透视表操作
pivot_table = pd.pivot_table(df, values='NUM', index=['编号'], columns=['DATE'])
```
2. 异常数据处理:
可以通过数据可视化方法,如绘制箱线图、直方图等手段,来识别异常数据。然后可以删除异常数据,或者使用插值等方法填充异常值。
3. 基本统计量:
使用 pandas 库,DataFrame 提供了一系列描述性统计方法,如 max()、min()、mean()、median()、sum()、var()、skew()、kurt()。代码如下:
```
# 统计每个用户用水数据的基本统计量
basic_statistics = pd.DataFrame({
'max': pivot_table.max(),
'min': pivot_table.min(),
'mean': pivot_table.mean(),
'median': pivot_table.median(),
'sum': pivot_table.sum(),
'var': pivot_table.var(),
'skew': pivot_table.skew(),
'kurt': pivot_table.kurt()
})
```
4. 按日差分求基本统计量:
使用 diff() 方法可以求取差分结果,然后再使用类似 3. 的方法求取差分结果的基本统计量。
5. 求取每个用户的20% 分位数:
使用 quantile() 方法可以求取分位数,代码如下:
```
# 求取每个用户的20% 分位数
quantile_20 = pivot_table.quantile(q=0.2)
```
6. 按季度求和并差分求基本统计量:
可以使用 resample() 方法按季度进行求和,然后使用 diff() 方法进行差分,最后再使用类似 3. 的方法求取差分结果的基本统计量。
7. 统计每个用户的日用水量在其最大值0.8倍以上的次数:
使用 count() 方法统计次数,代码如下:
```
# 统计每个用户的日用水量在其最大值0.8倍以上的次数
count_over_0.8 = (pivot_table > 0.8 * pivot_table.max()).sum()
```
8. 求取每个用户日为最大值/最小值的索引月份:
使用 idxmax()、idxmin() 方法可以求取最大值/最小值所在的索引位置,即日期。然后统计每个月份出现的次数,输出最多的月份。
```
# 求取每个用户日为最大值的索引月份
max_month = pivot_table.idxmax().apply(lambda x: x.month).mode()
# 求取每个用户日为最小值的索引月份
min_month = pivot_table.idxmin().apply(lambda x: x.month).mode()
```
9. 求取每个用户六七八月用水量和,与二三四月用水量和的比值:
使用 loc() 方法选择指定月份的数据,然后使用 sum() 方法求和,最后计算比值。
```
# 求取每个用户六七八月用水量和
sum_6_7_8 = pivot_table.loc[:, ['2017-06', '2017-07', '2017-08']].sum(axis=1)
# 求取每个用户二三四月用水量和
sum_2_3_4 = pivot_table.loc[:, ['2017-02', '2017-03', '2017-04']].sum(axis=1)
# 求取比值
ratio = sum_6_7_8 / sum_2_3_4
max_ratio = ratio.max() # 最大值
min_ratio = ratio.min() # 最小值
mean_ratio = ratio.mean() # 均值
```
10. 合并特征:
将上述特征合并成一个 DataFrame,代码如下:
```
features = pd.concat([basic_statistics, quantile_20, count_over_0.8, max_month, min_month, ratio], axis=1)
features.columns = ['max', 'min', 'mean', 'median', 'sum', 'var', 'skew', 'kurt', 'quantile_20', 'count_over_0.8', 'max_month', 'min_month', 'ratio']
```
11. 预测用水量并评价:
使用历史数据训练模型,然后对未来的用水量进行预测。可以使用回归模型,如线性回归、决策树回归等。使用均方误差、平均绝对误差等指标对预测结果进行评价。
阅读全文