Python 数据分析:探索性数据分析(EDA)完整逻辑详解

7 阅读4分钟

这是数据分析最核心、最值钱的环节——探索性数据分析(EDA)。 它的本质不是写代码,而是搞懂数据、发现问题、找到规律、为建模/决策铺路

我给你讲完整、可直接套用的工作流逻辑,从拿到数据到得出结论,一步步地讲透。


一、先搞懂:探索数据分析到底在做什么?

一句话总结: 从陌生数据 → 看清全貌 → 发现异常 → 找到规律 → 指导后续分析

它分 4 大目标:

  1. 数据长什么样?(结构、大小、字段含义)
  2. 数据脏不脏?(缺失、重复、异常、错误)
  3. 数据分布正常吗?(数值分布、比例、趋势)
  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. 质量思维

数据能不能信? 缺失?重复?错误?异常?


四、企业真实探索逻辑(一句话总结)

  1. 先看整体(多少行、多少列、字段含义)
  2. 再看质量(缺不缺、重不重、错不错)
  3. 再看分布(数据长啥样、有无极端值)
  4. 再看关系(谁影响谁、相关性)
  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% 的建模、报表、决策,都来自这一步。