Data Science for Beginners 第 09 课作业精解:用折线图、散点图与柱状图讲一个雪雁(Snegæs)的数据故事
Data Science for Beginners 第 09 课作业精解:用折线图、散点图与柱状图讲一个雪雁(Snegæs)的数据故事
📅 发布时间:2026/9/12 4:34:39👁 浏览次数:
Data Science for Beginners 第 09 课作业精解用折线图、散点图与柱状图讲一个雪雁Snegæs的数据故事【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners本文基于仓库中丹麦语课程作业 translations/da/3-Data-Visualization/09-visualization-quantities/assignment.md 展开带你完整走一遍数据可视化讲量Visualizing Quantities的作业要求以仓库自带的数据集 data/birds.csv 为素材用 Pandas Matplotlib 的折线图、散点图、柱状图三种图表类型围绕某一种鸟原文示例为雪雁 Snegæs构建一个有注释、有叙事、有吸引力图表的 Notebook并按仓库给出的评分量表自查成果。一、作业任务从会画图到讲故事原文作业assignment.md的指令原文是I denne lektion arbejdede du med linjediagrammer, spredningsdiagrammer og søjlediagrammer for at vise interessante fakta om dette datasæt. I denne opgave skal du dykke dybere ned i datasættet for at opdage en fakta om en given type fugl. For eksempel kan du oprette en notebook, der visualiserer alle de interessante data, du kan finde om Snegæs. Brug de tre nævnte diagramtyper til at fortælle en historie i din notebook.中文含义本课时你使用折线图、散点图与柱状图展示了数据集的有趣事实本作业要求你深入挖掘数据集发现某一类鸟的事实。作业给出的示例方向是创建一个 Notebook把你能找到的关于**雪雁Snegæs / Snow goose**的所有有趣数据可视化出来并用上述三种图表类型在 Notebook 中讲述一个故事。因此完成本作业的技术能力清单是会用pd.read_csv加载并检查birds.csv这类文本 数值混合结构的数据集能用折线图line plot快速发现量级异常离群值能用带条件标注的散点图labeled scatter把异常点点名再用行级过滤剔除噪声能用堆叠柱状图 / 水平柱状图做分组计数与组内比较能把以上步骤组织成有叙事顺序的 Notebook并对照仓库评分量表自检。对应的完整课时讲义见 translations/da/3-Data-Visualization/09-visualization-quantities/README.md英文原版在 3-Data-Visualization/09-visualization-quantities/README.md参考实现见 translations/da/3-Data-Visualization/09-visualization-quantities/solution/notebook.ipynb。二、数据基础birds.csv 的结构与雪雁记录课时强调数据存放在仓库根目录的/data文件夹下文件为 data/birds.csv。该文件共 443 行记录不含表头13 列表头如下英文原列名 丹麦语讲义中的译名英文列名丹麦语讲义列名类型说明NameNavn文本鸟的英文名如Snow gooseScientificNameVidenskabeligtNavn文本学名如Anser caerulescensCategoryKategori文本粗粒度类别如Ducks/Geese/WaterfowlOrderOrden文本目如AnseriformesFamilyFamilie文本科如AnatidaeGenusSlægt文本属如AnserConservationStatusBevaringsstatus文本保护等级如LCMinLength / MaxLengthMinLængde / MaxLængde数值体长范围cmMinBodyMass / MaxBodyMassMinKropsmasse / MaxKropsmasse数值体重范围gMinWingspan / MaxWingspanMinVingefang / MaxVingefang数值翼展范围cm按围绕雪雁讲故事的作业要求先把与它直接相关的事实定位出来。从 data/birds.csv 中可以确认雪雁Snow goose, Anser caerulescensCategory 为Ducks/Geese/WaterfowlOrder 为AnseriformesFamily 为AnatidaeGenus 为Anser保护等级LCLeast Concern体长 64–79 cm体重 2050–4050 g翼展 135–165 cm同属Genus Anser的鸟在数据集中共有 3 种雪雁Snow goose、Rosss gooseAnser rossii翼展 113–116 cm、Greater white-fronted gooseAnser albifrons翼展 130–165 cm——这是做同类比较图表的天然素材数据集共 60 个 Category其中Ducks/Geese/Waterfowl以 45 种居首与课时中Minnesota 是万湖之地水禽最多的结论一致ConservationStatus 分布为LC 402、NT 27、VU 10、EN 2、CR 1、EX 1——有多少种濒危/受胁鸟正是讲义列出的可用柱状图回答的 mængde量问题之一。加载数据与快速检查作业 Notebook 的第一组单元格import pandas as pd import matplotlib.pyplot as plt birds pd.read_csv(../../data/birds.csv) # 相对课时文件夹的路径若在 solution 子目录则为 ../../../data/birds.csv birds.head()这些数据是文本与数值的混合体这也是为什么后面所有可视化都要显式选择数值列MinLength、MaxWingspan等或分组计数列。三、步骤 1折线图定位量级异常linjediagram讲义的核心工作流是识别要关注的 dataframe 列 → 做必要变换 → 分配 x/y 轴 → 选择图表类型 → 显示。折线图是先看全貌的最佳起点因为一条连续的线会立刻暴露量级跳变。最简折线图直接复用 Series.plotwingspan birds[MaxWingspan] wingspan.plot()运行后你会立刻看到一个约 2300 厘米23 米的巨大尖峰——讲义原话是难道密歇根上空飞着翼龙Pterodactyls。此时不要跳出去用 Excel 排序而是继续在图上工作。给 x 轴加鸟类名称标签plt.title(Max Wingspan in Centimeters) plt.ylabel(Wingspan (CM)) plt.xlabel(Birds) plt.xticks(rotation45) x birds[Name] y birds[MaxWingspan] plt.plot(x, y) plt.show()但 443 只鸟全标注后即使旋转 45 度也密密麻麻不可读。讲义的解法是换成散点图制造空间只给离群点标注——plt.title(Max Wingspan in Centimeters) plt.ylabel(Wingspan (CM)) plt.tick_params(axisboth, whichboth, labelbottomFalse, bottomFalse) for i in range(len(birds)): x birds[Name][i] y birds[MaxWingspan][i] plt.plot(x, y, bo) if birds[MaxWingspan][i] 500: plt.text(x, y * (1 - 0.05), birds[Name][i], fontsize12) plt.show()逐行解读讲义有明确解释这里保留其因果链plt.tick_params(..., labelbottomFalse, bottomFalse)隐藏底部刻度标签给图内标注腾出空间循环内plt.plot(x, y, bo)bo是蓝色圆点blue circle的绘图格式符用散点代替折线点与点不再相连视觉上更宽松if birds[MaxWingspan][i] 500只对翼展超过 500 cm 的鸟执行plt.text标注y * (1 - 0.05)把标签沿 y 轴下移 5%避免标签与点重叠。从 data/birds.csv 可核实全表中MaxWingspan 500的记录恰好只有两条NameMaxWingspan (cm)Bald eagle2300Prairie falcon1100讲义的判断是白头海雕Bald eagle与草原隼Prairie falcon大概率是录入时多打了一个0多补一个 0 的笔误。四、步骤 2过滤离群值得到更一致的散点图spredningsdiagram识别出异常后讲义选择在绘图循环里直接跳过这两行而不修改原始 dataframeplt.title(Max Wingspan in Centimeters) plt.ylabel(Wingspan (CM)) plt.xlabel(Birds) plt.tick_params(axisboth, whichboth, labelbottomFalse, bottomFalse) for i in range(len(birds)): x birds[Name][i] y birds[MaxWingspan][i] if birds[Name][i] not in [Bald eagle, Prairie falcon]: plt.plot(x, y, bo) plt.show()讲义明确给出了三种等价的替代处理供你按作业需求选择在后续图表中过滤掉这两只离群鸟上面的写法修正它们翼展的笔误如把 2300 改为 230 量级的值对不依赖翼展字段的练习例如按 Category 的柱状图原样保留也不影响。过滤后数据more coherent and understandable更一致、可读。对作业的建议在讲雪雁的故事时把发现 2300 cm 尖峰 → 用条件标注点名 → 过滤后重画这一段完整保留它本身就是用图表做数据准备data preparation的叙事高光也是评分标准中solid historiefortælling扎实的叙事的直接得分点。五、步骤 3柱状图做分组计数与比较søjlediagram讲义列出了本数据集可以直接用量图表回答的三个问题全部是柱状图的地盘Hvor mange kategorier af fugle er der, og hvad er deres antal?有多少类鸟各自多少Hvor mange fugle er uddøde, truede, sjældne eller almindelige?多少种灭绝、受胁、稀有或常见Hvor mange er der af de forskellige slægter og ordener?各属、各目各有多少从原始数据直接堆叠柱状图讲义演示的反面教材用于说明为什么必须先聚合birds.plot(xCategory, kindbar, stackedTrue, titleBirds of Minnesota)这张图不可读——443 行原始记录在 60 个类别上堆叠视觉上无法区分。结论是柱状图要画聚合后的量。按类别计数的水平柱状图category_count birds.value_counts(birds[Category].values, sortTrue) plt.rcParams[figure.figsize] [6, 12] # 60 个类别太多纵向加高 category_count.plot.barh()注意讲义的分工表述Pandas 管理数据Matplotlib 负责画图——value_counts(..., sortTrue)完成分组计数与排序plot.barh()只负责渲染。运行结果中最长的柱子是Ducks/Geese/Waterfowl45 种其次是New World warblers41 种与Sandpipers/Allies34 种。组间比较每类鸟的 MaxLength。用plt.barh(y..., width...)显式指定坐标maxLength birds[MaxLength] plt.barh(ybirds[Category], widthmaxLength) plt.rcParams[figure.figsize] [6, 12] plt.show()结果符合常识蜂鸟Hummingbirds最短鹈鹕Pelicans、大鹅最长——讲义点评数据讲得通就是好事。组内叠加Min 与 Max 长度叠在同一组。这是本课最有信息量的一张柱状图把每个类别的长度区间画成两根叠加的水平条minLength birds[MinLength] maxLength birds[MaxLength] category birds[Category] plt.barh(category, maxLength) plt.barh(category, minLength) # 短条叠在长条之上形成区间带 plt.show()从源码结构看这两次barh调用共享同一组 y 轴类别先画最大长度、再画最小长度视觉上就得到每类鸟的最小–最大长度带。讲义的结论鸟越大其长度跨度max−min也越大。图表选型速查讲义 ✅ 清单完整继承分析随时间的趋势折线linje比较数值柱形、条形、饼图、散点søjle, kolonne, cirkel, scatterplot显示部分与整体的关系饼图cirkel显示数据分布散点、柱形scatterplot, søjle显示趋势折线、条形linje, kolonne显示数值间的关系折线、散点、气泡linje, scatterplot, boble六、作业实战为雪雁Snegæs搭一个三图故事 Notebook下面把上述三步组织成作业要求的故事线并给出可直接运行的参考代码相对路径按你放 Notebook 的位置调整若在solution/子目录中用../../../data/birds.csv。第一幕它有多大的翅膀折线图 → 散点图import pandas as pd import matplotlib.pyplot as plt birds pd.read_csv(../../data/birds.csv) # 1) 全量 MaxWingspan 折线图一眼看到 2300 cm 的量级异常 birds[MaxWingspan].plot() plt.ylabel(MaxWingspan (cm)) plt.title(Max Wingspan of Minnesota Birds) plt.show() # 2) 只标注 500 cm 的离群点数据中即 Bald eagle 与 Prairie falcon plt.tick_params(axisboth, whichboth, labelbottomFalse, bottomFalse) for i in range(len(birds)): plt.plot(birds[Name][i], birds[MaxWingspan][i], bo) if birds[MaxWingspan][i] 500: plt.text(birds[Name][i], birds[MaxWingspan][i] * 0.95, birds[Name][i], fontsize12) plt.title(Outliers in Max Wingspan) plt.ylabel(Wingspan (cm)) plt.show()第二幕它在雁属Anser里处于什么位置柱状图/条形图比较anser birds[birds[Genus] Anser] # Snow goose / Rosss goose / Greater white-fronted goose # 双条形比较翼展区间先画 MaxWingspan再叠 MinWingspan plt.barh(anser[Name], anser[MaxWingspan]) plt.barh(anser[Name], anser[MinWingspan]) plt.xlabel(Wingspan (cm)) plt.title(Wingspan Range in Genus Anser) plt.show() # 体重区间同理 plt.barh(anser[Name], anser[MaxBodyMass]) plt.barh(anser[Name], anser[MinBodyMass]) plt.xlabel(Body Mass (g)) plt.title(Body Mass Range in Genus Anser) plt.show()结合 data/birds.csv 中的真实数值可以预期雪雁的翼展区间135–165 cm与 Greater white-fronted goose130–165 cm几乎持平但雪雁的体重区间2050–4050 g明显重于另外两种Rosss goose 1066–1567 g、Greater white-fronted goose 1930–3310 g这就是同属比较能讲出的第一层故事。第三幕它所处的生态系统有多水分组计数柱状图 保护状态# 雪雁所属类别在数据集中的体量 category_count birds.value_counts(birds[Category].values, sortTrue) plt.rcParams[figure.figsize] [6, 12] category_count.plot.barh() plt.title(Bird Counts by Category in Minnesota Dataset) plt.show() # 保护状态计数讲义 mængde 问题之一 status_count birds.value_counts(birds[ConservationStatus].values, sortTrue) status_count.plot.bar() plt.title(Conservation Status Counts) plt.ylabel(Species) plt.show()可预期的数字Ducks/Geese/Waterfowl45 种居 60 类之首保护状态合计 LC 402、NT 27、VU 10、EN 2、CR 1、EX 1——绝大多数物种是 LC雪雁也不例外就是第三幕的落点。叙事与注释要求评分量表明确要求godе kommentarer好的注释。每个单元格前应有一段 Markdown 说明这张图要回答什么问题、图里看到了什么例如Dette linjediagram viser MaxWingspan for alle 443 fugle. Den markante spids ved ca. 2300 cm peger på sandsynligvis to tastefejl (Bald eagle, Prairie falcon), som filtreres væk i næste celle.中文本折线图展示全部 443 种鸟的 MaxWingspan约 2300 cm 的尖峰大概率是两条录入笔误下一单元格将其过滤。七、评分量表Bedømmelseskriterier作业文档给出了三档量表完整继承如下丹麦语原文 中文对照Eksemplarisk优秀Tilstrækkelig合格Kræver Forbedring需改进En notebook præsenteres med gode kommentarer, solid historiefortælling og attraktive grafer —— 提交了带良好注释、扎实叙事和美观图表的 NotebookNotebooken mangler ét af disse elementer —— Notebook 缺少其中一项Notebooken mangler to af disse elementer —— Notebook 缺少其中两项自查清单对照优秀档Notebook 三种图表类型折线、散点、柱状全部出现且各服务于叙事的一环每个图表前有 Markdown 注释说明意图图中结论用文字复述离群值处理过程发现 → 标注 → 过滤在 Notebook 中留痕图表带标题与坐标轴标签plt.title/plt.xlabel/plt.ylabel至少一处从数据中读出的新事实例如雪雁体重区间在 Anser 属内最大。八、延伸挑战与自检路径讲义的 Udfordring挑战建议本数据集只是某一生态系统中各类鸟的一个样本可另行寻找其他鸟类数据集重复折线找异常 → 散点点名 → 柱状图分组的流程练习从新数据中发现未知事实。仓库内可以继续深入的路径课时讲义丹麦语 / 英语translations/da/3-Data-Visualization/09-visualization-quantities/README.md、3-Data-Visualization/09-visualization-quantities/README.md作业参考实现translations/da/3-Data-Visualization/09-visualization-quantities/solution/notebook.ipynb英文版在 3-Data-Visualization/09-visualization-quantities/solution/后续课时可把同样的量思维迁移到分布与比例可视化3-Data-Visualization/10-visualization-distributions/README.md、3-Data-Visualization/11-visualization-proportions/README.md讲义还提示了仓库未覆盖的替代库 Plotly可作课外扩展阅读。适用前提与限制上述所有代码依赖 Python 环境中的pandas与matplotlib参考 Notebook 的 kernelspec 标注为 Python 3.7 量级的解释器实际任意支持这两个库的 Python 3 版本均可birds.csv中的列名与数值以当前仓库 data/birds.csv 的实际内容为准若上游数据更新离群值与计数结果需重新核实。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考