Data-Science-For-Beginners 数据分析实战用 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 项目数据科学生命周期课程中第 15 课Analyzing分析阶段的实战作业围绕一个真实业务问题展开纽约市黄色出租车乘客在冬季还是夏季给司机的小费更多你将学会在 Pandas 中运用数据画像、描述性统计、抽样、查询、可视化与缺失值检查等 EDA 核心技术独立对一份 200 条真实出租车交易记录完成探索性分析并给出基于数据的结论。作业背景从采集到分析的生命周期推进这是上一课 数据评估作业Capturing 阶段的延续。在上一课中团队已经初步接触了数据集并评估了它能否回答客户的问题现在课程进入数据科学生命周期的Analyzing分析阶段团队需要对数据集执行探索性数据分析Exploratory Data AnalysisEDA。分析阶段的目标是确认数据能够回答所提出的问题或解决特定问题同时也可以验证模型是否正确地应对这些提问。EDA 是一套用于定义数据内部特征与关系的技术并能为后续建模准备数据。正如本课 README 所述当数据科学家获取数据时通常会追问三个问题我有足够的数据来解决这个问题吗这些数据对这个问题而言质量可接受吗如果通过数据发现了额外的信息我们是否应该考虑改变或重新定义目标EDA 正是回答这些问题的过程同时也能暴露出处理数据集时面临的挑战。待回答的客户问题客户希望团队调查纽约市出租车乘客的季节性消费习惯核心问题是纽约市黄色出租车乘客在冬季还是夏季给司机的小费更多团队已获得一份笔记本notebook和数据集其中包含2019 年 1 月与 7 月的 200 条出租车交易记录每个月份各 100 条。数据来源为 Taxi Limousine Commission纽约市出租车与轿车委员会 的开放数据集可通过官方数据字典与用户指南进一步了解字段含义。数据集结构从加载到字段语义在 作业笔记本 中数据通过 Pandas 从仓库根目录的 data/taxi.csv 加载import pandas as pd path ../../data/taxi.csv # 仓库根目录下 data 目录中的文件 # 将 csv 文件加载为 dataframe df pd.read_csv(path) # 打印 dataframe print(df)运行后得到200 rows x 18 columns的结构即 200 条记录、18 个字段。加载时可以先检查数据形状与字段类型print(df.shape) # (200, 18) print(df.dtypes)从仓库实际数据文件data/taxi.csv首行表头可以确认 18 个字段如下字段含义备注VendorID出租车供应商编号1 或 2分类变量tpep_pickup_datetime上车时间本作业按字符串读入用于区分 1 月/7 月tpep_dropoff_datetime下车时间可用于计算行程时长passenger_count乘客人数本数据集范围为 06trip_distance行程距离英里本数据集范围为 0.1622.0RatecodeID费率代码标准、机场等本数据集出现 1、2、5 三种值store_and_fwd_flag是否存储转发标志本数据集中全部为 N无区分度PULocationID/DOLocationID上车/下车位置 ID可用于区域分析payment_type付款方式1信用卡2现金与小费强相关fare_amount基础车费数值连续变量extra附加费如高峰附加费数值mta_taxMTA 税通常为固定 0.5tip_amount小费金额本作业的目标变量tolls_amount过路费多为 0improvement_surcharge改善附加费固定 0.3total_amount总金额含各项费用与小费与tip_amount存在线性包含关系congestion_surcharge拥堵附加费本数据集中仅 7 月记录非 0注意作业数据直接从tpep_pickup_datetime的前 7 个字符即可区分月份仓库真实数据的统计为2019-07与2019-01各 100 条且整个数据集没有缺失值。EDA 核心技术本课的四类方法本课 README 围绕四类 EDA 技术展开配套的 notebook.ipynb 使用邮件分类数据集emails.csv演示了全部方法的实际用法可对照练习。1. 数据画像与描述性统计describe()数据画像Data Profiling通过描述性统计Descriptive Statistics来汇总数据集整体信息画像回答数据里有什么描述性统计回答有多少。Pandas 的describe()对数值列输出count计数、min/max最小/最大值、mean均值、std标准差以及 25%/50%/75% 分位数print(df.describe())用describe()可以快速评估手头数据量是否足够、数值分布是否合理。例如对出租车数据可以立刻看到tip_amount的均值、中位数、最小值 0现金支付通常无小费以及最大值。2. 抽样sample()在大数据集中逐一查看全部内容非常耗时抽样Sampling可以让我们从概率与统计角度对整体得出一般性结论。没有固定的抽样数量规则但抽样越多可做出的概括越精确。Pandas 的sample(n)可以随机取出 n 条记录# 随机抽取 10 条记录 print(df.sample(10))3. 查询query()与抽样相反查询Querying让你控制并聚焦于数据中你有疑问的特定部分。query()通过条件表达式筛选行返回满足条件的记录# 筛选出车费高于 20 美元的记录 print(df.query(fare_amount 20))在作业中可以先用查询快速提取1 月记录或信用卡支付且小费大于 0等子集再做分组统计。4. 通过可视化探索不必等到数据完全清洗与分析完成再作图。探索阶段的图表能帮助识别模式、关系与问题也是与不参与数据管理的人员沟通的手段还能引出采集阶段未覆盖的新问题。可参考 3-Data-Visualization 章节了解常用的可视化方式如柱状图、直方图、箱线图、散点图。5. 检查缺失与不一致isna()/isnull()以上所有技术都能帮助发现缺失或不一致的值Pandas 还提供了专门的检查函数print(df.isna().sum()) # 每列缺失值数量 print(df.isnull().sum().sum()) # 全局缺失值总数探索时更重要的是思考这些值为何出现这决定了后续 数据准备阶段 中应采取何种处理动作删除、填充或保留。作业实操指南回答三个核心问题在 作业笔记本 中数据加载与打印之后预留了空白单元格Use the cells below to do your own Exploratory Data Analysis要求使用本课学到的技术完成自己的 EDA可以按需添加单元格并回答以下三个问题。问题一数据中还有哪些因素可能影响小费金额围绕目标变量tip_amount从字段语义出发做多角度探索。基于仓库真实数据可以验证以下线索付款方式现金支付payment_type 2的记录小费往往为 0。真实数据中 57 条现金记录几乎没有小费143 条信用卡记录的小费均值明显更高——这是影响小费的最强因素车费高低小费通常是车费的百分比fare_amount越高小费绝对值越高。可构造小费率tip_rate tip_amount / fare_amount观察乘客人数、行程距离、行程时长更远、更久的行程可能带来更慷慨的小费费率代码与区域机场行程RatecodeID 为 2 等可能产生固定金额或更高比例的小费拥堵附加费真实数据中 1 月全部为 0、7 月均值约 2.25说明该项只在下半年生效可作为月份差异的旁证。推荐的分析代码片段# 添加月份与小费率列 df[month] df[tpep_pickup_datetime].str[:7] df[tip_rate] df[tip_amount] / df[fare_amount] # 按付款方式查看小费差异 print(df.groupby(payment_type)[tip_amount].agg([count, mean, median])) # 按乘客人数查看小费差异 print(df.groupby(passenger_count)[tip_amount].agg([count, mean]))问题二哪些列很可能在回答客户问题时用不到逐列评估其与冬夏小费对比的相关性可以从源码数据中确认以下判断store_and_fwd_flag全部记录均为 N零信息量应剔除improvement_surcharge、mta_tax固定金额0.3 / 0.5无区分度tolls_amount绝大多数为 0对回答小费问题几乎无贡献congestion_surcharge虽然能辅助区分季节但它属于系统性差异只在下半年征收不能直接解释小费行为VendorID、PULocationID、DOLocationID与季节性问题相关性弱除非进一步做区域交叉分析注意total_amount已包含tip_amount两者高度线性相关分析时应避免同时使用造成重复计算。问题三基于现有信息数据是否提供了季节性小费行为的证据对 1 月与 7 月做分组汇总使用groupby 聚合仓库真实数据可以得到如下结果print(df.groupby(month)[tip_amount].agg([count, mean, median, sum]))月份记录数小费均值小费中位数小费总和2019-01冬季1001.94941.48194.942019-07夏季1002.07842.00207.84再看小费率与零小费占比print(df.groupby(month)[tip_rate].mean()) # 2019-01: 约 0.1492019-07: 约 0.168 print(df.groupby(month)[tip_amount].apply(lambda s: (s 0).mean())) # 2019-01: 29% 为零小费2019-07: 33% 为零小费从描述性统计看夏季的小费均值、中位数、总和与小费率均略高于冬季表面证据倾向于夏季小费略多。但必须谨慎给出结论差异幅度较小均值差约 0.13 美元中位数差 0.52 美元且仅 200 条样本、每月仅 100 条按照本课抽样越多概括越精确的原则此样本量不足以支撑强结论付款方式构成差异1 月与 7 月信用卡/现金比例不同会混淆季节效应——这是典型的混杂变量需要通过查询或分组进一步控制后再比较更严谨的做法是仅比较信用卡支付且小费大于 0 的记录并补充可视化如按月分组的箱线图或直方图观察分布形态而不是只看均值。因此合理的作业结论是数据提供了夏季小费略高的初步迹象但受样本量与混杂因素限制尚不能构成确定性证据需要更多月份、更大样本或补充数据集来验证。评分标准与提交要点作业按三维度评估表格见 作业文件 原文孟加拉语翻译版同样保留了该表结构示范级Exemplary达标Adequate需改进Needs Improvement达到示范级的作业通常具备在笔记本中完整执行并记录了多类 EDA 技术describe、sample、query、可视化、缺失值检查、对三个问题给出有数据支撑的分析结论、能识别混杂变量并解释其影响。建议提交前检查笔记本已按顺序运行、图表与结论一致、每个结论都能指向具体的统计量或图表证据。延伸学习路径本作业是 数据科学生命周期分析阶段 课程的一部分课程讲义中还介绍了 EDA 与建模准备的关系上一阶段作业评估数据集Capturing 阶段负责评估数据能否回答问题数据准备与清洗技术08-data-preparation 笔记本可视化方法参考3-Data-Visualization 章节完整示例代码15-analyzing/notebook.ipynb 与 examples 目录 中的基础数据分析示例。通过完成本作业你将完整走过提出问题 → 数据画像 → 抽样查询 → 可视化探索 → 检验假设的 EDA 闭环并学会用统计证据而非直觉来回答业务问题——这正是数据科学分析阶段的核心能力。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考