实战)
Data-Science-For-Beginners 第 15 课数据科学生命周期中的探索性数据分析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 课《The Data Science Lifecycle: Analyzing》为骨架结合仓库中真实的 notebook.ipynb 与邮件、出租车两份数据集系统讲解探索性数据分析Exploratory Data Analysis, EDA的四大核心技法数据剖面与描述性统计、抽样与查询、可视化探索、缺失值探查。读完本文你将掌握用 Python Pandas 对任意数据集完成认识数据—发现问题—为建模做准备的完整 EDA 工作流并能独立完成本课附带的纽约出租车小费季节性问题分析作业。一、为什么需要分析阶段EDA 的定位与三大核心问题在生命周期的捕获Capture阶段团队完成了数据获取并明确了待解决的业务问题但一个根本疑问尚未解答我们怎么知道这些数据真的能支撑最终的结果数据科学家在获得数据时通常需要向自己提出三个问题见 原文课程文档数据量是否足够我有足够的数据来解决这个问题吗数据质量是否合格这些数据对本问题而言质量可以接受吗目标是否需要调整如果通过这些数据发现了额外信息我们是否应该考虑改变或重新定义目标**探索性数据分析EDA**正是认识数据的过程它既能回答上述三个问题也能提前暴露与该数据集打交道时可能遇到的挑战。EDA 的产出不是最终模型而是对数据特征features与数据内部关系relationships的定义——这正是为后续建模阶段做准备的直接输入。本课使用一份来自 Kaggle 的垃圾邮件分类数据集data/emails.csv演示全部技法。该数据集统计了邮件中若干常见英文单词的出现次数邮件来源匿名共 406 条记录、17 列1 列邮件编号 16 列词频典型行如下Email No.,the,to,ect,and,for,of,a,you,in,on,is,this,i,be,that,will Email 1,0,0,1,0,0,0,2,0,0,0,1,0,2,0,0,0 Email 2,8,13,24,6,6,2,102,1,18,21,13,0,61,4,2,0二、数据剖面Data Profiling与描述性统计describe()数据剖面Data Profiling通过描述性统计技术汇总并收集关于数据集的整体信息。两者的分工是数据剖面帮助我们理解有什么可用数据集包含哪些列、什么类型、什么范围描述性统计帮助我们理解有多少可用每条特征的计数、均值、分布形态。Pandas 中最常用的入口是DataFrame.describe()它一次性输出数值列的计数count、最大值、最小值、均值mean、标准差std以及 25%/50%/75% 分位数。课程 notebook4-Data-Science-Lifecycle/15-analyzing/notebook.ipynb中对邮件数据实际运行的结果如下import pandas as pd # 加载邮件数据集 path ../../data/emails.csv email_df pd.read_csv(path) # 对全部数值列做描述性统计 print(email_df.describe())the to ect and for of count 406.000000 406.00000 406.00000 406.000000 406.000000 406.000000 mean 7.022167 6.51970 4.94828 3.059113 3.502463 2.662562 std 10.945522 9.80191 9.29382 6.267806 4.901372 5.443939 min 0.000000 0.00000 1.00000 0.000000 0.000000 0.000000 25% 1.000000 1.00000 1.00000 0.000000 1.000000 0.000000 50% 3.000000 3.00000 2.00000 1.000000 2.000000 1.000000 75% 9.000000 7.75000 4.00000 3.000000 4.750000 3.000000 max 99.000000 88.00000 79.00000 69.000000 39.000000 57.000000从这一输出可以快速读出关键信息count 全部为 406说明该数据集的数值列没有空值数据完整性良好均值与标准差差距悬殊如the列 mean≈7.0、std≈10.9配合 max 高达 99可初步判断多数词频呈右偏分布——少量垃圾邮件包含极高频词汇某些列如a、i的均值57.0、47.2远高于其他单词说明这些词是区分邮件内容的强特征候选。利用describe()这类描述性统计你可以量化地评估已经拥有多少数据、是否还需要更多——这是回答第一个 EDA 问题的直接手段。三、抽样Sampling与查询Querying3.1 抽样sample()快速理解全貌在大数据集上逐一探索每一行非常耗时这类任务通常交给计算机处理而抽样Sampling是帮助人类快速建立认知的实用工具。通过抽取样本你可以运用概率与统计知识对整体数据得出一般性结论。需要注意关于抽样多少没有硬性规定但样本量越大对总体的概括generalization就越精确抽样应与业务背景结合例如按月份、地区等维度分层抽样往往比纯随机抽样更具代表性。Pandas 提供DataFrame.sample()方法通过参数指定期望的随机样本条数。课程 notebook 中抽取 10 封邮件的实际输出# 随机抽样 10 封邮件 print(email_df.sample(10))Email No. the to ect and for of a you in on is this i 150 Email 151 0 1 2 0 3 0 15 0 0 5 0 0 7 380 Email 5147 0 3 2 0 0 0 7 0 1 1 0 0 3 19 Email 20 3 4 11 0 4 2 32 1 1 3 9 5 25 ... 320 Email 321 10 12 4 6 8 6 187 5 26 28 23 2 171 be that will 150 1 0 0 380 0 0 0 19 3 0 1 ... 320 5 1 1样本直观展示了数据的多样性既有Email 151这样词频普遍较低的邮件也有Email 321这样高频词大量集中a出现 187 次、i出现 171 次的极端样本——这为后续判断什么样的邮件更像垃圾邮件提供了直觉依据。3.2 查询query()精确聚焦与抽样看整体不同查询Querying让你对数据拥有控制权能精确聚焦到自己有疑问的特定部分。Pandas 的DataFrame.query()接受一段布尔表达式返回满足条件的行。课程 notebook 中的示例是找出to出现次数多于the的邮件# 返回 to 出现次数多于 the 的行 print(email_df.query(the to))[169 rows x 17 columns]该查询从 406 行中筛选出 169 行一条语句即完成了条件过滤。query()的典型使用技巧包括多条件组合email_df.query(the 5 and to 10)使用列名直接比较无需重复写df[列名]代码更简洁可读支持in、not in、、!、、、、|等运算符。在实践中建议把抽样快速直觉与查询定向验证假设组合使用先用sample()建立整体印象再针对具体假设用query()精确验证。四、探索阶段就该开始的可视化一个常见误区是等数据完全清洗、分析完毕后再画图。实际上在探索阶段就建立可视化能带来三重收益发现模式与关系散点图、直方图、箱线图能直观暴露变量间的相关性与分布形态暴露数据问题异常点、长尾分布、缺失值区域往往一眼可见跨角色沟通可视化是与不参与数据管理的业务方沟通的媒介也是澄清捕获阶段未覆盖问题的机会——例如向客户展示词频分布严重右偏比口头描述更有说服力。课程在探索阶段主动将读者引导至 3-Data-Visualization 章节那里系统覆盖了数量quantities、分布distributions、比例proportions、关系relationships四大类可视化包括直方图、箱线图、饼图、散点图等常用图表第 13 课还专门讨论了如何做出有意义、不误导的可视化。在 EDA 阶段推荐从以下三类图入手想探索的问题推荐图表对应课程单个特征的分布形态直方图、箱线图10-visualization-distributions特征之间的相关性散点图、散点矩阵12-visualization-relationships分类特征的占比饼图、堆积柱状图11-visualization-proportions五、探索不一致性缺失值探查isna()/isnull()以上所有技术剖面、抽样、查询、可视化都能帮助发现缺失值或不一致值而 Pandas 还专门提供了检查函数isna()与isnull()功能等价均返回一个与原 DataFrame 形状相同的布尔矩阵标记每个位置是否为缺失值配合sum()可按列统计缺失数量email_df.isnull().sum()配合any()可快速定位含缺失值的列。例如在邮件数据上运行email_df.isna().sum()会得到全 0 的结果与describe()中 count 全为 406 相互印证而对 data/taxi.csv 这类真实出租车记录做同样检查则可能发现tip_amount中存在大量 0对应payment_type为现金支付等场景。课程特别强调了一个重要观点探查缺失值的重点在于研究它们最初为何变成这样。缺失值往往不是随机出现的其背后可能隐藏着采集逻辑、业务规则或数据源问题——理解成因后才能正确决定处理方式删除、填充、标记等。关于缺失值处理的完整行动方案课程链接到了 2-Working-With-Data/08-data-preparation/notebook.ipynb那里系统讲解了数据准备阶段的清洗、去重、类型转换与缺失值处理策略。六、实战作业用 EDA 回答纽约出租车小费是否存在季节性本课作业assignment.md是前一课14-Introduction/assignment.md的延续。在前一课捕获阶段团队只对数据做了初步评估现在团队进入分析阶段要对数据做深度 EDA。6.1 业务问题与数据客户想知道的核心问题是纽约市的黄色出租车乘客冬天给司机的小费更多还是夏天更多团队获得了一个包含200 笔交易的数据集data/taxi.csv来自纽约市出租车与轿车委员会 TLC样本取自 2019 年 1 月与 7 月各 100 笔共 18 列。可从 assignment.ipynb 起步其中已包含!pip install pandas与pd.read_csv加载代码关键列包括列名含义tpep_pickup_datetime/tpep_dropoff_datetime上下车时间可用于提取月份/季节passenger_count乘客人数trip_distance行程距离英里payment_type支付方式1信用卡、2现金等fare_amount车费金额tip_amount小费金额tolls_amount过路费total_amount总金额含各项附加费congestion_surcharge拥堵附加费2019 年起部分区域征收更完整的字段说明可参考数据字典data dictionary与用户指南user guide文档。6.2 三个必答问题在 notebook 中可自行添加单元格运用本课所学技术完成 EDA并回答数据中还有哪些因素可能影响小费金额建议方向用describe()观察tip_amount、fare_amount、trip_distance的分布用query()对比payment_type不同取值下tip_amount的差异用sample()抽查极端小费记录还可按tpep_pickup_datetime提取小时、星期等维度考察时段对打赏行为的影响。哪些列很可能对回答客户问题没有帮助例如VendorID出租车供应商编号、store_and_fwd_flag存储转发标志、RatecodeID等与季节性打赏业务目标关联较弱的元数据列论证时应说明理由而不是简单罗列。基于目前提供的数据是否能看到季节性打赏行为的证据关键在于按月份分组对比例如用query()或布尔索引分离 1 月冬季与 7 月夏季的记录再分别统计tip_amount的均值/中位数同时注意区分小费金额与小费比例tip_amount / fare_amount后者更能反映打赏意愿本身。6.3 评分参考作业按以下标准评估Exemplary / Adequate / Needs Improvement 三级能否系统运用describe()、sample()、query()、isna()等本课技法三个问题是否都给出了有数据依据的结论是否对为什么如现金支付无小费记录、极端值来源给出了合理解释。七、小结EDA 是建模前不可跳过的体检回到课程主旨分析阶段Analyzing确认数据能够回答提出的问题EDA 则是这一确认过程的方法论载体。本课的四组工具形成了完整的 EDA 工作流步骤工具回答的问题数据剖面describe()数据有哪些特征规模多大质量如何抽样与查询sample()/query()数据长什么样特定假设能否被验证可视化matplotlib / seaborn详见 3-Data-Visualization存在哪些模式、关系与异常缺失值探查isna()/isnull()缺失值在哪为何缺失如何处理见 08 数据准备课程以随堂测验课前/课后 quiz与上述作业收尾。无论后续建模使用何种算法扎实的 EDA 都能显著降低用错误数据回答错误问题的风险——这正是数据分析师与数据科学家基本功的核心所在。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考