Data-Science-For-Beginners 第09课实战:用 Matplotlib 与 pandas 绘制鸟类数据集的数量可视化(折线图、散点图与条形图)

发布时间:2026/9/10 13:41:17
Data-Science-For-Beginners 第09课实战:用 Matplotlib 与 pandas 绘制鸟类数据集的数量可视化(折线图、散点图与条形图) Data-Science-For-Beginners 第09课实战用 Matplotlib 与 pandas 绘制鸟类数据集的数量可视化折线图、散点图与条形图【免费下载链接】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》英文原版孟加拉语译本带你用 Matplotlib 与 pandas 基于仓库自带的明尼苏达鸟类数据集 data/birds.csv完整走一遍“加载数据 → 折线图发现异常 → 标注与过滤 → 分组统计 → 对比与叠加条形图”的数量可视化全流程。读完后你将掌握 line chart、scatterplot、bar chart 三类最常用于表达“数量”概念的图表的绘制方法、典型代码模式以及一套“从图表中发现数据问题”的实用工作流。选图原则让图表匹配数据的故事本课的起点是一个关键习惯先判断要讲什么故事再选什么图。课程给出的选型参考如下想要表达的内容推荐图表分析时间趋势line折线图比较数值bar / column / pie / scatterplot展示部分与整体的关系pie展示数据分布scatterplot / bar展示趋势line / column展示数值间关系line / scatterplot / bubbleMatplotlib 本身能画从简单到复杂的各种图表但本课只聚焦最适合“量化quantity”主题的三种折线图、散点图、条形图。如果你手上有一个数据集需要知道某个项目“到底有多少”第一件事就是检查它的数值。Matplotlib 官网还提供官方的 cheat sheet速查表 PDF适合放在手边随时查阅。加载与检查鸟类数据集课程的练习入口是课程目录下的笔记本 notebook.ipynb官方答案参考 solution/notebook.ipynb。数据存放在仓库根目录的data/文件夹中在笔记本中新增一个 cell 并运行import pandas as pd import matplotlib.pyplot as plt birds pd.read_csv(../../data/birds.csv) birds.head()注意路径细节../../data/birds.csv是相对于笔记本所在目录3-Data-Visualization/09-visualization-quantities/上溯两级才到达仓库根目录这也是官方答案笔记本中使用../../../data/birds.csv的原因——它位于多一级的solution/子目录里。若你在仓库根目录运行脚本路径应改为data/birds.csv。birds.csv共有442 条鸟类记录是文本与数值的混合体前 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数值列的单位约定为MinLength/MaxLength体长、MinWingspan/MaxWingspan翼展以厘米计MinBodyMass/MaxBodyMass体重以克计。用折线图观察翼展第一眼发现异常先从一个基础的折线图开始假设你只想快速查看这些鸟的最大翼展MaxWingspanwingspan birds[MaxWingspan] wingspan.plot()立刻能注意到什么至少有一个异常值——那个翼展巨大。2300 厘米意味着 23 米的翼展明尼苏达有大翅翼龙Pterodactyl在散步吗当然不是。你完全可以在 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()即便把标签旋转 45 度442 只鸟的标签依然密到无法阅读。换一个策略只标注异常值并把标签画进图表内部。改用散点图可以为标注腾出更多空间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))遍历全部 442 条记录birds[Name][i]、birds[MaxWingspan][i]用行索引取逐值plt.plot(x, y, bo)bo是 Matplotlib 的格式字符串——蓝色blue圆点o标记形成散点if birds[MaxWingspan][i] 500只给翼展超过 500 cm 的鸟做条件筛选plt.text(x, y * (1 - 0.05), birds[Name][i], fontsize12)在点的位置上偏移 5%y * (1 - 0.05)后写入鸟类名称作为文本标签。运行结果会直接暴露两个异常Bald eagle2300 cm和Prairie falcon1100 cm。对照原始数据可以确认这是典型的“多打了一个 0”的笔误Bald eagle,Haliaeetus leucocephalus,Hawks/Eagles,...,1800,2300 Prairie falcon,Falco mexicanus,Falcons /Caracaras,...,1100,1100现实中不可能见到翼展 25 米2300 cm的白头海雕也不可能见到 11 米1100 cm的草原游隼。过滤异常值让数据回归合理范围接下来创建一个“剔除这两个异常”的新绘图版本注意这里只是绘图时跳过并没有修改原始 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()过滤掉异常值后数据立刻变得内聚、可读绝大多数鸟的翼展落在 30~300 cm 之间。至此你在翼展维度上拿到了一个更干净的数据集可以继续探索。课程提示后续不依赖翼展值的练习中你可以选择过滤掉这两只异常鸟、修正它们的翼展笔误、或者原样保留——三种处理方式都可以。折线图和散点图适合展示“数值及其分布”但数量可视化更常见的问题是分组计数例如这里有多少类鸟各类分别多少种多少种鸟已灭绝、濒危、稀有或常见按林奈分类法各个“属genus”和“目order”各有多少实际清点 data/birds.csv 可以印证这些问题的答案量级数据集中共有 54 个CategoryConservationStatus的分布为 LC无危402 种、NT 27 种、VU 10 种、EN 2 种、CR 1 种、EX 1 种——绝大多数鸟类处于无危状态只有极少数面临灭绝风险。条形图从不可读到分组统计条形图bar chart在需要展示数据分组时最实用。课程建议先尝试直接从原始数据画一个堆叠条形图birds.plot(xCategory, kindbar, stackedTrue, titleBirds of Minnesota)这张图完全不可读——因为未分组的原始数据太多。正确的做法是先只选出要画的数据。这里用 pandas 完成统计、再交给 Matplotlib 完成绘制分工非常清晰category_count birds.value_counts(birds[Category].values, sortTrue) plt.rcParams[figure.figsize] [6, 12] category_count.plot.barh()逐行拆解birds.value_counts(birds[Category].values, sortTrue)value_counts作为类方法接收一维数组birds[Category].values对每个类别值计数并返回一个 SeriessortTrue使其按键值降序排列配合plot.barh()直接得到“从多到少”的横向条形图plt.rcParams[figure.figsize] [6, 12]类别多达 54 个把画布调成竖向的 6×12 英寸否则条形会挤成一团category_count.plot.barh()pandas Series 的barh快捷方法画横向条形图。一眼就能看出数量最多的类别是Ducks/Geese/Waterfowl45 种其后依次是 New World warblers41 种、Sandpipers/Allies34 种、Gulls/Terns/Skimmers28 种。明尼苏达素有“万湖之州”之称水禽最多也就不奇怪了。课程鼓励你继续试其他维度的计数比如按Order、Genus或ConservationStatus看看还有什么结果让你意外。对比不同分组的度量横向条形图有了分组计数的思路可以进一步做分组度量的对比。课程示范按类别对比MaxLengthmaxlength birds[MaxLength] plt.barh(ybirds[Category], widthmaxlength) plt.rcParams[figure.figsize] [6, 12] plt.show()这里没有任何反直觉的结果蜂鸟的MaxLength远小于鹈鹕和大雁——当数据说得通、合乎逻辑时说明你的图和数据都是对的。叠加度量把最小值与最大值放进同一张图用**数据叠加superimpose**可以让条形图表达更丰富的信息把MinLength和MaxLength画在同一组类别上minLength birds[MinLength] maxLength birds[MaxLength] category birds[Category] plt.barh(category, maxLength) plt.barh(category, minLength) plt.show()两次plt.barh调用共享同一组category坐标先画最大值条形再叠加最小值条形于是每个类别上都呈现出该组鸟“最小—最大体长”的区间。用原始数据可以快速验证这个结论蜂鸟Hummingbirds的体长区间只有约 7~14 cm如 Ruby-throated hummingbird 为 7~9 cm而美洲白鹈鹕American white pelican可达 130~180 cm。可以稳妥地得出鸟的体型越大其体长的极差通常也越大。挑战、自研与作业课程的挑战Challenge这个鸟类数据集为特定生态系统中的各类鸟提供了丰富信息。去互联网上找找其他鸟类数据集练习围绕它们构建图表发现你自己此前不知道的事实。课后自研方向本系列课程到此为止只覆盖了 Matplotlib还可以调研其他可视化库例如 Plotly 能提供什么交互能力本课不展开。配套作业见 assignment.md用本课的折线图、散点图、条形图三种图型深入挖掘某个给定鸟类例如 Snow Geese的事实在笔记本中用三张图“讲一个故事”。评分标准要求三要素齐备——良好的注释annotations、扎实的故事线storytelling、美观的图形attractive graphs缺其一即降档。仓库同时提供了 solution/notebook.ipynb 作为标准实现参考其中的代码 cell 与本文展示的每一步一一对应。小结选型先行趋势用折线、比较用条形/散点、整体-部分用饼图选图前先想清楚要讲的故事异常值排查工作流先画最朴素的图 → 加坐标轴标签定位 → 条件化plt.text()只标注离群点 → 在绘图循环中过滤剔除全程不离开图表统计交给 pandas绘制交给 Matplotlibvalue_counts负责分组计数与排序rcParams[figure.figsize]负责适配类别数量barh负责横向呈现叠加是条形图进阶同一坐标轴上两次barh即可表达区间最小/最大信息所有示例代码均可在 notebook.ipynb 中逐 cell 复现对照 solution/notebook.ipynb 自查数据文件为 data/birds.csv442 条记录。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询