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 课(数据科学生命周期导论)的课后作业为骨架,完整呈现"数据科学生命周期 Capturing(采集)阶段"的数据集评估流程。读者将掌握:如何判断一份原始数据能否回答业务问题、如何通过探索性分析发现数据缺口、如何补充关联数据源,以及如何用澄清性问题消除需求歧义。文中所有结论均基于仓库中的 notebook.ipynb 与 taxi.csv 的真实数据验证。
任务背景:一个关于季节与小费的业务问题
课程 14-Introduction/README.md 将数据科学生命周期拆解为 5 个阶段:Capturing(采集)、Processing(处理)、Analysis(分析)、Communication(沟通)、Maintenance(维护)。本次作业明确将团队定位在Capturing 阶段——这是整个生命周期中最关键的一环,因为后续所有阶段都依赖它。
作业场景(对应 assignment.md 的英文原版与 translations/fa/4-Data-Science-Lifecycle/14-Introduction/assignment.md 波斯语版):
一位客户向你的团队求助,希望调查纽约市出租车顾客的季节性消费习惯。他们想知道:纽约市黄色出租车乘客在冬季给司机的小费更多,还是在夏季?
作为 Capturing 阶段的数据负责人,你的核心职责不是立刻建模,而是评估这份已提供的数据集能否支撑回答这个问题,并识别缺失的信息。
数据集初探:从 notebook 到真实文件
仓库为本次任务提供了两份关键资产:
| 资产 | 路径 | 作用 |
|---|---|---|
| 分析笔记本 | notebook.ipynb | 用 Python/pandas 加载出租车数据 |
| 数据文件 | data/taxi.csv | 200 行 × 18 列的纽约黄色出租车行程记录 |
notebook.ipynb 的加载逻辑如下(代码来自 notebook 首个代码单元):
import pandas as pd path = '../../data/taxi.csv' # 将 CSV 文件加载为 dataframe df = pd.read_csv(path) # 打印 dataframe print(df)notebook 元数据还揭示了运行环境:Python 3.9.7,数据源为纽约市出租车与轿车委员会(NYC Taxi & Limousine Commission)的黄色出租车行程数据。也可以直接用文本编辑器或 Excel 打开 taxi.csv 查看——这正是作业建议的备选方式。
对真实数据的独立验证
在仓库中执行上述加载逻辑后,taxi.csv 的实际形态可以精确描述如下:
- 规模:200 行、18 列,约 36 KB 内存占用,是一份典型的小型教学样本数据;
- 时间覆盖:
tpep_pickup_datetime字段只包含2019-01(冬季,100 行)与 2019-07(夏季,100 行)两个月份,冬夏各占一半; - 完整性:18 个字段均无缺失值;
- 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、tip_amount、tolls_amount、improvement_surcharge、total_amount、congestion_surcharge。
与小费问题直接相关的字段是tip_amount(小费金额)与payment_type(支付方式)。实际统计结果(基于仓库数据)显示:
| 分组 | 行数 | tip_amount 均值 | tip_amount 中位数 |
|---|---|---|---|
| 2019-01(冬季) | 100 | 1.9494 | 1.48 |
| 2019-07(夏季) | 100 | 2.0784 | 2.00 |
全样本tip_amount均值为 2.0139,标准差 2.2921,中位数 1.65,最大 14.64;payment_type中 1.0(信用卡)143 笔、2.0(现金)57 笔。这些数字本身并不能直接得出结论,但足以支撑后续的质量评估。
评估一:这份数据能回答"冬夏小费对比"吗?
作业的第一条指令是:评估数据集是否有助于回答客户的问题。从数据结构与实际取值看,这份数据既具备回答能力,也存在明显局限:
可以回答的部分:
tpep_pickup_datetime提供了精确到秒的乘车时间,足以区分冬季(1 月)与夏季(7 月);tip_amount记录了每次行程的小费金额,配合payment_type(信用卡 vs 现金)可以区分"可观测小费"与"可能被低估的小费";trip_distance、fare_amount、total_amount等字段支持在比较小费时控制里程与车费差异,避免"长途行程天然小费更多"的混淆因素。
无法回答的部分(关键缺口):
- 只有 2019 年一个冬季月和一个夏季月:单年样本无法排除异常年份(如天气极端、节假日效应、费率调整)的干扰,无法形成"季节性"的稳健结论;
- 缺失天气数据:冬季小费变化可能受降雪、气温、交通拥堵影响,而数据集中没有任何天气字段;
- 缺失区域/街区上下文:
PULocationID/DOLocationID是位置 ID,但未附带区域名称、商圈密度、机场标记等语义信息; - 缺失司机与乘客侧信息:如司机的服务评价、乘客是否本地通勤,这些都可能影响小费行为。
因此评估结论应为:该数据集可作为回答问题的起点,但不足以独立支撑可靠结论,需要补充外部数据源——这正是作业第二条指令的意义所在。
评估二:从 NYC Open Data 目录中补充数据源
作业建议浏览 NYC Open Data 目录,识别一个可能有助于回答客户问题的额外数据集。基于上面识别出的缺口,以下候选方向与仓库数据结构契合度最高:
- NYC 天气历史数据(如 NOAA/NWS 气象观测记录):将温度、降水量、降雪量与
tpep_pickup_datetime按日期关联,可以直接检验"冬季恶劣天气是否推高小费"这一假说。这也是仓库 notebook 元数据中"04-nyc-taxi-join-weather-in-pandas"(在 pandas 中关联天气数据)命名的直接印证——课程设计者原本就设想将出租车数据与天气数据做 join。 - 出租车区域(Taxi Zone)地理数据:包含
PULocationID/DOLocationID对应的区域名称与边界,可以把小费差异细化到曼哈顿、机场、皇后区等粒度。 - 节假日日历数据:识别感恩节、新年等旺季,避免把节假日效应误判为季节效应。
补充数据源时,应围绕tpep_pickup_datetime与PULocationID这两个键做关联,这与生命周期 Capturing 阶段"识别、采集、探索达成目标所需数据"的流程完全一致。
评估三:向客户提出的 3 个澄清问题
作业第三条指令是写出 3 个用于向客户澄清的问题。这些问题服务于 README 中提到的目标:"一个定义良好的目标应当是可测量、可量化的,以界定可接受的结果"。结合本数据集特点,可提出:
- 季节的定义边界是什么?"冬季"与"夏季"是按自然月(如 1 月 vs 7 月)、气象学定义(12–2 月 vs 6–8 月),还是按节假日/旅游旺季划分?不同的定义会显著改变样本切分方式。
- "小费更多"的度量标准是什么?是比较小费绝对金额、小费占车费的百分比,还是按行程距离/时长的标准化小费率?此外是否只统计信用卡支付(现金小费在数据中通常记录为 0)?
- 可接受结果的判定门槛是什么?冬夏小费差异达到多少(如均值差 5%、10%)才算是"有意义的季节性差异"?是否需要考虑行程距离、区域、天气等协变量的影响?
这类问题正是 README 中 Capturing 阶段列举的"是否存在歧义以及如何减少歧义"的落地实践,能帮助团队在进入 Processing 阶段前锁定目标。
评估四:数据质量与维护视角
作业隐含的第四层评估是数据质量(README 明确指出:"数据科学家必须评估数据的数量和质量")。基于仓库数据的可验证事实:
- 缺失值:18 列全部为 0 缺失,结构完整;
- 数量:每季仅 100 条记录,属于抽样样本而非全量数据,统计功效有限;
- 字段语义:
tip_amount在payment_type=2.0(现金)时大量为 0,说明小费字段对现金支付不完整——这是一个典型的数据采集偏差,必须在分析时处理(例如仅以信用卡行程为分析对象); - 数据字典参考:作业建议查阅官方数据字典(data dictionary)与用户指南(user guide)来理解字段含义,如
RatecodeID(费率代码)、store_and_fwd_flag(是否存储转发)等字段的取值语义。
从生命周期 Maintenance(维护)视角看,README 还提醒:数据存储方式会影响成本与访问性能,冷热数据分离、数据加密、访问权限控制都应纳入考虑。对于本任务,至少应确认数据的许可与隐私边界(行程数据含上下车位置与时间戳,属于敏感信息)。
扩展:Capturing 阶段的完整方法论
结合 14-Introduction/README.md,本次作业实际演练了 Capturing 阶段的两层提问框架:
关于项目目标的问题:
- 该问题之前是否被研究过?发现了什么?
- 所有参与者是否理解目的与目标?
- 存在哪些歧义,如何减少?
- 约束条件是什么?
- 最终结果可能是什么样?
- 有多少资源(时间、人力、算力)可用?
关于数据的问题:
- 我目前有哪些可用数据?
- 谁拥有这些数据?
- 隐私顾虑是什么?
- 我掌握的数据是否足以解决问题?
- 该数据对问题的质量是否可接受?
- 如果从数据中发现额外信息,是否应考虑调整或重新定义目标?
作业中的"3 个澄清问题"正是第一组框架的浓缩演练,而对数据缺口的识别则是第二组框架的实践。README 还建议将本作业的流程与 Team Data Science Process(TDSP)生命周期、CRISP-DM 方法论(图见 tdsp-lifecycle2.png 与 CRISP-DM.png)进行对比,找出二者的 3 处相似点与 3 处差异,以加深对生命周期各阶段命名与边界的理解。
实操清单与交付物
完成本作业的可执行步骤:
- 在 notebook.ipynb 中运行 pandas 加载代码(或直接用 Excel/文本编辑器打开 data/taxi.csv);
- 检查行数、列数、缺失值、时间范围(应观察到 2019-01 与 2019-07 各 100 行);
- 按月份分组统计
tip_amount的均值与中位数,形成初步对比(如文中验证结果); - 到 NYC Open Data 目录中定位 1 个补充数据集(推荐天气数据),并说明它与现有数据按何字段关联;
- 写下 3 个面向客户的澄清问题,明确季节定义、小费度量口径与结论判定标准。
最终交付物是一份数据可用性评估报告,回答"这份数据能否回答问题、缺什么、需要向客户确认什么",为团队进入 Processing(处理)阶段提供依据。整个过程严格遵循数据科学生命周期 Capturing 阶段"先定义目标、再评估数据、后决定是否调整目标"的顺序——这正是 Data-Science-For-Beginners 课程希望学习者内化的核心能力。
免责声明:作业的波斯语版本文档(translations/fa/4-Data-Science-Lifecycle/14-Introduction/assignment.md)由 Co-op Translator 自动翻译生成,可能存在偏差,英文原版 assignment.md 应视为权威来源。
【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考