Data-Science-For-Beginners 分布可视化课后实战:用直方图与密度图为新数据集编写数据故事 Notebook
发布时间:2026/9/14 1:25:25来源:尧图网络
Data-Science-For-Beginners 分布可视化课后实战用直方图与密度图为新数据集编写数据故事 Notebook【免费下载链接】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课后作业说明如何将课程中基于明尼苏达鸟类数据集掌握的直方图、二维直方图与 Seaborn 密度图技能迁移到一个全新数据集上完成一份「用数据讲故事」的 Jupyter Notebook。读完本文你将获得一条从选数据集、搭建 Notebook 骨架到产出符合「优秀」评分标准含数据来源说明、至少 5 个直方图、完整注解的可复用实战路径。本指南对应的作业原文位于 translations/fa/3-Data-Visualization/10-visualization-distributions/assignment.md英文版见 3-Data-Visualization/10-visualization-distributions/assignment.md课程主文档为 3-Data-Visualization/10-visualization-distributions/README.md仓库内还提供了完整的参考实现 solution/notebook.ipynb。一、作业要求解读Apply your skills课程在第 10 课《可视化分布》中带领学习者使用明尼苏达鸟类数据集data/birds.csv探索了鸟类数量与种群密度信息并通过可视化异常值、比较不同鸟类类别的最大体长等方式发现了数据中的有趣事实。课后作业要求在此基础上「把技能用起来」Apply your skills到目前为止你已经用明尼苏达鸟类数据集发现了关于鸟类数量和种群密度的信息。请通过尝试另一个数据集可以来自 Kaggle 等平台来练习这些技术的应用。构建一个 Notebook讲述这个数据集的故事并确保在讨论它时使用直方图。拆解任务可以得到三个明确的可交付物换一个数据集不再使用课程自带的鸟类数据而是自行寻找如 Kaggle 平台一个感兴趣的公共数据集构建一个 Notebook用 Jupyter Notebook 组织代码、图表与文字说明形成一条叙事线必须使用直方图直方图Histogram是本次作业的核心可视化工具是「讲故事」的主要手段。二、评分表Rubric三个档次的判定标准作业附带三档评分标准是自查时最重要的依据必须完整理解优秀Exemplary合格Adequate需要改进Needs Improvement提交的 Notebook 包含对数据集的注解包括数据来源并且至少使用 5 个直方图来探索关于数据的发现。提交的 Notebook 注解不完整或存在缺陷/错误。提交的 Notebook 没有注解并且包含错误。从中可以提炼出三条硬性指标数据来源必须说明数据集来自哪里例如 Kaggle 的数据集页面链接或文件名、作者信息至少 5 个直方图这是可量化的要求建议在写作时逐条计数核对注解annotationsNotebook 中要有 Markdown 单元格记录你观察到的结论而不是只有一串干巴巴的代码。注意「合格」与「优秀」的分界在于注解是否完整、图表是否可靠「需要改进」则意味着既无说明又有 bug。因此先写注释再写代码边画图边记录发现是拿高分的最稳妥策略。三、技能清单把课程里学过的东西带过来作业要求「练习这些技术的应用」而这些技术正是本课 README.md 中完整的教学内容。在做新数据集之前先回顾这份技能清单它们将一一对应到新作业的直方图数量与叙事结构上。1. 加载数据并快速预览课程第一步是导入 Pandas 与 Matplotlib并读取鸟类数据import pandas as pd import matplotlib.pyplot as plt birds pd.read_csv(../../data/birds.csv) birds.head()鸟类数据集共 13 列这是一个很典型的「数值字段 分类字段」混合结构可作为新数据集字段评估的参考模板字段含义类型Name / ScientificName名称 / 学名文本Category / Order / Family / Genus类目 / 目 / 科 / 属分类ConservationStatus保护状态分类MinLength / MaxLength最小 / 最大体长数值MinBodyMass / MaxBodyMass最小 / 最大体重数值MinWingspan / MaxWingspan最小 / 最大翼展数值在数据加载后head()只能看到前几行建议再补充df.info()和df.describe()快速确认字段是否有缺失值、数值范围是否合理——这也是「对数据集的注解」的起点。2. 单变量直方图认识 bins 参数课程指出散点图如birds.plot(kindscatter, xMaxLength, yOrder, figsize(12,8))能给出分布的概貌但展示「真正的分布」通常要交给直方图。直方图类似条形图但通过将数据数组划分成更小的区间bins可以显示数据值的分布形态birds[MaxBodyMass].plot(kind hist, bins 10, figsize (12,12)) plt.show()可以看到数据集中 400 多只鸟的最大体重大多集中在 2000 以下。将bins从 10 提高到 30分布会被更细粒度地展现出来birds[MaxBodyMass].plot(kind hist, bins 30, figsize (12,12)) plt.show()bins 参数是直方图最重要的调节旋钮bins 过少会丢失细节过多会放大噪声。在新数据集上建议至少尝试 10 / 30 / 40 三档观察分布形态的变化并记录结论。3. 过滤数据聚焦局部如果分布严重偏向一侧可以先用布尔条件过滤数据再画直方图。课程中的示例是筛选出体重在 1 到 60 之间的鸟并使用 40 个 binsfilteredBirds birds[(birds[MaxBodyMass] 1) (birds[MaxBodyMass] 60)] filteredBirds[MaxBodyMass].plot(kind hist, bins 40, figsize (12,12)) plt.show()这是很好用的技巧当你发现整体分布被少数极端值主导时过滤后往往能暴露出更精细的模式。课程还提示试着去掉[MaxBodyMass]这一列筛选用不同的数据点和过滤条件组合可以看到带标签的完整分布。4. 二维直方图比较两个分布的收敛关系Matplotlib 内置的hist2d用更亮的颜色表示数据收敛集中的区域适合比较两个分布之间的关系。课程用MaxBodyMass对比MaxLengthx filteredBirds[MaxBodyMass] y filteredBirds[MaxLength] fig, ax plt.subplots(tight_layoutTrue) hist ax.hist2d(x, y)从结果可以看出两个变量沿预期轴存在相关性并有一个特别强的收敛点。「二维直方图」和「单变量直方图」在计数时都可以计入 5 个直方图的要求课程与参考实现均把它们当作直方图的一种。5. 文本分类字段堆叠/叠加直方图直方图默认对数值数据效果好但数据集中往往还包含类别信息鸟类数据集中的保护状态、目、科等。课程以保护状态为例演示了如何把分类字段转化为多条叠加的直方图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();其中alpha0.5让各直方图半透明叠加bins20控制区间数量label与plt.legend()生成图例。结果发现最小翼展与保护状态之间没有明显的相关性——「没有相关」本身也是一条值得写进注解的发现。课程还解释了数据集中保护状态缩写来自 IUCN 红色名录分类缩写含义CR极危Critically EndangeredEN濒危EndangeredEX灭绝ExtinctLC无危Least ConcernNT近危Near ThreatenedVU易危Vulnerable在作业里如果新数据集有类似的多分类字段国家、类别、等级等这一招可以直接复用每条分类画一条直方图用颜色区分叠加对比。6. 密度图Seaborn KDE平滑化收尾直方图是「阶梯状」的不够平滑。课程引入 Seaborn 库用kdeplot画出连续的核密度估计曲线import seaborn as sns import matplotlib.pyplot as plt sns.kdeplot(filteredBirds[MinWingspan]) plt.show()Seaborn 文档对 KDE 的评价是相比直方图KDE 在绘制多条分布时更简洁、更易解读但如果底层分布有界或不平滑也可能引入失真与直方图一样表示质量取决于平滑参数的选择。换言之异常值始终会让图表表现异常——这条经验也要写进笔记。针对之前那个「锯齿状」的 MaxBodyMass 直方图可以用 KDE 很好地平滑sns.kdeplot(filteredBirds[MaxBodyMass]) plt.show()如果想要「平滑但不过度平滑」的曲线可调节bw_adjust参数sns.kdeplot(filteredBirds[MaxBodyMass], bw_adjust.2) plt.show()课程还演示了用hue参数按类别分组绘制多条密度曲线以及把两个变量映射到 x、y 轴的二维密度图sns.kdeplot( datafilteredBirds, xMaxBodyMass, hueOrder, fillTrue, common_normFalse, palettecrest, alpha.5, linewidth0, )sns.kdeplot(datafilteredBirds, xMinLength, yMaxLength, hueConservationStatus)例如「易危Vulnerable」鸟类在体长维度上形成了一簇这个簇是否有意义就值得进一步研究——把这类疑问写进 Notebook正是「讲故事」的高级形态。四、如何挑选一个合适的新数据集作业建议的数据来源是 Kaggle。选择数据集时建议按以下标准评估保证课程技能可以顺利迁移有足够多的数值型字段直方图需要数值数据至少要有 23 个可画直方图的连续字段如价格、销量、体重、长度、评分等有分类字段最好有 12 个离散分类字段国家、品类、状态、组别等以便复用「叠加直方图」和 KDE 的hue分组技巧数据量适中几百到几千行最合适既能看出分布形态又便于快速探索格式简单优先选 CSV 格式pd.read_csv()可直接加载如果是 Excel 或 JSON需要额外的读取步骤记录来源第一时间把数据集名称、作者、下载链接、许可证记在 Notebook 的第一个 Markdown 单元格中——这直接对应评分表「包括数据来源」的要求。课程自带数据是鸟类观测数据题材类似的公共数据集动物测量、植物分布、体育统计、电商销售等都可以作为起点。五、实战路径从空 Notebook 到完整数据故事结合课程内容与仓库中 solution/notebook.ipynb 的参考实现该实现依次完成了加载数据 → MaxBodyMass 直方图bins10→ bins30 实验 → 过滤后 bins40 → MaxBodyMass 与 MaxLength 的二维直方图 → 按保护状态叠加直方图 → MinWingspan 的 KDE → MaxBodyMass 的 KDE → bw_adjust 平滑实验 → MinLength/MaxLength 的二维 KDE建议按下面六步组织自己的 Notebook第 0 步标题与数据来源Markdown说明数据集是什么、来自哪里Kaggle 链接或文件名、字段含义概览。这一格直接命中评分标准。第 1 步加载与概览代码 Markdownimport pandas as pd import matplotlib.pyplot as plt import seaborn as sns df pd.read_csv(你的数据文件.csv) df.head() df.info() df.describe()写一两句观察行数、列数、缺失值情况。第 2 步整体分布——直方图 #1 与 #2选取第一个感兴趣的数值字段分别用bins10和bins30或 40画两张直方图记录分布形态右偏双峰集中在哪里。第 3 步过滤聚焦——直方图 #3如果整体分布被极端值主导仿照课程写法过滤数据再画一张filtered df[(df[目标字段] 下界) (df[目标字段] 上界)] filtered[目标字段].plot(kindhist, bins40, figsize(12,12)) plt.show()此时已经达到 3 个直方图。第 4 步双变量关系——直方图 #4用ax.hist2d(x, y)比较两个数值字段的收敛关系并写一句结论是否存在相关、收敛点在何处。第 5 步分类对比——直方图 #5及以上选取一个分类字段用plt.hist叠加或堆叠多条直方图参考第三节第 5 点的代码模板完成「至少 5 个直方图」的硬指标。如果还想追加可以为多个数值字段各画一组分类叠加图。第 6 步KDE 平滑收尾可选加分用sns.kdeplot平滑最关心的分布尝试bw_adjust必要时用hue画多组对比或二维 KDE并总结整个数据集的故事主线与尚未解答的问题。按照这个路径每一步的代码单元格旁边都配一个 Markdown 注解单元格最终自然产出「优秀」档要求的作品来源清晰、注解完整、直方图不少于 5 个、无 bug。六、自查清单与常见坑提交前对照以下清单检查第一个 Markdown 单元格是否写明了数据来源是否每个代码块都有对应的文字注解观察、推测、结论直方图数量是否 ≥ 5逐一数一下hist/hist2d的调用每个单元格能否从上到下顺序执行Restart Run All 验证无报错图表是否有标题、坐标轴标签、必要时有图例可参考plt.gca().set(...)与plt.legend()常见坑提醒忘记plt.show()在 Notebook 中有时能自动显示但在脚本环境中会看不到图养成显式调用的习惯loc筛选条件拼错注意列名与数据中的实际取值完全一致如ConservationStatusEX可以先df[列名].unique()确认枚举值bins 数量与数据范围不匹配过滤后数据范围变小仍用默认 bins 可能颗粒过粗记得同步调整忽略异常值课程特别强调异常值会让图表行为异常发现极端值时应记录并考虑过滤处理只画图不写结论这是「合格」与「优秀」之间最常见的差距宁可多写一句「这看起来符合预期」也不要留白。七、延伸直方图的高级用法探索课程的挑战环节 Challenge建议学习者到网上寻找直方图应用的优秀案例思考它们被用在哪些领域、展示了什么、能说明什么问题。这也是本次作业的自然延伸——当你在新数据集上完成至少 5 个直方图之后可以进一步思考你的图表选对了图型吗直方图之外是否还需要散点图、箱线图或密度图来补充视角课程后续的「复习与自学」环节也建议深入研究 Seaborn 的kdeplot——它被官方定义为「一维或多维的连续概率密度曲线」。把密度图与直方图搭配使用往往能让数据故事的结尾既严谨又直观。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网