数据科学生命周期之分析阶段:用 Pandas 开展探索性数据分析(EDA)实战指南
2026/9/11 1:51:26 网站建设 项目流程

数据科学生命周期之分析阶段:用 Pandas 开展探索性数据分析(EDA)实战指南

【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners

在数据科学生命周期中,分析(Analyzing)阶段的核心任务是验证所采集的数据是否足以回答既定问题或解决特定业务难题,同时确认模型对这些问题的响应是否正确。本指南以 Data-Science-For-Beginners 课程第 15 课为骨架,以真实邮件词频数据集(data/emails.csv)为例,系统讲解探索性数据分析(Exploratory Data Analysis,EDA)的四大核心技术——描述性统计、随机抽样、条件查询与缺失值识别,并结合课程配套 Jupyter Notebook(4-Data-Science-Lifecycle/15-analyzing/notebook.ipynb)给出可直接运行的代码与真实输出。读完后,你将掌握用 Pandas 对任意数据集快速完成"画像—抽样—查询—质检"的能力,并为后续建模与可视化打好数据基础。

为什么分析阶段如此关键

回顾生命周期课程(4-Data-Science-Lifecycle/14-Introduction/README.md)可知,数据科学是一个由采集(Capturing)、处理(Processing)、分析(Analysis)、沟通(Communication)、维护(Maintenance)五个阶段组成的迭代过程。采集阶段负责获取数据并定义待解决的问题,但一个悬而未决的问题是:这些数据真的能支撑最终结果吗?

为此,数据科学家在拿到数据后通常会追问三个问题:

  • 我有足够的数据来解决这个问题吗?
  • 这些数据对该问题的质量是否可接受?
  • 如果通过数据发现了额外信息,是否应该考虑调整或重新定义目标?

探索性数据分析正是回答这些问题、并识别数据集处理挑战的过程。它不急于建模,而是先用轻量级手段"认识"数据——这正是本课的核心价值所在。

数据画像与描述性统计:先用 describe() 摸清底细

如何评估数据量是否足够?数据画像(Data Profiling)通过描述性统计技术对数据集进行汇总归纳:画像帮助我们理解"有什么可用",描述性统计则帮助我们理解"有多少可用"。

Pandas 中最常用的入口是describe()函数,它对数值型数据一次性输出:

统计量含义
count非空样本数量(判断数据量是否充足)
min / max最小 / 最大值(判断取值范围)
mean均值(判断整体水平)
std标准差(判断离散程度)
25% / 50% / 75%四分位数(判断分布形态与偏态)

课程配套 Notebook(4-Data-Science-Lifecycle/15-analyzing/notebook.ipynb)首先加载邮件词频数据集,然后直接调用describe()

import pandas as pd # 加载数据集(407 行:1 行表头 + 406 封邮件,17 列特征词) path = '../../data/emails.csv' email_df = pd.read_csv(path) # 对邮件数据集使用 describe() print(email_df.describe())

真实输出(节选):

the to ect and for of count 406.000000 406.000000 406.000000 406.000000 406.000000 406.000000 mean 7.022167 6.519704 4.948276 3.059113 3.502463 2.662562 std 10.945522 9.801907 9.293820 6.267806 4.901372 5.443939 min 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 25% 1.000000 1.000000 1.000000 0.000000 1.000000 0.000000 50% 3.000000 3.000000 2.000000 1.000000 2.000000 1.000000 75% 9.000000 7.750000 4.000000 3.000000 4.750000 3.000000 max 99.000000 88.000000 79.000000 69.000000 39.000000 57.000000

从输出中可以立即读出几条关键信息:每列 count 均为 406(无缺失、样本量确定);theai等高频词标准差远大于均值,说明词频分布右偏明显(如a的 max 达 843,而中位数仅 29),暗示数据中存在少数极端长邮件。这类洞察正是判断"数据够不够、质量行不行"的第一手依据。

抽样与查询:sample() 随机看、query() 精准问

随机抽样:用小样本获得整体感知

在大数据集上逐行查看所有内容非常耗时,通常交给计算机完成。抽样(Sampling)是理解数据的得力工具:它让我们对"数据集里有什么、代表什么"建立直观认知,并可用概率与统计手段对整体做出一般性结论。抽样量没有硬性规定,但抽样越多,对数据的概括就越精确

Pandas 的sample()函数可指定随机抽取的样本数量,Notebook 中抽取 10 封邮件:

# 随机抽样 10 封邮件 print(email_df.sample(10))

输出展示了每封邮件的 16 个特征词计数与Email No.标识列,例如索引 320 的邮件Email 321a出现 187 次、i出现 171 次,明显高于其他样本,这为后续发现"极端值"提供了线索。注意sample()默认不放回抽样,可通过random_state参数固定随机种子以复现结果。

条件查询:带着问题精准聚焦

与抽样不同,查询(Querying)让你对数据保有控制权,能聚焦于你关心的特定数据子集。Pandas 的query()函数允许通过布尔表达式筛选行,从而得到关于数据的简单答案。Notebook 中演示了找出"to出现次数多于the"的邮件:

# 返回满足 "to" 出现次数多于 "the" 的所有行 print(email_df.query('the < to'))

真实输出显示该条件命中了 169 行([169 rows x 17 columns]),例如Email 2(the=8, to=13)、Email 4(the=0, to=5)等。这里 17 列 = 16 个特征词 + 1 个Email No.标识列,与数据集结构完全对应(见 data/emails.csv 表头Email No.,the,to,ect,and,for,of,a,you,in,on,is,this,i,be,that,will)。

值得留意的是,query()支持引用外部变量(如@threshold)、组合多条件(&|)以及数值比较,是把"业务问题"翻译成"数据筛选"的高效手段。

用可视化辅助探索

不必等到数据被彻底清洗和分析完毕才开始作图。事实上,在探索阶段就引入可视化,有助于提前识别数据中的模式、关系与问题;同时,可视化也是与非数据处理人员沟通的桥梁,可以澄清采集阶段尚未覆盖的疑问。课程为此专门开设了完整的可视化章节(3-Data-Visualization),涵盖数量、分布、占比、关系等不同视角的探索技巧,建议在 EDA 流程中结合使用直方图、箱线图与散点图来验证describe()中观察到的分布特征。

识别不一致与缺失值:isna() / isnull()

本课介绍的所有技术都有助于发现缺失或不一致的值,而 Pandas 还提供了专门函数进行核验:isna()isnull()可用于检查缺失值(两者等价,isnullisna的别名)。探索这些缺失值的关键不只是"找出它们",而是理解它们最初为何缺失——只有弄清缺失机制,才能决定采取何种处理动作。关于缺失值的后续治理(重载数据、插补填充或删除对应记录等),课程在数据准备章节给出了完整方法(2-Working-With-Data/08-data-preparation/notebook.ipynb),其中特别强调:缺失数据会带来不准确、偏弱或有偏的结果,处理方式应依据缺失的成因来选择。

实战任务:用 EDA 回答"纽约出租车小费是否存在季节性"

课程为分析阶段设计了延续性实战任务(4-Data-Science-Lifecycle/15-analyzing/assignment.md),承接上一课的数据评估作业(4-Data-Science-Lifecycle/14-Introduction/assignment.md),客户的问题是:

纽约市黄色出租车乘客在冬季还是夏季给司机的小费更多?

你的团队正处于生命周期中的分析阶段,需要基于一份包含 2019 年 1 月与 7 月各 100 笔、共 200 笔出租车交易的样本(data/taxi.csv)做真正的 EDA。配套 Notebook(4-Data-Science-Lifecycle/15-analyzing/assignment.ipynb)已给出加载代码,数据为 200 行 × 18 列,字段包括tpep_pickup_datetime(上车时间,可用于判断季节)、trip_distance(行程距离)、fare_amount(车费)、tip_amount(小费)、payment_type(支付方式)等。

请综合运用本课技巧(在 Notebook 中可自行添加单元格)回答:

  • 数据中还有哪些因素可能影响小费金额?(可尝试describe()观察trip_distancepassenger_counttip_amount的关系,再用query()按季节或支付方式分组筛选)
  • 哪些列最可能不需要用于回答客户问题?(如store_and_fwd_flag等与计费无关的字段)
  • 基于现有数据,是否存在季节性小费行为的证据?(对比冬季 1 月与夏季 7 月的小费均值与分布)

这一任务的意义在于:把describe()sample()query()isna()四类工具串联成一条完整的 EDA 工作流,从"数据能不能答"推进到"数据初步给出了什么答案"。

小结

分析阶段是连接"数据采集"与"建模决策"的枢纽。通过本课你可以形成一套可复用的 EDA 最小闭环:先用describe()完成数据画像、判断体量与分布;再用sample()随机审视原始记录、建立直观认知;随后用query()把业务假设转译为数据筛选;最后用isna()/isnull()排查缺失并追溯成因。每一步都能在课程仓库的 Notebook 与数据集中找到可直接运行的范例(notebook.ipynb、emails.csv、taxi.csv),完成课后任务后,你便已走通数据科学生命周期中"用数据回答问题"的关键一环。

【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询