这是数据分析最核心、最值钱的环节——探索性数据分析(EDA)。 它的本质不是写代码,而是搞懂数据、发现问题、找到规律、为建模/决策铺路。
我给你讲完整、可直接套用的工作流逻辑,从拿到数据到得出结论,一步步地讲透。
一、先搞懂:探索数据分析到底在做什么?
一句话总结: 从陌生数据 → 看清全貌 → 发现异常 → 找到规律 → 指导后续分析
它分 4 大目标:
- 数据长什么样?(结构、大小、字段含义)
- 数据脏不脏?(缺失、重复、异常、错误)
- 数据分布正常吗?(数值分布、比例、趋势)
- 字段之间有关系吗?(相关性、影响关系)
二、标准探索逻辑:6 步黄金流程
这是企业里通用标准流程,你照着做永远不会乱。
第 1 步:基础信息探索(看数据全貌)
目标:知道数据有多大、有哪些字段、是什么类型。
# 1. 查看前几行
df.head()
# 2. 数据维度(多少行多少列)
df.shape
# 3. 字段信息(类型、缺失值)
df.info()
# 4. 列名
df.columns.tolist()
你要回答:
- 多少样本?多少特征?
- 哪些是数字?哪些是文字?哪些是日期?
- 有没有明显缺失?
第 2 步:统计指标探索(看数据分布)
目标:用统计值理解数据的中心、离散程度。
# 数值型字段统计(均值、分位数、最大最小)
df.describe()
# 所有字段唯一值数量
df.nunique()
# 类别字段计数(如性别、城市)
df["category_col"].value_counts()
df["category_col"].value_counts(normalize=True) # 看占比
你要回答:
- 数据是否偏态?
- 有没有极端大/极端小的值?
- 类别分布是否均匀?
第 3 步:数据质量检查(清洗前必须做)
目标:找出脏数据,这是 80% 分析失败的根源。
# 1. 缺失值
df.isnull().sum()
df.isnull().mean() # 缺失比例(%)
# 2. 重复值
df.duplicated().sum()
# 3. 异常值(3σ原则)
df[(df["数值列"] > df["数值列"].mean() + 3*df["数值列"].std())]
你要记录:
- 哪些列缺失严重?
- 是否有重复行?
- 哪些字段存在异常值?
第 4 步:单变量可视化(看分布规律)
目标:用图表直观理解单个字段的规律。
常用图:
# 直方图 / 密度图(看数值分布)
df["age"].plot(kind="hist", bins=20)
df["age"].plot(kind="kde")
# 条形图(看类别分布)
df["city"].value_counts().plot(kind="bar")
# 箱线图(看异常值)
df["income"].plot(kind="box")
你能发现:
- 数据是否正态?
- 是否两极分化?
- 异常值在哪里?
- 哪个类别占比最高?
第 5 步:多变量关系探索(核心!找规律)
目标:看字段之间是否有关系,这是分析价值所在。
# 1. 相关性矩阵(数值字段)
df.corr()
# 热力图(最常用)
import seaborn as sns
sns.heatmap(df.corr(), annot=True)
# 2. 两个数值关系:散点图
sns.scatterplot(x="x", y="y", data=df)
# 3. 类别对数值的影响:箱线图
sns.boxplot(x="category", y="value", data=df)
# 4. 分组统计(超级常用)
df.groupby("类别字段")["数值字段"].agg(["mean", "sum", "count"])
你要找:
- 哪些字段正相关?负相关?
- 哪个类别表现更好?
- 什么因素影响目标变量?
第 6 步:时间维度探索(如果有时间)
目标:看趋势、周期性。
# 转日期格式
df["date"] = pd.to_datetime(df["date"])
# 按年月统计
df.groupby(df["date"].dt.to_period("M"))["sales"].sum().plot()
三、探索数据分析的核心思维逻辑(最重要)
不是为了画图而画图,每一步都要有目的。
1. 描述思维
数据是什么?长什么样?
2. 对比思维
- 不同类别差异?
- 不同时间差异?
- 高低用户差异?
3. 分布思维
- 集中在哪里?
- 极端值多不多?
4. 关联思维
A 变了,B 会不会变? 谁影响谁?
5. 质量思维
数据能不能信? 缺失?重复?错误?异常?
四、企业真实探索逻辑(一句话总结)
- 先看整体(多少行、多少列、字段含义)
- 再看质量(缺不缺、重不重、错不错)
- 再看分布(数据长啥样、有无极端值)
- 再看关系(谁影响谁、相关性)
- 最后总结(给出结论 + 清洗建议 + 分析方向)
探索做完,你应该能输出 3 句话:
- 数据质量如何?
- 数据有什么规律?
- 下一步该分析什么、清洗什么?
五、我给你一套万能 EDA 模板(直接复制用)
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams["font.sans-serif"] = ["SimHei"] # 解决中文显示
# ========== 1. 基础信息 ==========
df.head()
df.shape
df.info()
df.columns
# ========== 2. 统计描述 ==========
df.describe()
df.nunique()
# ========== 3. 数据质量 ==========
df.isnull().sum()
df.isnull().mean()
df.duplicated().sum()
# ========== 4. 单变量分析 ==========
df["列名"].hist()
df["类别列"].value_counts().plot.bar()
# ========== 5. 多变量分析 ==========
sns.heatmap(df.corr(), annot=True)
sns.scatterplot(x="x", y="y", data=df)
df.groupby("类别")["数值"].mean()
# ========== 6. 时间分析 ==========
df["date"] = pd.to_datetime(df["date"])
df.groupby(df.date.dt.to_period("M"))["sales"].sum().plot()
总结
探索数据分析(EDA)的核心逻辑就是: 先整体 → 再质量 → 再分布 → 再关系 → 最后结论
它是数据分析的灵魂,90% 的建模、报表、决策,都来自这一步。