资讯动态

用 Matplotlib 深度挖掘明尼苏达鸟类数据:折线图、散点图与条形图实战

发布时间:2026/9/13 13:41:32 来源:尧图企业网站定制
用 Matplotlib 深度挖掘明尼苏达鸟类数据折线图、散点图与条形图实战【免费下载链接】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 课程第 9 课《Visualizing Quantities》以明尼苏达鸟类数据集 birds.csv 为实战对象手把手演示如何用 Matplotlib 折线图、散点图与条形图揭示数量维度的数据事实。读完本文你将掌握从数据清洗、异常值识别、数据过滤到分组聚合可视化的完整流程并能独立完成对某一类鸟类展开数据故事的课程作业。一、作业目标围绕一种鸟类讲一个数据故事课程作业原文见 translations/es/3-Data-Visualization/09-visualization-quantities/assignment.md 及其英文原版 assignment.md要求在本课中你使用折线图、散点图和条形图展示了关于该数据集的有趣事实。本作业要求你深入数据集发现关于某一特定类型鸟类的数据事实。例如创建一个 notebook可视化你能找到的关于雪雁Snow Geese的所有有趣数据并使用上述三种图表在 notebook 中讲一个故事。作业评分标准Rubric聚焦三个维度维度卓越Exemplary合格Adequate需改进Needs Improvement完成度notebook 呈现良好注释、扎实叙事与美观图表缺失上述三项中的一项缺失上述三项中的两项可以看出这份作业不仅考图形绘制还考叙事能力storytelling与代码注释annotations。参考实现位于 solution/notebook.ipynb其中用 21 个单元格完整走完了导入数据 → 折线图 → 异常值标注 → 过滤 → 分类条形图 → 长度对比 → 叠加对比的全流程正是本作业的最佳范例。二、环境准备与数据加载2.1 数据集说明数据存储在仓库根目录的 data/birds.csv共 442 条记录、13 列字段如下标识字段Name名称、ScientificName学名、Category类别、Order目、Family科、Genus属保护状态ConservationStatus如LC无危、VU易危、NT近危数值字段MinLength/MaxLength体长 cm、MinBodyMass/MaxBodyMass体重 g、MinWingspan/MaxWingspan翼展 cm例如本作业主角雪雁的完整记录为NameCategoryOrderFamilyGenusConservationStatusMinLengthMaxLengthMinBodyMassMaxBodyMassMinWingspanMaxWingspanSnow gooseDucks/Geese/WaterfowlAnseriformesAnatidaeAnserLC647920504050135165提示课程主笔记 notebook.ipynb 已为你准备好可运行的骨架环境Python 3.7 pandas matplotlib。2.2 加载数据在 notebook 中新建单元格读取数据并预览import pandas as pd import matplotlib.pyplot as plt birds pd.read_csv(../../data/birds.csv) # 从课程目录出发的相对路径 birds.head()输出为文本与数字的混合表与上方字段说明一一对应。注意课程目录09-visualization-quantities/下的 notebook 需用../../data/birds.csv而位于仓库根的 notebook 则用data/birds.csv——解决方案文件 solution/notebook.ipynb 中即使用../../../data/birds.csv因其位于三层子目录下。路径层级随 notebook 所在目录变化务必按实际位置调整。三、折线图一眼发现翼展异常值3.1 朴素折线图先用折线图观察所有鸟类的最大翼展wingspan birds[MaxWingspan] wingspan.plot()观察结果图中至少存在一个明显的异常点——某只鸟的最大翼展高达 2300 cm即 23 米这显然是数据录入错误很可能多打了一个 0明尼苏达州显然没有翼龙出没。3.2 加标签定位异常值将 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()即使把标签旋转 45°300 多个名称依然难以辨认。更好的策略是只标注异常值其余点不标名。改用散点图腾出标注空间并用循环逐一绘制、按条件标注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) # bo蓝色实心圆点 if birds[MaxWingspan][i] 500: # 仅给翼展500的异常点加标签 plt.text(x, y * (1 - 0.05), birds[Name][i], fontsize12) plt.show()这段代码的要点tick_params(axisboth, whichboth, labelbottomFalse, bottomFalse)隐藏底部刻度标签与刻度线plt.plot(x, y, bo)用蓝色b小圆点o绘制散点条件MaxWingspan 500筛选出异常值y * (1 - 0.05)让标签在 y 方向略微下移避免遮挡数据点。图翼展异常值标注图——秃鹰与草原隼的翼展被显著高亮。四、数据过滤剔除异常值还原真实分布结合数据核对见 data/birds.csv异常来自两条记录Bald eagle秃鹰MinWingspan1800, MaxWingspan2300显然比真实值多打一个 0真实约 180–230 cmPrairie falcon草原隼MinWingspan1100, MaxWingspan1100同样多打一个 0。剔除这两条记录后重绘散点图plt.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()图剔除秃鹰与草原隼两条异常记录后的翼展分布数据更连贯可读。延伸建议也可以不删除记录而是直接在 dataframe 中修正这两处笔误把 2300 改回 230、1100 改回 110用pd.to_numeric确保列类型正确后再绘图。数据干净之后就可以围绕数量提出并回答更有趣的问题例如数据集里一共有多少种鸟类类别各类数量如何有多少鸟处于灭绝、濒危、稀有或常见状态林奈分类体系下各属、各目的数量分布如何这正是条形图大显身手的场景。五、条形图类别计数与分组对比5.1 朴素分组条形图不可读的教训课程笔记首先演示了一个反面教材birds.plot(xCategory, kindbar, stackedTrue, titleBirds of Minnesota)这张图几乎不可读——因为未分组的原始数据堆积了太多条目。教训条形图必须先选中要展示的分组数据再交给 Matplotlib 绘制。这正是用 Pandas 管理数据、用 Matplotlib 绘图的分工思想课程笔记原话见 README.md 第 149 行附近。5.2 按类别计数的横向条形图用value_counts统计每个类别下的鸟种数量并调整画布为竖向长条以容纳所有类别category_count birds.value_counts(birds[Category].values, sortTrue) plt.rcParams[figure.figsize] [6, 12] category_count.plot.barh()图按类别计数的横向条形图——Ducks/Geese/Waterfowl 数量最多。一眼即可看出本地区数量最多的鸟类类别是Ducks/Geese/Waterfowl鸭/鹅/水禽。明尼苏达州号称万湖之州Land of 10,000 Lakes这一结果完全合乎常理也验证了数据质量。建议继续尝试其他计数维度如ConservationStatus、Order看看是否有意外发现。5.3 基于类别的体长对比条形图创建新坐标轴按类别对比最大体长maxlength birds[MaxLength] plt.barh(ybirds[Category], widthmaxlength) plt.rcParams[figure.figsize] [6, 12] plt.show()结果符合生物学常识蜂鸟Hummingbirds体长最小鹈鹕Pelicans与鹅Geese体长最大。数据符合逻辑恰恰说明可视化在验证直觉上的价值。5.4 叠加双序列最小/最大体长的区间可视化更有趣的做法是把最小体长与最大体长叠加在同一张横向条形图上展示每个类别的体长区间minLength birds[MinLength] maxLength birds[MaxLength] category birds[Category] plt.barh(category, maxLength) plt.barh(category, minLength) plt.show()图叠加 MinLength 与 MaxLength 的横向条形图直观展示每类鸟的体长区间。从图中可以安全地得出结论鸟越大其体长区间Min–Max 之差通常也越大。叠加绘制是条形图的高级用法能让单一图表承载两个数据维度。六、示例进阶围绕雪雁Snow Goose完成作业回到作业本身以下给出一个可直接运行的进阶示例——用三种图表围绕雪雁讲一个数据故事思路对齐 solution/notebook.ipynb 的分步结构# 1) 折线图在同属 Anser 的鸟类中对比最大翼展定位雪雁的体型位置 geese birds[birds[Genus] Anser] plt.title(Max Wingspan of Anser Geese (CM)) plt.ylabel(Wingspan (CM)) plt.plot(geese[Name], geese[MaxWingspan], o-) plt.xticks(rotation15) plt.show() # 2) 散点图体重与翼展的关系标注雪雁 plt.title(Body Mass vs Wingspan of Waterfowl) plt.xlabel(MaxBodyMass (g)) plt.ylabel(MaxWingspan (CM)) for i in range(len(birds)): x birds[MaxBodyMass][i] y birds[MaxWingspan][i] plt.plot(x, y, bo) if birds[Name][i] Snow goose: plt.text(x, y, Snow goose, fontsize12) plt.show() # 3) 条形图将雪雁与同类别中其他代表性鸟类的最小/最大体长叠加对比 snow birds[birds[Name] Snow goose] subset birds[birds[Category] Ducks/Geese/Waterfowl] plt.figure(figsize(8, 10)) plt.barh(subset[Name], subset[MaxLength], colororange, labelMaxLength) plt.barh(subset[Name], subset[MinLength], colorsteelblue, labelMinLength) plt.xlabel(Length (CM)) plt.legend() plt.show()对照评分表自检每张图前用 Markdown 单元格写出发现了什么注释 ✓三张图串联出雪雁在雁属中的翼展地位 → 体重与翼展的正相关 → 同类别体长区间的完整故事线叙事 ✓配色、图例与标题统一美观 ✓即可满足卓越档要求。七、评分标准与提交要点检查项达标要求图表种类至少覆盖折线图、散点图、条形图三种且每种图服务于一个明确的叙事节点数据操作体现异常值发现 → 过滤/修正 → 分组聚合 → 绘制的完整链路注释与叙事每个图表前后用 Markdown 说明数据事实与结论形成连贯故事代码质量使用 Pandas 完成数据选取与变换、Matplotlib 负责绘图命名清晰完成 notebook 后可对照本课配套的 Quiz 16/17 检验理解并参考 Review Self Study 建议尝试用 Plotly 等其他库重做本作业以拓展视野。八、小结本作业的关键收获可概括为三点图表选择服务于数据故事——趋势用折线、分布与关系用散点、分组对比用条形本课笔记给出的速查规则见 README.md先清洗后可视化——tick_params隐藏刻度、循环条件标注、value_counts分组计数、barh叠加双序列这些都是从数据中发现真相的必备技巧可视化是提出好问题的工具——从翼展为什么有 23 米到万湖之州为何水禽最多每一步追问都能让 notebook 的故事更加饱满。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价