Data-Science-For-Beginners 第09课实战:用 Matplotlib 对鸟类数据集做数量可视化(折线图、散点图与柱状图)

发布时间:2026/9/14 7:38:44

Data-Science-For-Beginners 第09课实战:用 Matplotlib 对鸟类数据集做数量可视化(折线图、散点图与柱状图) Data-Science-For-Beginners 第09课实战:用 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 课程第 09 课《Visualizing Quantities / Määrien visualisointi》(仓库中提供英文原版与芬兰语翻译版)编写,围绕数量(quantity)这一可视化主题,完整讲解如何用 Pandas 加载数据、用 Matplotlib 绘制折线图、散点图与柱状图,并结合仓库中真实的data/birds.csv鸟类数据集演示从发现异常值到过滤清洗、再到分组统计对比的完整工作流。读完本文,你可以直接打开课程 notebook 复现全部图表,并掌握按数据结构选图的方法论与可运行的绘图代码。课程定位与配套资源本课程的第 3 部分(3-Data-Visualization)专门讲解数据可视化,第 09 课是该部分的开篇,主题是数量的可视化。课程说明(见 translations/fi/3-Data-Visualization/09-visualization-quantities/README.md,英文原版见 3-Data-Visualization/09-visualization-quantities/README.md)指出:本课时将探索如何使用 Python 众多可视化库之一,围绕数量这一概念创建有趣的可视化;通过一份已清洗过的明尼苏达州鸟类数据集,读者可以学到很多关于当地野生动物的有趣事实。仓库内与本课时直接配套的资源和路径如下:课程讲义:3-Data-Visualization/09-visualization-quantities/README.md(英文)与translations/fi/3-Data-Visualization/09-visualization-quantities/README.md(芬兰语);练习 notebook:notebook.ipynb(位于课时文件夹根目录,供学习者边读边补写代码);参考解答:solution/notebook.ipynb(共 21 个 cell,markdown 讲解与代码 cell 一一对应,本文所有代码块均可在其中找到);作业说明:translations/fi/3-Data-Visualization/09-visualization-quantities/assignment.md;数据集:data/birds.csv(位于仓库根目录/data文件夹)。注意:数据统一存放在仓库根目录的/data文件夹下。讲义中的pd.read_csv(../../data/birds.csv)是相对于课时文件夹的路径;若在仓库根目录运行,应改为pd.read_csv(data/birds.csv)。数据集结构:文本与数值混合的鸟类数据data/birds.csv是一份包含 442 条记录(文件共 443 行,含表头)的 CSV 文件。用 Pandas 读入并查看前 5 行:import pandas as pd import matplotlib.pyplot as plt birds pd.read_csv(../../data/birds.csv) birds.head()这份数据是文本与数值的混合,共 13 列(列名以 CSV 表头为准):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其中文本列包括物种名、拉丁学名、类别(Category)、目(Order)、科(Family)、属(Genus)与保护状态(ConservationStatus,采用 IUCN 缩写,如 LC 表示无危);数值列是长度(cm)、体重(g)、翼展(cm)的最小/最大值。这种文本 数值的混合结构正好覆盖本课要练习的三类图表:数值列适合折线图与散点图,分类列适合柱状图。按数据结构选图的决策清单讲义强调:选择最能匹配你的数据结构与你想讲述的故事的图表。以下是原文给出的完整对照清单:分析时间趋势:折线图(line);比较数值:柱状图(bar)、条形图(column)、饼图(pie)、散点图(scatterplot);展示部分与整体的关系:饼图(pie);展示数据分布:散点图(scatterplot)、柱状图(bar);展示趋势:折线图(line)、条形图(column);展示数值之间的关系:折线图、散点图、气泡图(bubble)。如果手上有一个数据集,需要弄清楚其中某个项目有多少,首先要做的任务就是检查它的取值。此外,讲义提示:Matplotlib 官方文档站提供质量很高的 cheat sheets(速查手册,为 PDF 格式),适合绘图时随手查阅。观察翼展:用折线图发现异常值第一步:基础折线图先对数值列做一张最基本的折线图,观察这些鸟类最大翼展(MaxWingspan)的总体情况:wingspan birds[MaxWingspan] wingspan.plot()这一步对应参考解答 notebook 中用非常基础的折线图可视化鸟类翼展的 cell,其中还额外设置了标题与坐标轴标签:plt.title(Max Wingspan in Centimeters) plt.ylabel(Wingspan (CM)) plt.xlabel(Birds) wingspan birds.MaxWingspan wingspan.plot()图中立刻可以看到至少一个异常值(outlier)——翼展大得惊人: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 度,标签数量仍然太多而无法阅读。讲义给出的对策是:只标注异常值,并把标签放进图表内部,同时改用散点图(scatter chart)为标签腾出空间: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(axisboth, whichboth, labelbottomFalse, bottomFalse):隐藏底部的刻度与标签,给图内文字标签腾出空间;for i in range(len(birds)):遍历鸟类数据集的每一行;plt.plot(x, y, bo):用小号蓝色圆点(b blue,o 圆点标记)绘制散点,替代连线的折线;if birds[MaxWingspan][i] 500:对最大翼展超过 500 cm 的鸟(正常鸟类基本不可能,天然充当异常值阈值)做条件判断;plt.text(x, y * (1 - 0.05), birds[Name][i], fontsize12):在点旁显示该鸟的名字,并用y * (1 - 0.05)将文字沿 y 轴下移 5%,避免与点本身重叠。过滤异常值:两个疑似笔误的物种被标注出来的正是秃鹰(Bald eagle)和草原隼(Prairie falcon)。虽然它们很可能是大型鸟类,但最大翼展数值显然被多打了一个0。对照仓库数据可以确证这一判断:data/birds.csv 第 211 行:Bald eagle,Haliaeetus leucocephalus,...,3000,6300,1800,2300—— MaxWingspan 为 2300(23 米);data/birds.csv 第 249 行:Prairie falcon,Falco mexicanus,...,500,970,1100,1100—— MaxWingspan 为 1100(11 米)。去掉多余的0(230、110 cm)后与两种鸟的真实体型相符。创建一份剔除这两个异常值后的新视图: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()过滤掉异常值之后,数据变得更有内聚性、也更容易理解。此时至少在翼展维度上得到了一份更干净的数据集,可以继续挖掘这些鸟类的其他信息。讲义同时提示:折线图与散点图能展示数据取值及其分布,但接下来要思考的是这份数据集本身蕴含的数量信息,例如:存在多少鸟类类别,各自数量是多少?有多少鸟类已经灭绝、濒危、稀有或常见?按林奈(Linnaeus)术语,各属(genus)和各目(order)分别有多少?探索柱状图:统计每类鸟的数量柱状图(bar chart)在需要展示数据分组时非常实用。下面探索该数据集中存在的鸟类类别,看哪一类数量最多。讲义提示:你可以选择过滤掉上一节找到的两个异常值鸟类,也可以修正它们的翼展笔误,或者干脆保留它们,因为下面的练习并不依赖翼展数值。原始数据的堆叠柱状图:可读性差的反例直接从原始数据创建柱状图:birds.plot(xCategory, kindbar, stackedTrue, titleBirds of Minnesota)这张柱状图难以阅读,因为其中包含太多未经分组的数据。你需要只选择想绘制的数据——先按类别统计数量,再绘图。注意这里体现的分工:Pandas 负责数据管理(分组、计数、排序),Matplotlib 负责画图。先计数,再画横向柱状图类别数量较多,可以把图表竖着放(横向条形图 barh),并调整图高以容纳全部数据:category_count birds.value_counts(birds[Category].values, sortTrue) plt.rcParams[figure.figsize] [6, 12] category_count.plot.barh()其中:value_counts(..., sortTrue):按出现次数降序统计,让数量最多的类别排在最上面;plt.rcParams[figure.figsize] [6, 12]:把图形尺寸设为 6×12 英寸(宽高),给 20 余个类别标签留出纵向空间;plot.barh():以 Series 为数据的横向条形图,类别名自然成为可横读的 y 轴标签。这张柱状图很好地展示了每类鸟的数量。一眼就能看出,该地区数量最多的鸟属于 Ducks/Geese/Waterfowl(鸭/鹅/水禽)类别。明尼苏达是万湖之州,这并不令人意外!讲义建议:对这份数据集再多试几种统计口径,看是否有让你意外的结果(例如按ConservationStatus、Genus、Order分组计数)。对比数据:用新坐标轴做分组比较通过创建新坐标轴,可以尝试不同的分组数据对比。按类别比较最大长度尝试按类别比较鸟类 MaxLength(最大长度):maxlength birds[MaxLength] plt.barh(ybirds[Category], widthmaxlength) plt.rcParams[figure.figsize] [6, 12] plt.show()这里没有任何令人意外的地方:与鹈鹕(Pelican)或大雁(Goose)相比,蜂鸟(hummingbird)的 MaxLength 最小。数据符合逻辑,是一件好事!叠加绘制最小与最大长度更有趣的对比可以通过在同一坐标系中叠加数据来实现。把每个鸟类类别的最小长度(MinLength)与最大长度(MaxLength)叠在一起画:minLength birds[MinLength] maxLength birds[MaxLength] category birds[Category] plt.barh(category, maxLength) plt.barh(category, minLength) plt.show()在这张图中,可以看到每个鸟类类别下最小长度与最大长度的范围。基于这份数据可以比较有把握地说:鸟越大,其长度范围(极差)也越大。很有趣!从源码结构看,这正是plt.barh可重复调用的特性:两次调用绘制在同一个 figure/axes 上,后画的短条(MinLength)覆盖在同组类别上,从而直观呈现每个类别内部的最大跨度。挑战、作业与延伸阅读课程挑战这份鸟类数据集提供了关于特定生态系统中不同鸟类的丰富信息。讲义鼓励学习者自行寻找其他鸟类相关数据集,练习围绕这些鸟类构建图表,发现此前不知道的事实。仓库中还可以尝试用data/birds.csv之外的数据集,例如 data/diabetes.tsv、data/honey.csv,把本课折线图 散点图 柱状图的组合方法迁移过去。作业:折线、散点与柱状课后作业见 translations/fi/3-Data-Visualization/09-visualization-quantities/assignment.md(英文原版 3-Data-Visualization/09-visualization-quantities/assignment.md):要求:本课练习了用折线图、散点图和柱状图展示数据集的有趣事实。作业要求深入数据,找出关于某个特定鸟类的某一事实。例如,创建一个 notebook,可视化你能找到的关于雪雁(Snow goose)的一切有趣数据,并使用上述三种图表类型在 notebook 中讲述这个故事;评分标准:优秀 notebook 包含良好的注释、有力的叙事和吸引人的图表;合格 缺少其中一项;需改进 缺少其中两项。复习与自学课时配套的前置/课后测验(Pre-lecture / Post-lecture quiz)链接见课时 README(分别指向测验平台 quiz/16 与 quiz/17,按 translations/fi/3-Data-Visualization/09-visualization-quantities/README.md 中的说明访问)。本课时介绍了如何使用 Matplotlib 可视化数量。讲义还建议调研其他用于可视化的数据集处理方式,其中 Plotly 是一个本课未覆盖的库,值得自行了解它能提供什么(交互式图表是其相对 Matplotlib 的突出特点)。小结:本课掌握的技术要点数据入口:用pd.read_csv从仓库根目录data/读取 CSV,head()快速检查文本 数值混合结构;折线图初探:wingspan.plot()一行出图,直接暴露异常峰值;图表内定位异常值:plt.xticks(rotation45)加标签 → 标签过载 → 改用散点 plt.text条件标注(阈值 500),配合plt.tick_params隐藏坐标轴刻度;过滤清洗:用not in [Bald eagle, Prairie falcon]条件剔除笔误数据,得到内聚数据集,并与 data/birds.csv 第 211、249 行交叉验证;分组数量统计:value_counts(..., sortTrue)plt.rcParams[figure.figsize]plot.barh(),让 Pandas 管数据、Matplotlib 管画图;分组对比:先barh(y类别, widthMaxLength)单指标对比,再两次plt.barh叠加 Min/Max 呈现范围。全部代码的完整可运行版本见参考解答 3-Data-Visualization/09-visualization-quantities/solution/notebook.ipynb,练习入口为 3-Data-Visualization/09-visualization-quantities/notebook.ipynb。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/14 7:38:44

IP6558车充SOC:45W PD3.1升降压方案实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 7:38:44

基于OpenCV的车道线检测算法与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 7:33:44

行为树黑板数据零拷贝优化:从性能瓶颈到压测实战

1. 行为树的黑板,怎么就成了性能瓶颈1.1 黑板是什么,为什么树节点非要它不可很多刚接触 BehaviorTree(行为树)的兄弟都有个困惑:既然树里的节点在互相调度,为什么数据非得绕一道“黑板(Blackboa…

2026/9/14 8:23:47

RPCS3 配置调优指南:按硬件分三档参数,稳定 60 帧

RPCS3 配置调优指南:按硬件分三档参数,稳定 60 帧 【免费下载链接】keep The open-source AIOps and alert management platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep 《战神》塞进 RPCS3,转两下就掉到十八帧&…

2026/9/14 8:23:47

使用 Rube MCP 自动化 Apitemplate IO:Composio 集成实战指南

使用 Rube MCP 自动化 Apitemplate IO:Composio 集成实战指南 【免费下载链接】awesome-codex-skills A curated list of practical Codex skills for automating workflows across the Codex CLI and API. 项目地址: https://gitcode.com/GitHub_Trending/aw/awe…

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/13 11:18:28

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码