Data-Science-For-Beginners 数据科学生命周期第15课:用 Pandas 开展探索性数据分析(EDA)

发布时间:2026/9/12 15:54:28
Data-Science-For-Beginners 数据科学生命周期第15课:用 Pandas 开展探索性数据分析(EDA) Data-Science-For-Beginners 数据科学生命周期第15课用 Pandas 开展探索性数据分析EDA【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners本篇文章基于 Data-Science-For-Beginners 课程中数据科学生命周期分析Analyzing一课系统讲解探索性数据分析Exploratory Data Analysis简称 EDA的核心技术数据画像Data Profiling、描述性统计、采样Sampling、条件查询Querying、可视化探索与缺失值检查全部以 Python 与 Pandas 库为工具落地。读完本文你将能够在真实数据集上独立完成一次从数据够不够用到数据质量是否达标的完整 EDA 评估为后续建模与特征工程做好准备。生命周期分析阶段课程思维导图sketchnotes/15-Analyzing.png一、分析阶段在数据科学生命周期中的位置在数据科学生命周期中分析Analyzing阶段的核心使命是确认数据能够回答提出的问题、解决特定的业务问题。它同时还要验证模型是否正确地解决了这些提问。这一阶段的主要产出就是 EDA —— 一系列用于定义数据内部特征feature与关系relationship的技术其结果可以直接用来为建模做准备。在上一课 14-Introduction 中生命周期被划分为五个阶段捕获Capturing、处理Processing、分析Analysis、沟通Communication与维护Maintenance。捕获阶段完成数据获取、问题与目标定义而分析阶段承接捕获阶段的数据回答三个关键质疑我有足够的数据来解决这个问题吗这份数据对这个问题的质量是否可接受如果通过数据发现了额外的信息我们是否应该考虑改变或重新定义目标EDA 正是认识数据的过程它既能回答上述问题也能提前暴露处理该数据集时可能遇到的挑战。二、示例数据集垃圾邮件词频数据本课使用一份来自 Kaggle 的邮件垃圾邮件分类数据集email spam classification dataset演示 EDA 的全部流程。该数据集的原始内容是对邮件中若干常见单词出现次数的统计邮件来源保持匿名可用于训练垃圾邮件分类模型。这份数据以 CSV 文件形式存放在仓库中data/emails.csv。文件共 407 行1 行表头 406 封邮件的记录每一列对应一个英文常见单词如the、to、ect、and、for、of、a、you、in、on、is、this、i、be、that、will单元格数值表示该单词在该封邮件中出现的次数第一列Email No.是匿名邮件编号。可以打开 notebook.ipynb 跟随以下全部示例动手实践。三、数据画像Data Profiling与描述性统计数据画像Data Profiling通过描述性统计descriptive statistics的手段汇总并采集关于数据集的一般性总体信息它帮助我们理解有什么可用而描述性统计进一步帮助我们理解有多少可用。二者结合即可评估数据量是否足以支撑问题的求解。在之前的课程中我们已经多次使用 Pandas 的describe()函数来输出描述性统计量。对数值型列它会返回以下指标统计量含义count非空样本数可用来评估缺失情况mean均值std标准差min/max最小值 / 最大值25%/50%/75%四分位数Q1、中位数、Q3在邮件数据集上执行describe()代码与输出如下出自 notebook.ipynbimport pandas as pd # 加载数据集 path ../../data/emails.csv email_df pd.read_csv(path) # 对邮件数据集使用 describe print(email_df.describe())输出节选显示406 封邮件的每个词频列count均为 406说明该数据集在当前列上没有缺失值同时可以看到强烈的长尾分布——例如单词a的均值约为 57、中位数仅为 29、最大值高达 843而the的均值约 7、最大值 99。这种均值远大于中位数、极差巨大的特征暗示词频数据高度右偏是后续建模时需要重点处理的信号。使用describe()这类描述性统计可以帮你直接判断手头有多少数据、是否需要更多数据。四、采样Sampling快速认识大数据集在大数据集上逐条探索非常耗时通常这项工作应交给计算机完成。采样Sampling是理解数据、把握数据集中包含什么、代表什么的高效工具通过对样本应用概率与统计学方法可以对整体数据做出一般性结论。虽然没有硬性规定应该采样多少但需要注意采样的数据越多对整体做出的泛化generalization就越精确。Pandas 在库中提供了sample()函数只需传入希望获得的随机样本数量即可# 随机采样 10 封邮件 print(email_df.sample(10))输出为 10 行 × 17 列的随机子集。可以看到每次执行都会得到不同的随机行这正是采样与后续查询的关键区别采样是随机、无控制的用于快速获得对总体的统计直觉。五、条件查询Querying受控地聚焦特定数据与采样相对查询Querying允许你保持控制权把注意力聚焦在你关心问题的特定数据部分。Pandas 提供的query()函数可以按条件选取列与行通过返回的行给出关于数据的简洁答案。下面这个示例返回所有to的出现次数大于the出现次数的邮件# 返回所有 to 出现次数多于 the 的邮件行 print(email_df.query(the to))该查询命中了 169 行[169 rows x 17 columns]例如邮件 Email 2 中the8、to13即属于此类。query()接受类似 Python 的比较表达式作为字符串参数语法直观、可读性强非常适合在 EDA 阶段快速验证假设hypothesis。六、探索性可视化建模前的草图你不必等到数据被彻底清洗和分析完毕才开始画图。事实上在探索阶段就建立可视化往往能更快地暴露数据中的模式patterns、关系relationships与问题problems。此外可视化也是与不直接参与数据管理的人员沟通的有效媒介还可能引出捕获阶段未曾提出、需要进一步澄清的新问题。关于常用可视化探索方式数量、分布、占比、关系等可参考课程中的 3-Data-Visualization 章节其中包含 09 数量可视化、10 分布可视化、11 占比可视化、12 关系可视化与 13 有意义可视化五个子课题每个子课题都配有可运行的 notebook 与习题。七、识别不一致与缺失值本课讨论的所有技术都能帮助识别缺失值或不一致的值而 Pandas 还提供了专门函数来做检查isna()或isnull()可以逐元素检查缺失值返回布尔型 DataFrameTrue表示该位置缺失。由于二者功能完全等价按个人习惯任选其一即可。# 检查缺失值两种写法等价 print(email_df.isna().sum()) # 按列统计缺失个数 print(email_df.isnull().sum())在探索这些缺失值时一个重要的原则是先去探究这些值当初为什么会变成缺失是采集遗漏、编码错误还是业务上天然不存在这决定了你应该采取何种处理手段。关于缺失值的具体修复动作如dropna()、fillna()可以参考 2-Working-With-Data/08-data-preparation/notebook.ipynb 数据准备课程中的实操 notebook。八、实战任务在 NYC 出租车数据上完成 EDA本课配套作业 assignment.md 是上一课 14-Introduction/assignment.md 的延续。业务场景是纽约市黄色出租车乘客在冬天还是夏天给司机的小费更多你所在的团队处于生命周期的分析阶段负责对数据集做探索性数据分析。仓库提供了 assignment.ipynb 与 data/taxi.csv后者包含 2019 年 1 月与 7 月共 200 笔出租车交易记录199 行数据 表头18 列字段包括VendorID、tpep_pickup_datetime、tpep_dropoff_datetime、passenger_count、trip_distance、RatecodeID、PULocationID、DOLocationID、payment_type、fare_amount、extra、mta_tax、tip_amount、tolls_amount、improvement_surcharge、total_amount、congestion_surcharge等。notebook 中已给出加载数据的基础代码import pandas as pd path ../../data/taxi.csv # 将 CSV 加载为 DataFrame df pd.read_csv(path) # 打印 DataFrame print(df)加载后请运用本课学到的describe()、sample()、query()、isna()以及可视化等手段在 notebook 中自行开展 EDA可自由添加单元格并回答以下三个问题数据中还有哪些因素可能影响小费金额例如payment_type、trip_distance、passenger_count、时段、congestion_surcharge等字段与tip_amount的关系哪些列很可能不是回答客户问题所必需的例如与行程位置、费用拆分无关的字段基于目前提供的数据是否存在季节性小费行为的证据对比 1 月与 7 月记录的小费分布作业评分标准Rubric分为三个等级Exemplary出色、Adequate达标、Needs Improvement需改进要求运用本课技术完成上述 EDA 并给出有理有据的回答。九、小结分析阶段是数据科学生命周期中承上启下的关键一环。通过本课你应当掌握用describe()完成数据画像与描述性统计评估数据量与分布形态用sample()随机采样快速形成对总体的统计直觉用query()做受控的条件查询验证具体假设在数据清洗完成之前就借助可视化发现模式、关系与问题用isna()/isnull()定位缺失值并先弄清缺失成因再决定修复策略。以上全部代码与数据均可在此仓库中复现emails.csv、taxi.csv、notebook.ipynb 与 assignment.ipynb。掌握这些 EDA 技术后你就能自信地回答数据是否足以支撑结论这一分析阶段的核心问题。声明本课翻译文档由 AI 翻译服务生成虽力求准确但自动翻译可能包含错误或不准确之处原始语言文档应视为权威来源关键信息建议参考专业人工翻译。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考