标题:Python数据分析与可视化 使用学习过的理论知识(Numpy数值分析基础、Matplotlib数据可视化基础、Pandas统计分析基础),对data.csv用户用户用电量数据进行相关处理,其中数据中有编号为1-200的200位电力用户,DATA_DATE表示时间,如2015/1/1表示2015年1月1日,KWH为用电量。请完成以下工作: 1、将数据转置,转置后行为用户编号、列为日期、值为用户每日用电量; 2、对异常数据进行识别并处理; 3、统计每个用户用电数据的基本统计量,包括:最大值、最小值、均值、中位数、和、方差、偏度、峰度; 4、每个用户用电数据按日差分,求取差分结果的基本统计量,统计量同3; 5、求取每个用户的5%分位数; 6、每个用户按周求和并差分(一周7天,年度分开),并求取差分结果的基本统计量,统计量同三; 7、统计每个用户的日用电量在其最大值0.9倍以上的次数; 8、求取每个用户日为最大值/最小值的索引月份,若最大值/最小值存在于多个月份中,则输出含有最大值/最小值最多的那个月份。如1号用户的最小值为0,则看哪个月的0最多; 9、求取每个用户七八月电量和与三四月电量和的比值,最大值的比值,最小值的比值,均值(日均电量)的比值; 10、合并上述特征。
时间: 2023-11-22 16:55:12 浏览: 55
1. 转置数据
```python
import pandas as pd
df = pd.read_csv('data.csv')
df = df.pivot(index='ID', columns='DATA_DATE', values='KWH')
```
2. 处理异常数据
可以使用Tukey方法,将小于Q1-1.5IQR或大于Q3+1.5IQR的数据视为异常值,并用Q1或Q3代替。
```python
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1
outliers = (df < Q1 - 1.5*IQR) | (df > Q3 + 1.5*IQR)
df[outliers] = Q1[outliers] # 用Q1代替异常值
```
3. 统计基本统计量
```python
stats = df.describe()
```
4. 计算每日差分的基本统计量
```python
diff = df.diff(axis=1)
diff_stats = diff.describe()
```
5. 计算每个用户的5%分位数
```python
quantile_5 = df.quantile(0.05)
```
6. 计算每周差分的基本统计量
```python
week_sum = df.resample('W', axis=1).sum()
week_diff = week_sum.diff(axis=1)
week_diff_stats = week_diff.describe()
```
7. 统计每个用户的日用电量在其最大值0.9倍以上的次数
```python
count = (df > 0.9*stats.loc['max']) & (df != stats.loc['max'])
count.sum()
```
8. 求取每个用户日为最大值/最小值的索引月份
```python
max_month = df.apply(lambda x: x.idxmax().month)
min_month = df.apply(lambda x: x.idxmin().month)
```
9. 求取每个用户七八月电量和与三四月电量和的比值
```python
summer = df.loc[:, '2015-07-01':'2015-08-31'].sum(axis=1)
spring = df.loc[:, '2015-03-01':'2015-04-30'].sum(axis=1)
ratio = summer / spring
ratio_stats = ratio.describe()
```
10. 合并特征
```python
features = pd.concat([stats, diff_stats, quantile_5, week_diff_stats, count, max_month, min_month, ratio_stats], axis=1)
features.columns = ['max', 'min', 'mean', 'std', '25%', '50%', '75%', 'diff_max', 'diff_min', 'diff_mean', 'diff_std', 'diff_25%', 'diff_50%', 'diff_75%', 'quantile_5', 'week_diff_max', 'week_diff_min', 'week_diff_mean', 'week_diff_std', 'week_diff_25%', 'week_diff_50%', 'week_diff_75%', 'count', 'max_month', 'min_month', 'ratio_max', 'ratio_min', 'ratio_mean', 'ratio_std', 'ratio_25%', 'ratio_50%', 'ratio_75%']
```
阅读全文