Data Science for Beginners 数据集评估实战:用纽约出租车数据验证冬季与夏季小费差异
【免费下载链接】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 课程「数据科学生命周期」第 14 课(Introduction to the Data Science Lifecycle)配套作业的完整实战解析。课程将数据科学生命周期划分为Capturing(采集)→ Processing(处理)→ Analysis(分析)→ Communication(沟通)→ Maintenance(维护)五个阶段,而本作业要求你在Capturing 阶段扮演数据集负责人:评估一份真实的纽约黄色出租车行程数据集(data/taxi.csv),判断它能否回答客户的核心业务问题——纽约市黄色出租车乘客在冬季还是夏季给司机的小费更多。读完后你将掌握"先评估、后建模"的数据集可行性分析方法、基于 Pandas 的探索性数据检查手段,以及面向业务方提问澄清问题的技能。
任务背景:站在数据科学工作流的起点
任何数据科学项目的成败,往往在第一步就决定了。第 14 课明确指出,生命周期的第一个阶段Capturing几乎是由"两步合一"组成的:获取数据与定义需要解决的目标与问题。后续的 Processing(建模与模式发现)、Analysis、Communication 乃至 Maintenance 全都依赖这一阶段产出的质量。
在本作业中,你的团队正处于 Capturing 阶段,而你的职责是"处理数据集"(in charge of handling the dataset)。客户的需求非常具体:
Do yellow taxi passengers in New York City tip drivers more in the winter or summer?(纽约市黄色出租车乘客在冬季还是夏季给司机的小费更多?)
一个定义良好的目标应当是可度量、可量化的。客户的问题表面上清晰,但"更多"如何定义(平均小费金额、小费占车费比例、付小费的乘客比例)、"冬季/夏季"如何界定(按自然月、按节气、还是按统计口径)都隐含着歧义——这正是 Capturing 阶段数据科学家需要主动澄清的地方。课程中给出的问题清单在此场景下全部适用,例如:
- 这个问题之前是否有人研究过?发现了什么?
- 各方是否理解项目的目的与目标?
- 存在哪些约束(时间、人力、计算资源)?
- 最终结果可能长什么样?
数据集速览:一份 200 行的真实出租车行程样本
作业在同一目录下提供了两个关键资源:
- notebook:4-Data-Science-Lifecycle/14-Introduction/notebook.ipynb —— 使用 Python 加载纽约市出租车与豪华轿车委员会(NYC Taxi & Limousine Commission)黄色出租车行程数据的 Jupyter Notebook;
- 数据文件:data/taxi.csv —— 可直接用文本编辑器或 Excel 等电子表格软件打开的 CSV 文件。
notebook 的核心加载逻辑非常简洁,是后续所有评估工作的基础:
# 安装 pandas 库 !pip install pandas import pandas as pd path = '../../data/taxi.csv' # 将 CSV 文件加载为 DataFrame df = pd.read_csv(path) # 打印整个 DataFrame print(df)实际输出显示该数据集为200 行 × 18 列。通过逐列核对,数据包含以下字段(完整字段含义可参考数据字典):VendorID(供应商编号)、tpep_pickup_datetime(上车时间)、tpep_dropoff_datetime(下车时间)、passenger_count(乘客数)、trip_distance(行程英里数)、RatecodeID(费率代码)、store_and_fwd_flag(是否存储转发)、PULocationID/DOLocationID(上下车区域编号)、payment_type(支付方式)、fare_amount(车费)、extra(附加费)、mta_tax(MTA 税)、tip_amount(小费金额)、tolls_amount(过路费)、improvement_surcharge(改善附加费)、total_amount(总金额)、congestion_surcharge(拥堵附加费)。
从字段结构看,这份数据恰好包含回答客户问题所需的核心要素:时间字段(可区分冬夏)与tip_amount 字段(小费金额)。此外 payment_type(支付方式)字段对分析具有关键影响——因为现金交易通常无法在小费字段中体现,这一点稍后会在数据质量评估中展开。
评估数据能否回答问题:四个检查维度
作业的核心指令第一项是:"评估该数据集中的数据能否帮助回答客户的问题"。我们可以从数据探索的结果中提炼出四个可操作的检查维度:
1. 时间覆盖是否足以区分冬夏?
从 data/taxi.csv 的实际内容看,200 条记录全部集中在两个月份:1 月 100 条、7 月 100 条。将 1 月视为冬季、7 月视为夏季的代表月份,样本在时间上形成了对称的对照结构,这是回答冬夏对比问题的基础前提。但需要指出的是,每个季节仅覆盖一个月份,无法反映整个冬季(12 月、1 月、2 月)与夏季(6 月、7 月、8 月)的完整变化,结论的泛化能力有限——这应当成为向客户或团队汇报时说明的边界条件。
2. 是否存在"小费金额"这个目标变量?
tip_amount字段存在且数值完整,可直接作为衡量"小费多少"的目标变量。初步统计显示,全部 200 行的小费金额范围为 0.0 至 14.64 美元。这意味着目标变量可以计算,但零值占比需要进一步审视(见下文第 4 点)。
3. 样本量是否足够支撑结论?
200 行数据属于典型的小样本。即使冬夏各 100 行的对比在结构上成立,从统计推断角度看,仅凭该样本得到的均值差异也需要谨慎解读,不应直接外推为总体规律。这正是 Capturing 阶段必须回答的问题:"Do I have enough to solve this problem?"(我是否有足够的数据解决这个问题?)——答案很可能是"不够,需要补充"。
4. 数据质量是否达标?——零值小费与支付方式的纠缠
探索中一个值得警惕的发现是:200 行中有 62 行tip_amount为 0,其中57 行全部来自payment_type = 2.0(现金支付),而信用卡支付(payment_type = 1.0,共 143 行)中只有 5 行小费为 0。这一现象符合行业常识:现金交易的小费难以被系统记录,往往以 0 呈现。换句话说,"小费为 0"并不等于"乘客没有给小费",它可能只是支付方式的产物。如果直接对tip_amount求平均,现金交易的"结构性 0 值"会系统性拉低结果,从而污染冬季与夏季的比较结论。
一个可行的缓解思路是:将分析限定在信用卡支付(payment_type = 1.0)的样本上,或在分析中同时汇报"含零均值"与"仅非零均值"两种口径。从数据看,信用卡样本小费均值(仅非零口径)冬季约为 2.75 美元、夏季约为 3.10 美元,而含零口径下冬季约 1.95 美元、夏季约 2.08 美元——口径不同,结论的解读完全不同,这正说明了数据质量评估的必要性。
扩展数据源:去 NYC Open Data 目录寻找补充数据集
作业的第二项指令是:探索 NYC Open Data 目录,识别一个可能有助于回答客户问题的额外数据集。
一个直觉上高度相关的候选是纽约市的天气/气温数据。客户的原始问题是冬夏对比,而tip_amount与季节的关系可能并非简单地由"月份"驱动,而是受气温、雨雪等天气条件影响——例如恶劣天气可能影响乘客出行方式、行程长度乃至给小费的行为。将天气数据按日期与 taxi.csv 中的tpep_pickup_datetime进行关联(join),可以构建一个更精细的模型:在控制天气因素的条件下,比较冬季与夏季的小费差异,从而把"月份"这个粗糙的代理变量替换为更本质的解释变量。这也是 notebook 元数据中04-nyc-taxi-join-weather-in-pandas这一名称所暗示的思路——用 Pandas 将出租车数据与天气数据连接起来分析。
其他可考虑的候选还包括:出租车费率/附加费政策变更记录(避免政策变化干扰小费比较)、节假日日历数据(节假日出行行为显著不同)等。评估额外数据集的准则与评估主数据集一致:字段含义是否清楚、时间范围是否匹配、能否与主数据集按时间键关联。
向客户提出澄清问题:把模糊需求变成可执行定义
作业的第三项指令是写出 3 个用于澄清客户问题、加深对问题理解的问题。好的澄清问题应当直指"歧义所在",以下是一组可参考的示例(并非唯一答案):
- "更多"的统计口径是什么?您希望比较的是冬季与夏季的平均小费金额、小费占车费的比例,还是"给出小费的乘客比例"?不同口径可能得出不同结论,需要提前锁定业务方认可的定义。
- "冬季"与"夏季"的时间边界如何划分?是按自然月(如 12 月–2 月 vs 6 月–8 月)、气象学定义,还是以具体活动(如节假日、滑雪季)来界定?当前数据集只有 1 月和 7 月的样本,我们是否需要补充其他月份的数据?
- 现金支付的小费如何处理?当前数据中现金交易的小费金额几乎全部记录为 0,这会导致比较失真。您是否接受仅基于信用卡支付样本的分析结论,还是需要我们采用其他口径或额外采集数据?
这三个问题分别对应了目标可量化性、时间定义歧义、数据质量约束三大核心痛点,与第 14 课 Capturing 阶段"减少歧义(Is there ambiguity and how to reduce it?)"的理念一脉相承。
生命周期上下文:Capturing 阶段为何如此关键
理解本作业在整个课程中的位置,有助于把握评估工作的分量。第 14 课 README 强调,Capturing 阶段之所以重要,是因为后续阶段都依赖它:定义项目目标需要深入理解问题背后的上下文,而数据获取则要求数据科学家同步评估数据的数量与质量,通过探索确认已获取的数据能够支撑达成期望结果。
具体到本作业,"评估数据集能否回答问题"正是 Capturing 阶段"探索数据、确认可行性"这一动作的实战演练。在真实的团队协作中,这一评估结论将直接决定项目是否继续进入 Processing(处理与建模)阶段,还是需要回头补充数据、重新定义目标。同时,课程中提及的 Maintenance(维护)概念也在此处悄然生效:数据存储方式(本地 CSV vs 云端数据库)、冷热数据分层、加密与访问控制等决策,都会影响这份出租车数据后续如何被管理——正如 5-Data-Science-In-Cloud 部分课程所展开的内容。
评分标准(Rubric):怎样才算高质量完成
作业末尾给出了三档评估标准,可作为自查清单:
| 优秀(Exemplary) | 合格(Adequate) | 需改进(Needs Improvement) |
|---|---|---|
| 系统评估了数据集能否回答问题(覆盖时间、目标变量、样本量、质量等维度),识别出合适的补充数据集,并提出 3 个直击歧义本质的澄清问题,且每一点都有数据探索作为依据 | 完成了基本评估,指出了数据集的优点与局限,提出了合理的问题 | 仅停留在表面描述,未结合数据实际内容,问题笼统或与客户需求脱节 |
对照该标准,一篇出色的作业应当做到"每个结论都有据可查":例如在评估中明确引用 notebook 的输出(200 行、18 列)、指出 1 月/7 月各 100 行的时间结构、发现 57 行现金支付小费为零的数据质量陷阱,并据此提出有说服力的澄清问题与补充数据建议。
小结:从"拿到数据"到"敢说结论"之间,隔着一道评估关
本作业的价值不在于求出"冬季还是夏季小费多"这个最终数字,而在于训练你在建模之前先质疑数据的能力:这份数据能否回答这个问题?存在哪些系统性偏差?我还需要什么信息?当你能够像这样把客户的模糊提问拆解为时间覆盖、目标变量、样本量、数据质量四个检查维度,并据此提出澄清问题、补充数据源时,你就真正迈入了数据科学生命周期的第一道门——Capturing 阶段。后续你可以继续沿着第 15 课 Analyzing 与第 16 课 Communication 的路径,完成分析、建模与结果沟通的完整闭环。
【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考