新闻详情

新闻详情

首页 / 资讯中心 / 详情

Data-Science-For-Beginners 课程 10:用直方图与密度图可视化数据分布(Matplotlib + Seaborn 实战)

发布时间:2026/9/15 13:18:59来源:尧图网络
Data-Science-For-Beginners 课程 10:用直方图与密度图可视化数据分布(Matplotlib + Seaborn 实战)
Data-Science-For-Beginners 课程 10用直方图与密度图可视化数据分布Matplotlib Seaborn 实战【免费下载链接】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 Distributions可视化分布》一课围绕位于data/birds.csv的明尼苏达州鸟类数据集系统讲解如何用 Pandas 读取数据、用 Matplotlib 绘制直方图Histogram与二维直方图以及如何引入 Seaborn 绘制核密度图KDE Plot来呈现数据沿某一数值轴的分布形态。读完本文你将掌握bins、alpha、bw_adjust、hue等关键参数的实际用法能够独立完成从散点图粗览 → 直方图细究 → 密度图平滑的完整分布分析流程。1. 课程背景与数据集准备本课是 Data-Science-For-Beginners 数据可视化模块的第 10 课承接上一课 09-visualization-quantities 中对数量型数据散点图、折线图、条形图的可视化。上一课曾通过散点图发现数据集中的异常值outliers并依据鸟类的最大体长对比了不同分类之间的差异本课则换一个视角——不再看某个值有多大而是看数据沿着数值轴是如何分布的。课程配套的素描笔记Sketchnote位于 sketchnotes/10-Visualizing-Distributions.png可作为课前快速浏览的知识地图。1.1 数据集与字段说明课程使用的数据文件位于仓库根目录的 data/birds.csv记录了明尼苏达州鸟类的外形与保护状态信息。文件首行是表头随后是 400 多行鸟类记录包含文本与数值两种类型字段字段类型含义Name文本鸟类常用英文名ScientificName文本学名Category文本类别如 Ducks/Geese/WaterfowlOrder文本目如 AnseriformesFamily/Genus文本科 / 属ConservationStatus文本保护状态缩写LC、EX、CR、EN、NT、VUMinLength/MaxLength数值最小 / 最大体长厘米MinBodyMass/MaxBodyMass数值最小 / 最大体重克MinWingspan/MaxWingspan数值最小 / 最大翼展厘米前 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/WaterfowlAnseriformesAnatidaeAnserLC6481193033101301651.2 导入依赖与数据在课程目录3-Data-Visualization/10-visualization-distributions/下的notebook.ipynb中仓库内入口文件见 notebook.ipynb按如下方式导入 Pandas、Matplotlib 并读取数据import pandas as pd import matplotlib.pyplot as plt birds pd.read_csv(../../data/birds.csv) birds.head()注意数据文件统一存放在仓库根目录的data/文件夹中因此从本课文件夹出发读取时要使用相对路径../../data/birds.csv。完整可运行的带输出结果版本可参考 solution/notebook.ipynb其中逐格复现了本课的全部图表。2. 用散点图快速观察分布为什么还不够在正式进入直方图之前可以先用上一课学过的散点图对分布形态做一个快速预览以鸟类的目Order为纵轴、最大体长MaxLength为横轴绘制散点birds.plot(kindscatter, xMaxLength, yOrder, figsize(12, 8)) plt.title(Max Length per Order) plt.ylabel(Order) plt.xlabel(Max Length) plt.show()这张图能给出不同目的鸟体长大致落在哪个区间的整体概览但它并不是展示真实分布的最佳方式——散点位置存在大量重叠难以精确回答某个取值附近聚集了多少个体。这种任务通常交给直方图来完成。3. 用 Matplotlib 绘制直方图3.1 基础直方图与 bins 参数Matplotlib 对直方图有非常好的支持。直方图从形态上看类似条形图但其本质是把给定的数值数组切分成若干小区间bin然后统计落入每个区间的数据个数柱子的高低起伏就代表了分布。绘制直方图只需要把kind设为hist并且数据必须是数值型。以下代码绘制MaxBodyMass最大体重在全数据集范围内的分布birds[MaxBodyMass].plot(kindhist, bins10, figsize(12, 12)) plt.show()可以直观看到本数据集中 400 多只鸟的最大体重大多落在 2000克以下整体呈明显的右偏skewed形态。3.2 调整 bins 细化分布bins参数决定直方图把数据轴切分成多少个区间。区间越多粒度越细但区间过密又可能引入噪声。把bins从 10 提高到 30birds[MaxBodyMass].plot(kindhist, bins30, figsize(12, 12)) plt.show()可以看到分布被呈现得更加细致峰值集中在最左侧的低体重区间右侧长尾一直延伸到数千克的区间。3.3 过滤数据改善偏态左侧偏态严重时可以只选取特定范围内的数据重新绘图。下面的代码筛选出最大体重在 1 到 60克之间的鸟并用 40 个 bin 展示它们的分布filteredBirds birds[(birds[MaxBodyMass] 1) (birds[MaxBodyMass] 60)] filteredBirds[MaxBodyMass].plot(kindhist, bins40, figsize(12, 12)) plt.show()✅ 动手练习可以尝试其他过滤条件与数据点。例如去掉[MaxBodyMass]这一列索引直接对整个过滤后的 DataFrame 绘图观察带图例label的多列分布同时显示的效果。3.4 二维直方图同时比较两个分布直方图同样支持看两个分布之间的关系。Matplotlib 提供了内置的hist2d方法用颜色明暗表示二维网格中的点密度。下面比较过滤后鸟类的MaxBodyMassx 轴与MaxLengthy 轴x filteredBirds[MaxBodyMass] y filteredBirds[MaxLength] fig, ax plt.subplots(tight_layoutTrue) hist ax.hist2d(x, y)从图中可以看出这两个变量沿一条预期的对角线方向呈现出明显的相关趋势并且在某一区域存在一个非常强的聚合点convergence——这正是体重与体长存在正向关联这一直觉在数据上的可视化印证。4. 用文本数据探索分布保护状态的叠加直方图直方图默认对数值数据工作得很好。但如果想按文本类别观察分布怎么办答案是先按类别把数值列拆成多个序列再多次调用plt.hist叠加到同一张图上。本数据集还包含鸟类类别、属、种、科以及保护状态等信息。下面分析鸟类的保护状态分布。数据集中使用了 IUCN 红色名录IUCN Red List的缩写体系缩写含义CRCritically Endangered极危ENEndangered濒危EXExtinct灭绝LCLeast Concern无危NTNear Threatened近危VUVulnerable易危由于ConservationStatus是文本值需要先用布尔索引把MinWingspan最小翼展按保护状态拆分为 6 个序列再通过共享的kwargs统一的alpha0.5透明度和bins20叠加绘制并为每种状态指定颜色与图例x1 filteredBirds.loc[filteredBirds.ConservationStatusEX, MinWingspan] x2 filteredBirds.loc[filteredBirds.ConservationStatusCR, MinWingspan] x3 filteredBirds.loc[filteredBirds.ConservationStatusEN, MinWingspan] x4 filteredBirds.loc[filteredBirds.ConservationStatusNT, MinWingspan] x5 filteredBirds.loc[filteredBirds.ConservationStatusVU, MinWingspan] x6 filteredBirds.loc[filteredBirds.ConservationStatusLC, MinWingspan] kwargs dict(alpha0.5, bins20) plt.hist(x1, **kwargs, colorred, labelExtinct) plt.hist(x2, **kwargs, colororange, labelCritically Endangered) plt.hist(x3, **kwargs, coloryellow, labelEndangered) plt.hist(x4, **kwargs, colorgreen, labelNear Threatened) plt.hist(x5, **kwargs, colorblue, labelVulnerable) plt.hist(x6, **kwargs, colorgray, labelLeast Concern) plt.gca().set(titleConservation Status, ylabelMin Wingspan) plt.legend();从结果看最小翼展与保护状态之间并不存在明显相关性。可以沿用这套方法继续测试数据集的其他字段或尝试不同的过滤条件寻找是否存在有意义的关联。实现细节在 solution notebook 中这组代码把纵轴标签设为Max Body Mass并叠加了相同的 6 个序列两次实现本质相同——alpha0.5让叠加区域半透明可见是多组直方图叠加的关键技巧。5. 用 Seaborn 绘制密度图KDE细心观察会发现前面绘制的直方图都是阶梯状的柱子之间存在硬边界无法形成平滑的弧线。要得到更平滑的密度曲线需要引入新的绘图库Seaborn的kdeplot方法——它绘制的是一维或多维连续概率密度曲线Kernel Density Estimate核密度估计。5.1 基础密度图导入 Seaborn 后对过滤后鸟类的MinWingspan绘制一个基础密度图import seaborn as sns import matplotlib.pyplot as plt sns.kdeplot(filteredBirds[MinWingspan]) plt.show()对比之前最小翼展的直方图可以发现这条曲线与直方图的整体形态一致只是平滑了许多。需要理解的是KDE 并非绝对更好。按 Seaborn 官方文档的说明相对于直方图KDE 在同时绘制多个分布时通常更简洁、更易解读但如果底层分布本身有界或不够平滑KDE 有可能引入失真和直方图一样其表现质量同样取决于平滑参数的选择。换言之异常值outliers始终会让图表行为异常——这也呼应了上一课通过可视化发现数据错误的工作。5.2 用 bw_adjust 控制平滑程度如果要回看第 3.2 节那张阶梯状的MaxBodyMass直方图可以先用默认参数生成平滑版本sns.kdeplot(filteredBirds[MaxBodyMass]) plt.show()如果想要平滑但不至于过度平滑就调整bw_adjust参数带宽调整系数值越小曲线越贴近原始数据、细节越多sns.kdeplot(filteredBirds[MaxBodyMass], bw_adjust.2) plt.show()✅ 动手练习查阅kdeplot的其余可用参数如cut、gridsize、cumulative等并逐一实验观察它们对曲线形态的影响。5.3 按分类分组的多重密度图密度图能产出极具解释力的可视化。例如只需几行代码就能按鸟类的目Order分组展示最大体重的密度sns.kdeplot( datafilteredBirds, xMaxBodyMass, hueOrder, fillTrue, common_normFalse, palettecrest, alpha.5, linewidth0, )参数说明hue按某个分类列分组着色fillTrue给曲线下方填充颜色便于观察各分组的面积对比common_normFalse各分组分别归一化避免因样本量差异导致大分组压扁小分组palette指定配色方案这里使用crestalpha.5填充透明度linewidth0不绘制轮廓线。5.4 二维密度图叠加多个变量kdeplot同样支持二维形式。下面的代码把MinLengthx 轴与MaxLengthy 轴的联合密度按ConservationStatus分组展示sns.kdeplot(datafilteredBirds, xMinLength, yMaxLength, hueConservationStatus)这张图把多个密度曲面叠加在同一坐标平面上。值得进一步研究的是图中易危Vulnerable鸟类是否真的在体长维度上形成一个有意义的聚集簇cluster。6. 源码级佐证solution notebook 中的完整实现课程的完整可执行代码在 solution/notebook.ipynb 中逐格给出与本文各节代码一一对应数据读取格birds pd.read_csv(../../../data/birds.csv)从 solution 子目录出发比课程根目录多一层../并展示了birds.head()的输出直方图格分别以bins10、bins30绘制MaxBodyMass再以过滤后的filteredBirds绘制bins40的直方图二维直方图格from matplotlib import colors; from matplotlib.ticker import PercentFormatter等 import 说明官方直方图示例常配合颜色归一化与百分比刻度使用保护状态叠加格完整 6 序列叠加代码纵轴标签在 solution 中为Max Body Mass密度图格依次复现kdeplot基础版、bw_adjust.2版以及二维hueConservationStatus版。如果你的课程根目录notebook.ipynb目前只有标题单元格直接参考 solution 版本即可获得全部带输出图的代码。另外本课还提供了 R 语言版本的配套实现与图表位于 3-Data-Visualization/R/10-visualization-distributions适合偏好 R 生态的读者对照学习。7. 挑战与课后作业挑战直方图是比基础散点图、条形图、折线图更进阶的一类图表。请在网络上检索直方图的优秀应用案例思考并回答它们通常如何被使用适合说明什么问题在哪些领域或研究场景中最为常见课后作业此前所有练习都基于明尼苏达州鸟类数据集用于发现鸟类的数量特征与种群密度信息。请把本课学到的技巧迁移到一份新数据集上例如从 Kaggle 等平台获取构建一个 Notebook 讲述该数据集的故事并在讲述过程中至少使用 5 个直方图来挖掘数据事实。评分标准可参考 assignment.md优秀作业需包含对数据集及其来源的批注说明并使用至少 5 个直方图合格作业允许存在不完整的批注或少量 bug不合格作业则缺失批注且存在明显 bug。8. 小结本节课围绕data/birds.csv完成了分布可视化的完整技术栈演练散点图粗览快速判断数值列的大致分布区间但不足以精确刻画分布Matplotlib 直方图通过bins参数控制区间粒度通过布尔过滤改善偏态通过hist2d比较两个分布的联合形态文本类别分布用loc 布尔条件按ConservationStatus拆列叠加半透明直方图观察类别差异Seaborn 密度图用kdeplot得到平滑密度曲线用bw_adjust调节平滑程度用hue、fill、common_norm等参数绘制分组与二维密度图。这些技能将直接服务于后续课程中更复杂的统计分析与可视化任务也是任何先看分布、再下结论的数据分析流程中不可或缺的第一步。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于Matlab的遥感图像变化监测:CVA、PCA与NDVI_BI_CVA算法实践 2026/9/15 14:43:08

基于Matlab的遥感图像变化监测:CVA、PCA与NDVI_BI_CVA算法实践

简介:基于Matlab的遥感图像变化监测课程设计完整源码包,面向测绘遥感、计算机、电子信息等专业的课程设计与毕业设计场景,适合需要完成变化检测实验或掌握CVA、PCA、NDVI等算法流程的学生与开发者。压缩包共29个文件,主体为24个.m…

阅读更多 →
如何使用 Netlify 部署 reference 静态速查网站? 2026/9/15 14:43:08

如何使用 Netlify 部署 reference 静态速查网站?

如何使用 Netlify 部署 reference 静态速查网站? 【免费下载链接】reference 面向开发者的技术速查清单(Cheat Sheets)集合,整理常见技术、工具与开发流程,帮助快速查阅关键信息,提高开发效率。 项目地址…

阅读更多 →
从PMX到FBX再到Unity:二次元角色卡通渲染全流程解析 2026/9/15 14:43:08

从PMX到FBX再到Unity:二次元角色卡通渲染全流程解析

做二次元风格项目,最绕不开的一环就是角色模型管线。Unity卡通渲染实战里,从第三方转换来的原神PMX模型,在Blender里整理好后导出成FBX,再进Unity做渲染,几乎是所有独立开发者和想要复刻二次元画风的人都会走的路径。不…

阅读更多 →
clue/ndjson-react 版本演进全解析:NDJSON 流式编解码在 Rector 并行架构中的应用 2026/9/15 14:43:08

clue/ndjson-react 版本演进全解析:NDJSON 流式编解码在 Rector 并行架构中的应用

clue/ndjson-react 版本演进全解析:NDJSON 流式编解码在 Rector 并行架构中的应用 【免费下载链接】rector Instant Upgrades and Automated Refactoring of any PHP 5.3 code 项目地址: https://gitcode.com/GitHub_Trending/re/rector NDJSON(N…

阅读更多 →
Typecho+宝塔面板:半小时搭建轻量级个人博客全流程指南 2026/9/15 14:43:08

Typecho+宝塔面板:半小时搭建轻量级个人博客全流程指南

如果你准备搭建一个个人博客,既不想用WordPress那么重的程序,又不想完全从零敲命令行部署环境,Typecho配合宝塔面板这套组合,应该算是目前省心又高效的方案之一。我前后用Typecho搭过几个站,也在纯Linux命令行环境下手…

阅读更多 →
语音识别本地部署:大模型时代的企业数据主权保卫战与落地指南 2026/9/15 14:40:08

语音识别本地部署:大模型时代的企业数据主权保卫战与落地指南

进入2026年,人工智能已经不再是停留在PPT上的概念,而是深度嵌入到了各行各业的业务流中。然而,伴随AI狂热而来的,是一场隐秘的企业危机——数据隐私泄露。频发的“内部会议录音上传云端被滥用”、“核心商业机密成为开源模型训练语…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞