页面加载中... 正在获取课程、资料和账户状态,请稍等一下。
DATA1002 Final Exam | 包帕斯资料站
首页 / 学科高分小技巧 / DATA1002 Final Exam
DATA1002 DATA1002 Final Exam 包帕斯
下面的数字都来自 practice question,用来讲分组和求平均这一类计算,不代表官方 exam paper 会出同样的题。
merge 之后,平均延误从 10 变成 8
Week 7 有一道 practice question:journeys 表的一行是一次行程,一共三次,J1 和 J2 走 route R,delay 是 4 和 16,J3 走 route S,delay 是 9。tags 表的一行是一个标签,J1 有 weekday 和 rain 两个标签,J2 和 J3 各有一个。
按 journey 做 pd.merge 之后,J1 在标签表里出现两次,它的 delay 也就占了两行,合并结果一共 4 行:
journey route delay tag J1 R 4 weekday J1 R 4 rain J2 R 16 weekend J3 S 9 weekday
接着跑 groupby("route")["delay"].mean(),route R 算的是 (4 + 4 + 16) / 3 = 8。按行程算,route R 只有 J1 和 J2 两次,均值是 (4 + 16) / 2 = 10。J1 被算了两次,它的延误又比 J2 小,所以均值被拉低了 2。
合并后的表里,一行代表「一次行程配一个标签」。题目要的是每次行程的平均延误,又用不到标签,直接对原表分组就可以: 。对合并后的表跑默认的 删不掉多出来的那行,因为 J1 的两行 tag 不同,算不上整行重复。
journeys.groupby("route")["delay"].mean()
drop_duplicates()
透视表的均值再求平均,North 得到 19 Week 2 的 practice question 用 Excel 透视表。每行是一个完成的任务,North 有 3 个:上午 8 分钟和 12 分钟,下午 28 分钟。按 Room 和 Session 分组后,North 上午的均值是 10,下午是 28。
把这两个数再平均,得到 (10 + 28) / 2 = 19。按 3 个任务算,总时长 48 分钟,均值是 16。差别来自任务数:上午有 2 个任务,下午只有 1 个,而 19 这个算法让下午那 1 个任务占了一半权重。要从 session 均值还原,就乘上各自的任务数:(2 × 10 + 1 × 28) / 3 = 16。
同一道题再加一个 North 下午 20 分钟的任务,下午均值变成 24,两个 session 的简单平均是 17,按任务算也是 68 / 4 = 17。两种算法这时相等,只因为两个 session 恰好各有 2 个任务。
Week 4 用 Python 算取件等待时间,也是这个差别:Harbour 有 3 条记录,均值 4;Park 有 1 条记录,均值 12。直接平均得 8,按全部 4 条记录算是 24 / 4 = 6。
Week 6 的题目换成了百分比。三个食堂的 food waste 分别变化 −18%、0 和 +6%,简单平均是 −4%,这个数不能当作总变化,总变化取决于每个食堂原来的浪费量。假设原来分别是 100、100 和 400 kg,之后就是 82、100 和 424 kg,总量从 600 变成 606,上升 1%。题目没有给这些质量,结论只能写到「三个百分比算不出总变化」。
字典的 key 少一列,4 行只剩 3 条 Week 6 有一张实验记录表,每个 sample_id、test、repeat 的组合只有一行。
sample_id test repeat value S8 acidity 1 6.8 S8 acidity 2 7.0 S8 density 1 1.1 S9 acidity 1 6.5
代码用 (sample_id, test) 当字典的 key。处理第 2 行时,key 和第 1 行相同,字典把 6.8 覆盖成 7.0,程序不报错,结果只有 3 条。把 repeat 放进 key,4 行才都留得下。判断 key 够不够,就看它能不能区分表里任意两行。
Week 5 的分组累计也会碰到覆盖。totals[key] = count 每次都换掉旧值,累计要写成 totals[key] = totals.get(key, 0) + count,第一次出现的 key 从 0 开始加。
AVERAGE 跳过空格和文字,0 要算进分母 Week 2 有一列 5 个格子:12、空格、文字 pending、0、18。空格和 pending 都是还没测量的值。AVERAGE 只算数值,(12 + 0 + 18) / 3 = 10。把那两格填成 0 以后,分子不变,分母变成 5,结果是 6。均值下降是因为两个未知值被写成了测量到的 0。
site day attendance status Harbour Mon 20 measured Harbour Tue 0 failed Harbour Wed 30 measured Hill Mon 0 measured Hill Tue 18 measured
文档写明 failed 时的 0 是占位值,所以 Harbour 的 Tue 是未知人数。Hill 的 Mon 是实测,当天没有人来,这个 0 要留着。Hill 的 Wed 整行不存在,属于缺失记录。
直接求和得到 Harbour 50、Hill 18,这两个数只是已知人数的小计。设两个未知人数为 h 和 k,完整总数是 50 + h 和 18 + k,只有 k − h < 32 时 Harbour 才更高。比如 h = 0、k = 40 时是 50 对 58,Hill 更高。题目没有给这两个值,三天的排名就判断不了。
Week 4 那张取件表里还有一个空组:Hill 服务台没有任何 completed 记录,总和是 0,数量也是 0,0 / 0 算不出均值。这里要写 No completed collections,写成 0 分钟会被读成等待时间为零。
处理顺序同样会改变行数。Week 7 的表有三行:a 是 S, NaN,b 是 S, 0,c 是 T, 5。先 fillna 再 drop_duplicates,a 和 b 变得相同,只剩 2 行。先去重再填充,去重时 a 和 b 还不同,3 行都留下。
在纸上算这类题 官方说明写的是 2 小时闭卷笔试,题型有 MCQ 和 short essay。笔试时没法运行代码看结果,所以中间结果要自己写出来:一行代表什么,哪些行参与计算,分子和分母各是多少,算出来的数度量的是什么。
Short essay 的句子也可以沿用这几项。人数表那道题可以写成:These totals are subtotals of the valid observed attendance. Each site has two valid days, so they do not establish the three-day ranking.
这篇只讲计算这一类。官方列出的 learning outcome 还包括 GenAI 的原理和使用注意事项,Week 1 到 Week 8 的 lecture 都有对应主题,要另外 review。
DATA1002 DATA1002 25S2|Practice Test 占 0% 是陷阱不是福利 Week 9 的 Practice Coding Test 占 0%,大多数人跳过。但 Week 11 同样格式的 Coding Test 占 10%,闭卷手写代码。0% 不是福利,是预警系统。
扫码/点击二维码 - 加我:对课程资料感兴趣?买之前想确认适不适合?看资料时有疑问?