4、数据探索性分析(EDA):描述性统计、数据分布、相关性分析,为报告找“故事”
拿到一份数据,别急着建模。我见过太多人上来就跑模型,结果跑出来一堆垃圾。为什么?因为你不了解你的数据。
EDA 就是干这个的。它帮你回答三个问题:数据长什么样?数据里有什么规律?哪些变量之间有故事?
说白了,EDA 是给报告找“素材”的阶段。你后面写的所有结论、所有洞察,都从这里来。
4.1 描述性统计:先摸清数据的“家底”
描述性统计是最基础的一步。我习惯先看几个核心指标:均值、中位数、标准差、最小值、最大值、四分位数。
举个例子,你分析用户年龄。均值是 35 岁,但中位数是 28 岁。这说明什么?说明数据被少数高龄用户拉高了。嗯,这里要注意,均值对异常值很敏感。
核心指标速查表
| 指标 | 含义 | 什么时候用 |
|---|---|---|
| 均值 | 数据的算术平均 | 数据分布对称时 |
| 中位数 | 排序后中间位置的值 | 数据有偏或含异常值时 |
| 标准差 | 数据离散程度 | 衡量波动性 |
| 四分位距 | Q3 - Q1 | 识别异常值 |
我在项目中遇到过一件事。某次分析销售数据,均值 120 万,但中位数只有 45 万。一查,原来有个大客户贡献了 800 万。如果不看中位数,你会误以为所有客户都很有钱。报告写出来就闹笑话了。
我的习惯:每次拿到数据,先跑一个 df.describe()。花 30 秒扫一眼,心里就有数了。
4.2 数据分布:数据到底长什么样?
描述性统计告诉你数字,但分布告诉你形状。你想想看,同样是均值 50,可能是正态分布,也可能是双峰分布。背后的业务含义完全不同。
我常用的分布分析方法:
- 直方图:看整体形状,有没有偏态、双峰
- 箱线图:看异常值、四分位范围
- 密度图:平滑版本,适合对比多组数据
举个例子,分析用户活跃时长。直方图显示有两个峰:一个在 10 分钟,一个在 60 分钟。这说明什么?说明你的用户分两类:轻度用户和重度用户。这就是一个很好的报告切入点。
我曾经踩过的坑:只看直方图,没注意样本量。100 个样本和 10000 个样本的直方图,可信度完全不一样。小样本时别过度解读形状。
还有一个常见问题:数据是否符合正态分布?很多统计方法假设正态性。你可以用 Q-Q 图或 Shapiro-Wilk 检验来判断。但说实话,在真实项目中,完美正态的数据很少。别太纠结,只要不是严重偏态就行。
4.3 相关性分析:变量之间的“暧昧关系”
相关性分析是 EDA 的重头戏。它帮你找到变量之间的关联,为报告提供“故事线”。
我习惯用皮尔逊相关系数。范围在 -1 到 1 之间。绝对值越大,相关性越强。正负号表示方向。
相关系数解读指南
| 相关系数范围 | 相关强度 | 报告怎么写 |
|---|---|---|
| 0.8 - 1.0 | 极强 | 高度相关,需注意共线性 |
| 0.5 - 0.8 | 中等 | 有明显关联,值得深挖 |
| 0.3 - 0.5 | 较弱 | 有一定趋势,但别过度解读 |
| 0 - 0.3 | 极弱或无 | 基本没关系 |
但注意,相关性不等于因果。我见过有人把“冰淇淋销量”和“溺水人数”的相关性写成因果关系。你想想看,这合理吗?其实是夏天到了,两个都增加而已。
在报告中,我建议这样写:
- “数据显示,A 和 B 存在中等正相关(r=0.62)。”
- “进一步分析发现,当 A 增加时,B 也呈现上升趋势。”
- “但需注意,这并不代表 A 导致 B,可能存在其他影响因素。”
我的技巧:用热力图展示相关性矩阵。一眼就能看出哪些变量抱团,哪些是孤岛。报告里放一张热力图,比写十行文字都管用。
4.4 为报告找“故事”:从数据到洞察
EDA 的最终目的,是为报告找故事。你发现了异常值、找到了分布特征、看到了相关性——这些都是素材。但怎么把它们串成一个有说服力的故事?
我总结了一个三步法:
- 发现异常:数据里有什么“不对劲”的地方?比如某个指标突然飙升、某个群体表现异常。
- 追溯原因:为什么会出现这个异常?跟哪些变量有关?有没有业务逻辑支撑?
- 形成结论:这个发现对业务意味着什么?应该采取什么行动?
举个例子。某次分析用户流失数据,我发现流失用户的平均登录次数是 3 次,而留存用户是 15 次。这个差异很明显。进一步分析发现,流失用户中有 70% 在注册后 7 天内没有完成核心操作。故事就出来了:“注册后 7 天是关键窗口期,未完成核心操作的用户流失风险极高。”
你看,这就是一个完整的“故事”。有数据支撑,有业务含义,有行动建议。
我曾经犯过的错:找到一堆相关性,但没想清楚业务逻辑。报告写出来,老板问“所以呢?”我答不上来。记住,EDA 是为业务服务的,不是炫技。
4.5 EDA 知识体系总览
下面这张图,是我自己总结的 EDA 核心框架。每次做分析前,我都会过一遍。
这张图把 EDA 的核心内容串起来了。从左到右,从描述性统计到数据分布,再到相关性分析。每一步都有对应的工具和方法。最终输出的是数据洞察和报告素材。
我个人习惯,每次做 EDA 都按这个框架走一遍。不会漏掉关键步骤,也不会跑偏。
4.6 实战:用 Python 快速完成 EDA
理论说完了,来点实际的。下面是我常用的 EDA 代码模板。你直接复制就能用。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 1. 加载数据
df = pd.read_csv('your_data.csv')
# 2. 描述性统计
print("=== 描述性统计 ===")
print(df.describe())
print("\n=== 缺失值检查 ===")
print(df.isnull().sum())
# 3. 数据分布
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
df['age'].hist(ax=axes[0], bins=30, color='skyblue', edgecolor='black')
axes[0].set_title('Age Distribution')
df.boxplot(column='age', ax=axes[1])
axes[1].set_title('Age Boxplot')
plt.tight_layout()
plt.show()
# 4. 相关性分析
print("\n=== 相关性矩阵 ===")
corr = df.corr()
print(corr)
# 热力图
plt.figure(figsize=(10, 8))
sns.heatmap(corr, annot=True, cmap='coolwarm', fmt='.2f')
plt.title('Correlation Heatmap')
plt.show()
我的建议:把这段代码保存成 eda_template.py。每次新项目,先跑一遍。5 分钟就能对数据有个全面了解。
代码跑完后,你会得到三样东西:描述性统计表、分布图、相关性热力图。这三样东西,就是报告的核心素材。
嗯,到这里,EDA 的核心内容就讲完了。记住,EDA 不是一次性工作。你可能会反复做几次,每次发现新的东西。别急,慢慢来。数据会告诉你故事的。