FEATURED · 精选文章

Data-Science-For-Beginners 第 9 课:用 Matplotlib 可视化数量(明尼苏达鸟类数据集实战)

发布时间 / 2026/9/10 22:04:44
来源 / 创域科博编辑部
栏目 / 资讯中心
Data-Science-For-Beginners 第 9 课:用 Matplotlib 可视化数量(明尼苏达鸟类数据集实战) Data-Science-For-Beginners 第 9 课用 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 课程中数据可视化模块的第一课围绕数量quantity这一核心概念讲解如何使用 Python 生态中最常用的绘图库 Matplotlib从折线图、散点图到条形图逐步学会把一张 443 行的鸟类观测表转化为可读、可解释的图表。读完本课你将掌握图表选型的基本准则、离群点outlier的识别与过滤方法以及用 Pandas 整理数据、用 Matplotlib 呈现数据的完整工作流。图表选型让图表结构匹配数据的故事在动手写代码之前先回答一个问题面对一个数据集该选哪种图表Matplotlib 提供了极为丰富的可视化类型但针对数量这一主题本课聚焦三类最合适的图表——折线图line chart、散点图scatterplot与条形图bar chart。选择的原则是让图表适配数据的结构和你想要讲述的故事分析随时间变化的趋势折线图比较数值大小条形图、柱状图、饼图、散点图展示部分与整体的关系饼图展示数据分布散点图、条形图展示趋势折线图、柱状图展示数值之间的关系折线图、散点图、气泡图当拿到一个数据集、需要弄清某种条目到底有多少时第一步永远是先检查它的取值——即本课的起点从一张干净的鸟类数据表出发观察明尼苏达州的本地野生动物。加载数据Pandas 读取 birds.csv本课的数据文件保存在仓库根目录的 data/birds.csv 中。在课程文件夹根目录的 notebook.ipynb 中新建一个单元格执行以下代码import pandas as pd import matplotlib.pyplot as plt birds pd.read_csv(../../data/birds.csv) birds.head()提示数据存储在仓库根目录的/data文件夹中如果从课程子目录运行需要按相对路径向上回溯。这份数据是文本与数字的混合体birds.head()输出前 5 行如下NameScientificNameCategoryOrderFamilyGenusConservationStatusMinLengthMaxLengthMinBodyMassMaxBodyMassMinWingspanMaxWingspan0Black-bellied whistling-duckDendrocygna autumnalisDucks/Geese/WaterfowlAnseriformesAnatidaeDendrocygnaLC4756652102076941Fulvous whistling-duckDendrocygna bicolorDucks/Geese/WaterfowlAnseriformesAnatidaeDendrocygnaLC4553712105085932Snow gooseAnser caerulescensDucks/Geese/WaterfowlAnseriformesAnatidaeAnserLC6479205040501351653Rosss gooseAnser rossiiDucks/Geese/WaterfowlAnseriformesAnatidaeAnserLC57.364106615671131164Greater white-fronted gooseAnser albifronsDucks/Geese/WaterfowlAnseriformesAnatidaeAnserLC648119303310130165从实际数据看data/birds.csv 共包含 443 行、13 列6 列文本信息名称、学名、类别、目、科、属、保护状态以及 6 列数值信息最小/最大体长、最小/最大体重、最小/最大翼展数值列在 Pandas 中被推断为float64类型个别行存在小数如 Rosss goose 的 MinLength 为 57.3说明这是一份已做过基础清洗的数据集。用折线图观察翼展发现离群点先画出这些鸟的最大翼展看个全貌wingspan birds[MaxWingspan] wingspan.plot()你能立刻注意到什么图中至少存在一个明显的离群点——2300 厘米的翼展相当于 23 米明尼苏达州难道有翼手龙在盘旋虽然你也可以在 Excel 里排序找出这类疑似录入错误的异常值但本课的做法是直接在绘图的流程中解决问题。给 x 轴加上标签首先给 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 度443 个名称依然难以辨认。换一种策略只标注离群点并把标签放进图表内部。用散点图可以给标注留出更多空间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()这段代码做了什么首先用tick_params隐藏底部刻度标签然后遍历鸟类数据集用bo以蓝色小圆点逐点绘图凡是最大翼展超过 500 的鸟就用plt.text把名字标在点的旁边。为了让标签不与数据点重叠标签在 y 轴方向上做了轻微偏移y * (1 - 0.05)即以鸟名作为标签文字。你发现了什么两种嫌疑鸟浮出水面白头海雕Bald eagle与草原隼Prairie falcon。对照 data/birds.csv 第 209 行与第 247 行可以看到Bald eagle 的 MaxWingspan 为 2300.0MinWingspan 也异常地高达 1800.0Prairie falcon 为 1100.0——它们极有可能被多录了一个0真实值应为 230 与 110 量级。你大概率不会在野外遇到翼展 25 米的白头海雕。过滤离群点让数据回归合理把这两个离群点排除后重新绘制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()过滤掉离群点后数据变得连贯且易于理解。这一步体现了真实数据分析中的常见动作在绘图过程中反向发现数据质量问题再回到数据层做清洗。现在数据集至少在翼展维度上干净了可以进一步挖掘这些鸟的更多信息。折线图与散点图能展示数据取值及其分布但接下来要思考的是数据集本身蕴含的数量问题数据集里有多少种鸟类类别各类别数量是多少有多少鸟处于灭绝、濒危、稀有或常见状态按照林奈分类法各属Genus、各目Order各有多少种探索条形图回答有多少的问题条形图适合展示数据的成组情况。先看看这个数据集中有哪些鸟类类别、按数量哪个类别最常见。在 notebook 中创建基础条形图。注意你可以选择过滤掉上一步发现的两只离群鸟也可以修正它们翼展中的录入错误或者干脆保留它们参与本小节练习——因为这些练习并不依赖翼展数值。如果想把所有原始数据画成条形图可以这样做birds.plot(xCategory, kindbar, stackedTrue, titleBirds of Minnesota)但这个条形图几乎不可读——未经分组的 443 行数据全部堆在一起。必须只选取你想绘制的数据例如按类别查看鸟的体长。先把数据过滤到只保留类别信息。注意这里的工作分工用 Pandas 管理数据然后交给 Matplotlib 负责绘图。由于类别很多可以把图表改为竖向条形图并调整画布高度以容纳全部数据category_count birds.value_counts(birds[Category].values, sortTrue) plt.rcParams[figure.figsize] [6, 12] category_count.plot.barh()这张横向条形图清晰地展示了每个类别下的鸟类数量。一眼就能看出本地区数量最多的鸟类属于鸭/鹅/水禽Ducks/Geese/Waterfowl类别——明尼苏达州号称万湖之地land of 10,000 lakes这并不令人意外。用实际数据验证data/birds.csv 中该类别有 45 种鸟位居第一其次是 New World warblers41 种与 Sandpipers/Allies34 种。你可以继续尝试对数据集做其他维度的计数统计看看有没有出乎意料的结果。数据比较创建新轴与叠加条形图你可以通过创建新的轴来尝试对分组数据做不同维度的比较。例如按类别比较鸟的最大体长MaxLengthmaxlength birds[MaxLength] plt.barh(ybirds[Category], widthmaxlength) plt.rcParams[figure.figsize] [6, 12] plt.show()这里没有任何意外与鹈鹕Pelicans或鹅Geese相比蜂鸟Hummingbirds的 MaxLength 最小。数据符合常识总是令人欣慰的。更有趣的条形图做法是叠加数据。把某一鸟类类别的最小体长与最大体长叠加在一起minLength birds[MinLength] maxLength birds[MaxLength] category birds[Category] plt.barh(category, maxLength) plt.barh(category, minLength) plt.show()在这张图中可以看到每个鸟类类别的最小体长与最大体长所构成的区间。可以放心地下结论给定这份数据鸟的体型越大其体长区间也越大。从 notebook 到完整流程参考实现本课提供了完整的参考实现 solution/notebook.ipynb它把上述全部步骤组织成了 20 个逻辑连贯的单元格加载数据与head()预览 → 基础折线图 → 带标签的翼展图 → 散点图标注离群点 → 过滤离群点重绘 → 类别条形图 → 类别计数横向条形图 → 按类别比较最大体长 → 叠加最小/最大体长。每个绘图步骤前都有 Markdown 说明单元格标注了这一步在做什么、为什么这样做非常适合作为你独立完成练习时的对照模板。注意其中读取数据的路径为../../../data/birds.csv相对 solution 子目录与课程根目录 notebook 中的../../data/birds.csv有所不同这是由 notebook 文件所在目录层级决定的。挑战换一个鸟类数据集讲故事这份鸟类数据集提供了关于特定生态系统内不同鸟类的丰富信息。建议你在网络上搜索其他面向鸟类的数据集练习围绕这些数据构建图表与图形去发现你之前没有意识到的有趣事实。本课的作业 assignment.md 正是要求你深入挖掘数据集例如创建一个 notebook用折线图、散点图与条形图三种图表把关于雪雁Snow Geese的各类有趣数据组织成一段完整的故事。评分标准包括notebook 是否有良好的标注、是否具备完整的故事叙述、图表是否美观。延伸学习走向更丰富的可视化生态本课是第一堂关于用 Matplotlib 可视化数量的课程。除此之外还有大量其他方式处理数据集并做可视化例如 Plotly——它不在本课程的覆盖范围内但值得自行研究它能提供什么能力交互式图表、图表联动等。无论选择哪个库本课沉淀下来的工作流——检查数据 → 选型 → 绘制 → 识别并处理离群点 → 分组聚合 → 叠加比较——都同样适用。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻