查看全课大纲(第 63 / 101 节)
  1. 1.数据分析基本概念
  2. 2.学习数据分析的一般路线
  3. 3.数据分析的流程
  4. 4.数据类型
  5. 5.环境部署(1)
  6. 6.环境部署(2)
  7. 7.课程介绍
  8. 8.TXT文件操作
  9. 9.JSON文件操作
  10. 10.CSV文件操作
  11. 11.Excel文件操作
  12. 12.数据库及SQL常用语法
  13. 13.数据库基本操作
  14. 14.数据库多表连接
  15. 15.实战:欧洲职业足球数据库分析
  16. 16.爬虫简介
  17. 17.URL管理模块
  18. 18.网页下载模块
  19. 19.网页解析模块(1)
  20. 20.网页解析模块(2)
  21. 21.Scrapy简介
  22. 22.Scrapy使用步骤(1)
  23. 23.Scrapy使用步骤(2)
  24. 24.Scrapy使用步骤(3)
  25. 25.Scrapy使用步骤(4)
  26. 26.实战:获取国内城市空气质量指数数据
  27. 27.NumPy和SciPy介绍
  28. 28.多维数组
  29. 29.多维数组操作
  30. 30.NumPy的常用方法
  31. 31.向量化介绍
  32. 32.向量化及通用函数
  33. 33.实战:2016美国大选分析
  34. 34.数据结构-Series
  35. 35.数据结构-DataFrame
  36. 36.数据结构-Index
  37. 37.Series的索引操作
  38. 38.DataFrame的索引操作
  39. 39.索引操作总结
  40. 40.运算与对齐
  41. 41.函数应用操作(1) -- map
  42. 42.函数应用操作 (2) -- apply applymap
  43. 43.文件读写操作
  44. 44.排序操作
  45. 45.数据清洗--处理缺失数据
  46. 46.数据清洗--处理重复数据
  47. 47.数据清洗--替换数据
  48. 48.常用统计方法(1) -- describe quantile
  49. 49.常用统计方法(2) -- sum mean median count
  50. 50.常用统计方法(3) -- max min idxmax idxmin
  51. 51.常用统计方法(4) -- mad var std cumsum
  52. 52.实战:全球食品数据分析
  53. 53.层级索引
  54. 54.分组与聚合介绍
  55. 55.分组操作(1) -- GroupBy对象及常用聚合操作
  56. 56.分组操作(2) -- 自定义分组及聚合操作
  57. 57.透视表介绍
  58. 58.透视表操作
  59. 59.数据规整(1) -- 数据合并concat
  60. 60.数据规整(2) -- 数据连接merge
  61. 61.数据重构(3) -- 数据重构stack unstack
  62. 62.实战:互联网电影资料库分析
  63. 63.探索性数据分析EDA介绍
  64. 64.EDA的目的
  65. 65.EDA常用工具
  66. 66.Matplotlib绘图基本介绍
  67. 67.Matplotlib画布
  68. 68.散点图和柱状图的绘制
  69. 69.直方图的绘制
  70. 70.矩阵绘图
  71. 71.子图的使用
  72. 72.Matplotlib颜色、标记、线型
  73. 73.Matplotlib坐标刻度、标签、图例、标题
  74. 74.Seaborn介绍
  75. 75.数据集分布可视化(1) -- 单变量分布、双变量分布
  76. 76.数据集分布可视化(2) -- 变量关系可视化
  77. 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
  78. 78.交互式数据可视化工具Bokeh介绍
  79. 79.Bokeh绘制散点图、柱状图、盒子图、弦图
  80. 80.Bokeh绘制常用图形元素
  81. 81.3D绘图 -- mplot3d
  82. 82.3D曲线可视化
  83. 83.3D散点图可视化
  84. 84.3D柱状图可视化
  85. 85.Pandas绘图
  86. 86.实战:Lending Club借贷数据探索性分析及可视化
  87. 87.机器学习介绍及应用场景
  88. 88.机器学习建模介绍 (1) -- 分类
  89. 89.机器学习建模介绍 (2) -- 回归
  90. 90.机器学习建模介绍 (3) -- 聚类
  91. 91.机器学习分类
  92. 92.机器学习工具scikit-learn
  93. 93.使用scikit-learn的流程
  94. 94.数据集准备及划分
  95. 95.模型选择
  96. 96.数据预处理及特征工程
  97. 97.过拟合与欠拟合
  98. 98.模型调参介绍
  99. 99.模型调参方法
  100. 100.模型测试及评价
  101. 101.实战:通过移动设备行为数据预测性别和年龄

探索性数据分析EDA介绍

约 5 分钟

📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · Python数据分析实战

在前面的课程中,我们学习了如何使用NumPy和Pandas进行数据处理与分析,分析结果通常保存为数据文件以便归档。然而,当我们需要向客户或团队呈现分析结论时,直接展示一堆数字远不如直观的图表来得有效。从本章开始,我们将进入数据可视化的学习。可视化不仅是最终结果的呈现方式,更是我们探索和理解数据的重要工具。本节将首先介绍探索性数据分析(EDA)的基本概念、核心思想及其适用场景。

💡 核心导读

  • 什么是EDA:探索性数据分析(Exploratory Data Analysis)是一种通过可视化、计算特征等手段,在不预设假设的前提下探索数据结构和规律的分析方法。
  • EDA的核心特征:它不受数据模型和科研假设的限制,是一种“自由发挥”式的分析过程。
  • EDA的适用场景:适用于对数据信息缺乏足够经验,不确定该使用何种传统统计方法进行分析时。
  • EDA与验证性分析的区别:EDA旨在“发现”数据中的隐藏信息,而验证性分析则用于“验证”已有的猜想或假设。
  • EDA的工具与形式:主要通过作图、制表、计算变量间关系等可视化手段来实现。

什么是探索性数据分析(EDA)

探索性数据分析(Exploratory Data Analysis, EDA)这一概念由约翰·怀尔德·图基(John Wilder Tukey)在1977年首次系统性地论述。尽管年代较早,但其核心思想至今仍是数据分析领域的重要基石。

EDA的核心在于对数据进行概括性的描述,并且不受数据模型和科研假设的限制。这意味着,当我们使用EDA方法时,我们并非基于某个预先设定的理论或假设去分析数据,而是以一种开放、探索的心态,让数据自己“说话”。

具体而言,EDA是指对已有的数据,通过作图、制表、计算特征等手段,探索数据的结构和规律的一种数据分析方法。这里的“可视化”是广义的,包括将变量间的关系以图形呈现,以及通过统计计算揭示数据特征。

EDA的适用场景与核心思想

何时使用EDA?

EDA特别适用于以下场景:当我对数据中的信息没有足够的经验,也不知道该用哪一种传统的方法进行数据分析的时候。

这与另一种常见的数据分析范式——验证性数据分析(Confirmatory Data Analysis, CDA)——形成对比。在验证性分析中,我们通常已经有一个来自业务经验或先前研究的猜想或结论(例如,“客户认为A产品的销量与B地区的促销活动强相关”),数据分析的目的是利用统计方法去验证这个猜想是否成立。

而EDA则恰恰相反。它适用于客户或分析师自己也不知道数据里到底有什么信息或规律的情况。这时,我们需要像探险家一样,利用各种可视化工具和技术,去主动挖掘和发现数据中可能隐藏的模式、异常或关联。因此,EDA的过程往往更具创造性和灵活性。

EDA的“自由风格”

正因为EDA不以验证假设为前提,它的实施过程没有固定的、必须遵循的统计检验流程。有些地方形象地称EDA为 “Free style”。它不拘泥于任何特定的形式或步骤。虽然有一些常见的探索步骤(如查看数据分布、检查缺失值、绘制散点图矩阵等),但在每个步骤中,分析师可以根据自己的经验、直觉或临时的发现进行自由发挥和深入探究。

这种自由并非混乱,而是建立在扎实的数据操作和可视化技能之上,以数据为导向的探索过程。接下来,我们将通过简单的代码,初步感受如何用Python开启一次EDA。

初探EDA:从数据到可视化

虽然完整的EDA流程涉及多个步骤和复杂的图表,但其起点总是数据本身。让我们通过一个最小的示例,演示如何将一组数据快速可视化,从而获得最直观的第一印象。

我们将使用Python标准库和Matplotlib来创建一个简单的分布图。请注意,原课程使用了特定的数据集(如Lending Club借贷数据),因其年代较久,本节我们使用手动构造的中性模拟数据来演示同一套方法。

代码纪律提醒:以下每个代码块均完全自包含,可独立运行。我们使用Matplotlib的Agg后端以保证在无图形界面的环境中也能执行。

# 示例1:构造模拟数据并绘制简单的直方图进行分布探索
import matplotlib
matplotlib.use('Agg')  # 使用无界面后端,保证代码可运行
import matplotlib.pyplot as plt
import numpy as np

# 模拟生成一组用户年龄数据(中性数据,无业务含义)
np.random.seed(42)  # 固定随机种子,保证每次运行结果一致
user_ages = np.random.normal(loc=35, scale=10, size=200).astype(int)  # 均值为35,标准差为10的200个整数年龄
# 将年龄限制在合理范围内
user_ages = np.clip(user_ages, 18, 70)

# 绘制年龄分布直方图
plt.figure(figsize=(8, 5))
plt.hist(user_ages, bins=15, edgecolor='black', alpha=0.7, color='skyblue')
plt.title('模拟用户年龄分布探索 (EDA示例)')
plt.xlabel('年龄')
plt.ylabel('频数')
plt.grid(axis='y', alpha=0.3)
# 在实际讲义中,这里可以保存图片或直接显示。为保持代码块自包含,我们计算并打印一些统计量。
plt.close()  # 关闭图形,避免在非交互式环境中弹出

# 同时,计算并输出一些基本的描述性统计量,这也是EDA的一部分
print("数据概要:")
print(f"  数据量: {len(user_ages)}")
print(f"  平均值: {user_ages.mean():.2f}")
print(f"  标准差: {user_ages.std():.2f}")
print(f"  最小值: {user_ages.min()}")
print(f"  最大值: {user_ages.max()}")
数据概要:
  数据量: 200
  平均值: 34.17
  标准差: 9.07
  最小值: 18
  最大值: 62

通过以上简单的代码,我们完成了EDA中最基础的一步:

  1. 接触数据:我们构造(或加载)了一份数据。
  2. 初步计算:计算了数据的基本统计特征(均值、标准差等),对数据的集中和离散趋势有了量化认知。
  3. 可视化呈现:绘制了直方图。虽然在这个自包含的代码块中我们没有展示图形,但这段代码清晰地表明了如何将数据映射为图形元素(这里是矩形条)。直方图能让我们一眼看出年龄的分布是接近正态,还是有偏,是否存在异常区间。

这正是EDA精神的体现:不预设“年龄应该服从某种分布”的假设,而是先画图看看,让图形告诉我们答案。如果图中出现双峰,我们可能会去思考数据是否混合了两种用户群体;如果出现极端异常值,我们则需要检查数据采集过程。这些基于可视化的观察,将引导我们下一步的分析方向。

📝 动手练一练

  1. 概念辨析:请简述探索性数据分析(EDA)与验证性数据分析(CDA)的主要区别。在什么情况下你会优先选择使用EDA?
👉 点击查看参考答案

主要区别:

  • 目标不同:EDA的目标是发现数据中未知的模式、关系和异常,是一个“开环”的探索过程。CDA的目标是验证一个事先已经存在的假设或理论,是一个“闭环”的检验过程。
  • 前提不同:EDA不依赖于任何先验的模型或假设。CDA则强烈依赖于明确的科研或业务假设。
  • 灵活性不同:EDA过程更灵活、自由,可以根据初步发现随时调整分析方向。CDA过程通常有固定的统计检验流程。

优先使用EDA的情况:当你面对一份全新的、业务背景不熟悉的数据,或者没有任何明确的分析目标与假设时,应该优先使用EDA。它可以帮助你快速了解数据全貌,形成初步认知,并可能从中产生值得进一步验证的假设。

  1. 动手实践:将上面代码中生成user_ages的正态分布参数进行修改,例如将loc(均值)改为50,scale(标准差)改为5,重新运行代码。观察输出的统计摘要发生了什么变化?这如何体现了EDA中“让数据说话”的思想?
👉 点击查看参考答案
# 修改参数后的代码
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(42)
user_ages_new = np.random.normal(loc=50, scale=5, size=200).astype(int)
user_ages_new = np.clip(user_ages_new, 18, 70)

plt.figure(figsize=(8,5))
plt.hist(user_ages_new, bins=15, edgecolor='black', alpha=0.7, color='lightcoral')
plt.title('修改参数后的年龄分布探索')
plt.xlabel('年龄')
plt.ylabel('频数')
plt.grid(axis='y', alpha=0.3)
plt.close()

print("修改参数后的数据概要:")
print(f"  数据量: {len(user_ages_new)}")
print(f"  平均值: {user_ages_new.mean():.2f}")
print(f"  标准差: {user_ages_new.std():.2f}")
print(f"  最小值: {user_ages_new.min()}")
print(f"  最大值: {user_ages_new.max()}")
修改参数后的数据概要:
  数据量: 200
  平均值: 49.27
  标准差: 4.66
  最小值: 36
  最大值: 63

观察与思考:

  • 变化:数据的平均值从约34上升到了约49,标准差从约9.1下降到了约4.7。最小值从18变成了36,最大值从62变为63。这说明整个用户群体“变老”了,且年龄分布更集中。
  • 体现EDA思想:我们并没有预先断定“用户年龄均值应该是50”,而是通过修改数据生成机制(这模拟了拿到一份不同数据集的情况),然后通过计算和潜在的绘图,让新的数据自己展示出它的特征。如果这是一个真实业务数据集,那么“年龄更大、更集中”这个发现本身,就是EDA为我们“说”出的第一个重要信息,它将直接引导后续分析,例如调整产品设计或营销策略以适应这个年龄层的用户。这正是“让数据说话”的体现。

本章小结

本节我们开启了数据可视化篇章的学习,并重点介绍了探索性数据分析(EDA)这一基础而强大的理念。

  • EDA定义:EDA是一种在不预设假设的前提下,通过可视化、制表、计算特征等手段,探索数据内在结构和规律的分析方法。
  • EDA精髓:其核心在于“探索”与“发现”,形式自由,鼓励分析师根据数据本身的提示进行深入挖掘。
  • EDA价值:它既是理解陌生数据的“敲门砖”,也是产生新假设、新见解的“灵感源”,为后续更严谨的建模或验证性分析奠定基础。

📋 行动清单

学完本节,你可以立即尝试:

  • 在脑海中回顾一个你曾经分析过的数据项目,思考当时的第一步是更接近EDA(无假设探索)还是CDA(有假设验证)?
  • 使用Pandas的.describe()方法或Matplotlib的plt.hist()函数,对你手头或课程提供的一份小数据样本,进行一次最简单的EDA:看看它的基本统计量和分布形状。
  • 思考:如果一份数据的分布图呈现出两个明显的“峰”(双峰分布),它可能暗示着数据背后存在着哪两种可能性?(例如:混合了两种不同的用户群体,或数据采集过程存在两个阶段)。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 本节课件:探索性数据分析EDA介绍
    PDF · 358KB
    下载
  • 第7章配套代码包:可视化示例与数据集
    ZIP · 93.5MB
    下载
  • 全套课件打包(第1-5章)
    ZIP · 12.8MB
    下载
  • 全套课件打包(第6-8章)
    ZIP · 15MB
    下载
  • 实战数据集:AppleStore 应用商城分析
    ZIP · 329KB
    下载
  • 实战数据集:女性服装电商分析
    ZIP · 2.8MB
    下载
  • Python 数据分析环境搭建指南
    PDF · 2MB
    下载
  • Scrapy 安装教程
    PDF · 12.7MB
    下载
  • 附加实战项目:AppleStore 应用商城数据分析
    ZIP · 0.3MB · ipynb + CSV 数据
    下载
  • 附加实战项目:银行电话营销数据分析
    ZIP · 0.4MB · ipynb + CSV 数据
    下载
  • 附加实战项目:女性服装电商评论数据分析
    ZIP · 2.7MB · ipynb + CSV 数据
    下载
  • 附加实战项目:美国化学学会杂志数据分析
    ZIP · 34.2MB · ipynb + SQLite 数据库
    下载