3. 数据探索:使用Pandas进行描述性统计,了解用电量的分布与趋势

拿到电费账单数据后,别急着建模。我个人的习惯是——先跟数据“聊聊天”。

什么叫聊天?就是看看它长什么样,有没有异常值,分布是否均匀。说白了,就是做描述性统计。这一步做扎实了,后面的分析才能站得住脚。

3.1 加载数据,先看一眼全貌

假设我们已经把数据整理成了CSV格式。用Pandas加载进来,这是基本功。

import pandas as pd
import numpy as np

# 加载数据
df = pd.read_csv('family_energy.csv', parse_dates=['date'])
df.head()

嗯,这里要注意:parse_dates参数一定要加。我见过太多人把日期读成字符串,后面处理时各种报错。

输出结果大概长这样:

date kwh_used peak_hours offpeak_hours cost
2024-01-01 12.5 4.2 8.3 8.75
2024-01-02 15.1 5.0 10.1 10.57
2024-01-03 10.8 3.1 7.7 7.56

看到数据了。接下来,用info()describe()快速摸清底细。

df.info()
df.describe()

核心输出解读:

  • count:看看有没有缺失值。如果某列count少于总行数,说明有坑。
  • mean:日均用电量。我一般会跟当地平均水平对比一下。
  • std:标准差。数值越大,说明用电波动越剧烈。
  • min / max:一眼看出有没有离谱的极端值。

3.2 用电量的集中趋势:均值和中位数

均值和中位数,这两个指标要一起看。为什么?

举个例子。我去年帮一个小区做能耗分析,发现某户的日均用电量均值是18度,但中位数只有12度。一查才知道,他家夏天开了一个月的泳池水泵,直接把均值拉高了。你想想看,如果只看均值,你会误以为这户人家天天用电很猛。

mean_kwh = df['kwh_used'].mean()
median_kwh = df['kwh_used'].median()
print(f"日均用电量均值: {mean_kwh:.2f} kWh")
print(f"日均用电量中位数: {median_kwh:.2f} kWh")

如果均值远大于中位数,说明数据右偏——存在一些“用电大户”在拉高整体水平。

3.3 离散程度:标准差与四分位数

光看平均值不够。你得知道数据“散不散”。

q1 = df['kwh_used'].quantile(0.25)
q3 = df['kwh_used'].quantile(0.75)
iqr = q3 - q1
print(f"第一四分位数: {q1:.2f}")
print(f"第三四分位数: {q3:.2f}")
print(f"四分位距: {iqr:.2f}")

我的经验:四分位距(IQR)比标准差更稳健。标准差容易受极端值影响,但IQR只看中间50%的数据。做家庭能源分析时,我优先用IQR来判断用电稳定性。

我曾经遇到一个案例:某户的IQR只有2.3度,说明用电习惯非常规律。而另一户的IQR高达8.7度,后来发现是因为家里有电动车,充电时间不固定。你看,光一个IQR就能帮你推测用户行为。

3.4 分布形态:偏度与峰度

偏度告诉你数据是左偏还是右偏。峰度告诉你数据是“尖”还是“平”。

skewness = df['kwh_used'].skew()
kurtosis = df['kwh_used'].kurtosis()
print(f"偏度: {skewness:.3f}")
print(f"峰度: {kurtosis:.3f}")
  • 偏度 > 0:右偏,多数日子用电较少,偶尔有高峰。
  • 偏度 < 0:左偏,多数日子用电较多,偶尔有低谷。
  • 峰度 > 3:数据集中在均值附近,尾部较厚(极端值多)。
  • 峰度 < 3:数据分布较平坦,波动均匀。

说白了,偏度和峰度就是帮你判断:你家用电是“平稳型”还是“爆发型”。

3.5 时间趋势:按周/月聚合

描述性统计不能只看整体,还要看趋势。我习惯按周聚合,看看用电量有没有周期性。

df['week'] = df['date'].dt.isocalendar().week
weekly = df.groupby('week')['kwh_used'].mean()
print(weekly.head())

输出结果:

week mean_kwh
1 13.2
2 12.8
3 14.5
4 11.9

嗯,这里要注意:第3周用电量明显偏高。我猜可能是春节前后,家里人多。这种模式,光看日均值是看不出来的。

3.6 知识体系结构图

下面这张图,帮你把本章的知识脉络理清楚:

描述性统计 集中趋势 均值 · 中位数 离散程度 标准差 · IQR 分布形态 偏度 · 峰度 时间趋势 按周/月聚合 异常检测 极端值 · 缺失值 核心目标:了解用电量的分布特征与变化规律 为后续的异常检测和预测建模打下基础

3.7 避坑指南

我曾经踩过的坑:

  • 直接用mean()算整体均值,忽略了节假日和季节因素。后来发现夏季均值比冬季高出40%。建议按季节分组计算。
  • 看到缺失值就直接dropna()。有一次删掉了20%的数据,结果分析结果完全失真。先看看缺失值是不是集中在某个时间段,再决定怎么处理。
  • 偏度和峰度只看数值,不看实际分布。我建议配合直方图一起看,更直观。

3.8 小结

描述性统计,说白了就是给数据“体检”。

通过均值、中位数、标准差、IQR、偏度、峰度这些指标,你能快速掌握用电量的整体面貌。再结合时间趋势分析,就能发现隐藏在数据背后的规律。

我个人觉得,这一步花的时间越多,后面建模就越省心。别急着跑模型,先把数据摸透。

实用建议:describe()的结果保存下来,作为后续分析的基准线。每次更新数据后,对比一下指标变化,能帮你快速发现异常。

专注资料整理