waterConsump.csv为用户的用水量数据,数据中有编号为1-200的200位用户,DATE表示时间,如2017/1/1表示2017年1月1日,NUM为用量单位。请完成以下工作: 1、将数据进行透视表操作,行为用户编号,列为日期、值为用户每日用水量。 2、对数据中的异常数据进行识别并处理。 3、统计每个用户用水数据的基本统计量,包括:最大值、最小值、均值、中位数、和、方差、偏度、峰度。 4、每个用户用水数据按日差分,并求取差分结果的基本统计量,统计量同3。 5、求取每个用户的20%分位数。
时间: 2024-02-05 18:03:27 浏览: 146
用户用电量数据data.rar
4星 · 用户满意度95%
1. 透视表操作:
```python
import pandas as pd
# 读取数据
data = pd.read_csv('waterConsump.csv')
# 透视表操作
pivot_table = pd.pivot_table(data, values='NUM', index='编号', columns='DATE')
```
2. 异常数据识别并处理:
一般来说,异常数据可以通过箱线图来进行识别。首先,计算每个用户每天用水量的均值和标准差,然后根据 3 倍标准差原则,识别出超过 3 倍标准差的数据点为异常值。最后,将异常值替换为均值。
```python
# 异常数据处理
for i in range(1, 201):
# 计算均值和标准差
mean = pivot_table.loc[i].mean()
std = pivot_table.loc[i].std()
# 识别异常数据
outliers = (pivot_table.loc[i] - mean).abs() > 3 * std
# 将异常数据替换为均值
pivot_table.loc[i, outliers] = mean
```
3. 统计每个用户用水数据的基本统计量:
```python
# 统计每个用户用水数据的基本统计量
basic_stats = pd.DataFrame({
'max': pivot_table.max(axis=1),
'min': pivot_table.min(axis=1),
'mean': pivot_table.mean(axis=1),
'median': pivot_table.median(axis=1),
'sum': pivot_table.sum(axis=1),
'var': pivot_table.var(axis=1),
'skew': pivot_table.skew(axis=1),
'kurtosis': pivot_table.kurtosis(axis=1)
})
```
4. 每个用户用水数据按日差分,并求取差分结果的基本统计量:
```python
# 每个用户用水数据按日差分
diff_table = pivot_table.diff(axis=1)
# 统计每个用户用水数据的基本统计量
diff_stats = pd.DataFrame({
'max': diff_table.max(axis=1),
'min': diff_table.min(axis=1),
'mean': diff_table.mean(axis=1),
'median': diff_table.median(axis=1),
'sum': diff_table.sum(axis=1),
'var': diff_table.var(axis=1),
'skew': diff_table.skew(axis=1),
'kurtosis': diff_table.kurtosis(axis=1)
})
```
5. 求取每个用户的20%分位数:
```python
# 求取每个用户的20%分位数
quantile_20 = pivot_table.quantile(0.2, axis=1)
```
阅读全文