ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Data Science For Beginners:用 Matplotlib 可视化“数量“——从鸟类数据出发的折线图、散点图与柱状图实战

Data Science For Beginners:用 Matplotlib 可视化“数量“——从鸟类数据出发的折线图、散点图与柱状图实战 Data Science For Beginners用 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 中《Visualizing Quantities可视化数量》一课展开基于明尼苏达州鸟类数据集 data/birds.csv系统讲解如何使用 Python 生态中的 Matplotlib 完成三类最常用的数量型图表——折线图、散点图与柱状图。读完本文你将掌握从加载数据、绘制基础图表、标记离群值、按类别聚合到叠加多组数据进行比较的完整可视化工作流并理解如何让图表真正服务于数据想表达的故事。一、课程与数据背景本课属于 3-Data-Visualization 章节的第 09 课原文档位于 3-Data-Visualization/09-visualization-quantities/README.md仓库同时提供了西班牙语译本与完整的可运行 Notebooknotebook.ipynb练习版与 solution/notebook.ipynb带全部输出的参考答案。数据文件存放在仓库根目录的 data 文件夹下birds.csv记录了443 种鸟类在体长Length、体重BodyMass、翼展Wingspan三个维度上的最小值与最大值并附有学名、分类目Order、科Family、属Genus以及 IUCN 保护状态ConservationStatus等字段。从源码看参考答案中的加载语句为import pandas as pd import matplotlib.pyplot as plt birds pd.read_csv(../../../data/birds.csv) # 从 lesson 目录指向仓库根目录 birds.head()前 5 行数据同时与 solution/notebook.ipynb 的输出一致索引Name名称ScientificName学名Category类别Order目Family科Genus属ConservationStatusMinLengthMaxLengthMinBodyMassMaxBodyMassMinWingspanMaxWingspan0Black-bellied whistling-duckDendrocygna autumnalisDucks/Geese/WaterfowlAnseriformesAnatidaeDendrocygnaLC4756652102076941Fulvous whistling-duckDendrocygna bicolorDucks/Geese/WaterfowlAnseriformesAnatidaeDendrocygnaLC4553712105085932Snow gooseAnser caerulescensDucks/Geese/WaterfowlAnseriformesAnatidaeAnserLC6479205040501351653Rosss gooseAnser rossiiAnseriformesAnatidaeAnserLC57.364106615671131164Greater white-fronted gooseAnser albifronsDucks/Geese/WaterfowlAnseriformesAnatidaeAnserLC648119303310130165注意加载后需要先确认数据能正确读取。若在 Windows 环境下遇到 BOM 导致的列名异常可使用pd.read_csv(data/birds.csv, encodingutf-8-sig)处理。二、用 Matplotlib 观察翼展先选对图表类型Matplotlib 是创建从简单到复杂各类图表与图形的优秀库。用这类库绘图的一般流程包括确定要分析的 DataFrame 子集 → 对数据进行必要变换 → 把值赋给 x 轴与 y 轴 → 决定展示哪种图表 → 渲染显示。虽然 Matplotlib 提供了大量可视化类型本课聚焦于最适合表达数量的三类折线图line分析随时间变化的趋势散点图scatterplot展示数据分布、显示值之间的关系柱状图bar / column比较数值、展示分组数据。原文档给出了按数据结构和想讲的故事选图的决策清单整理如下分析目标推荐图表分析随时间变化的趋势折线图比较数值柱状图、列图、饼图、散点图展示部分与整体的关系饼图展示数据分布散点图、柱状图展示趋势折线图、列图展示数值之间的关系折线图、散点图、气泡图面对一个数据集第一项任务往往是检查其数值弄清楚某种元素到底有多少。这正好是可视化发挥作用的起点。三、构建鸟类翼展的折线图3.1 基础折线图打开本课文件夹下的 notebook.ipynb新增一个单元格先绘制最基础的折线图来观察最大翼展wingspan birds[MaxWingspan] wingspan.plot()你能立刻注意到什么图中至少存在一个离群值outlier——这个翼展相当惊人2300 厘米相当于 23 米明尼苏达州难道有翼手龙出没我们得查一查。虽然也可以在 Excel 里做个快速排序找出这些疑似录入错误的离群值但本课要求坚持从图中发现问题的可视化工作流。3.2 为 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 种鸟类的名称依然多到无法辨认。于是需要换一种策略只标注离群值并把标签放进图内——散点图能为标注腾出更多空间。3.3 用散点图只标注离群值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 坐标被略微下调了 5%y * (1 - 0.05)。四、过滤数据清洗离群值离群值最终被确认是Bald eagle白头海雕与Prairie falcon草原隼——它们虽然确实是大型鸟类但更像是被错误地多打了一个 0。实测数据也印证了这一点见 data/birds.csvBald eagle 的 MaxWingspan 为 2300Prairie falcon 为 1100而其余鸟类的翼展量级均在 500 以内。想遇到一只翼展 25 米的白头海雕恐怕是不可能的。创建一个剔除这两个离群值的新 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()过滤掉离群值后数据变得更加连贯、可读在拥有一个至少在翼展维度上更干净的数据集后可以进一步探索这些鸟类。折线图和散点图能展示数据值与分布但我们更想回答数据集内在的数量问题有多少种鸟类类别各类别数量是多少有多少鸟处于灭绝、濒危、稀有或常见状态在林奈分类体系中各个属Genus和目Order分别有多少种基于 data/birds.csv 的实测统计可以作为上述问题的参考答案Ducks/Geese/Waterfowl 类别数量最多45 种其次是 New World warblers41 种、Sandpipers/Allies34 种按保护状态统计LC无危402 种、NT近危27 种、VU易危10 种、EN濒危2 种、CR极危1 种、EX灭绝1 种。五、探索柱状图按类别计数当你需要展示数据分组时柱状图非常实用。下面探索数据集中有哪些鸟类类别、按数量看哪种最常见。提示你可以先过滤掉上一节发现的两只离群鸟、修正其翼展笔误或直接保留它们——因为本节练习不依赖翼展数值。柱状图可以从原始数据直接创建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()这张柱状图清晰展示了每个类别的鸟类数量。一眼就能看出本区域数量最多的鸟类属于Ducks/Geese/Waterfowl鸭/鹅/水禽类别——明尼苏达州是万湖之地这毫不令人意外。你可以在数据集上尝试其他计数也许会有出乎意料的发现。六、比较数据单列比较与叠加比较通过创建新的轴可以尝试不同的分组数据比较。先按类别比较鸟类的 MaxLength最大体长maxlength birds[MaxLength] plt.barh(ybirds[Category], widthmaxlength) plt.rcParams[figure.figsize] [6, 12] plt.show()这里没有意外蜂鸟Hummingbirds的最大体长比鹈鹕Pelicans或鹅Geese短得多。当数据符合逻辑时说明一切正常更进阶的玩法是叠加两组数据。把给定鸟类类别的最小体长与最大体长叠加在同一张图上minLength birds[MinLength] maxLength birds[MaxLength] category birds[Category] plt.barh(category, maxLength) plt.barh(category, minLength) plt.show()在这张图中可以看到每个鸟类类别在 MinLength 与 MaxLength 之间的范围。可以很有把握地说基于这些数据鸟越大其体长跨度也越大。七、从练习到进阶挑战与作业本课的挑战任务鼓励你扩展视野这份鸟类数据集提供了某个生态系统中不同鸟类的大量信息。你可以在互联网上寻找其他以鸟类为导向的数据集围绕这些鸟构建图表去发现此前未曾意识到的数据事实。配套作业见 assignment.md在本课中你已用折线图、散点图和柱状图展示了该数据集的趣味事实。作业要求进一步深挖数据例如创建一份 Notebook可视化你能发现的关于Snow goose雪雁的全部有趣数据并综合使用上述三种图来讲故事。评分标准Exemplary / Adequate / Needs Improvement围绕三点良好的注释、扎实的故事叙述、美观的图形——三者缺一即降级缺二则视为有待改进。八、回顾与自学建议本课介绍了如何使用 Matplotlib 可视化数量。作为延伸学习可以研究其他处理数据集进行可视化的途径例如Plotly——它不在本系列课程覆盖范围内值得去看看它能提供什么。完整的可运行参考实现含每张图的渲染输出保存在 solution/notebook.ipynb可对照本文各节代码逐段验证。关键要点速览选图先于绘图趋势看折线分布看散点/柱状比较看柱状关系看折线/散点/气泡离群值不一定是错误但本数据集中 2300cm 与 1100cm 的翼展是明显的录入异常应通过可视化定位后再过滤Pandas 负责数据变换如value_counts聚合计数Matplotlib 负责图形渲染二者各司其职水平柱状图barh适合类别过多的场景配合plt.rcParams[figure.figsize]调整画布尺寸叠加两组barh可以直观呈现同一分组的取值范围如最小/最大体长。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表