
Data-Science-For-Beginners 第10课作业实战指南用直方图与密度图探索新数据集讲好数据故事【免费下载链接】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 课程第 10 课《Visualizing Distributions可视化分布》的课后作业展开——作业要求你脱离明尼苏达鸟类数据集data/birds.csv自选一个新数据集用至少 5 张直方图Histogram配合注释与数据来源说明构建一个能完整讲述数据集故事的 Notebook。读完本文你将掌握直方图的完整技术栈分箱、过滤、二维直方图、多系列叠加学会用 Seaborn 密度图平滑展示分布并了解如何逐条对照作业评分标准Rubric自查作品。一、作业任务解读做什么、怎么做本次关联文档为德语版作业translations/de/3-Data-Visualization/10-visualization-distributions/assignment.md其权威英文原版位于 3-Data-Visualization/10-visualization-distributions/assignment.md。两个版本内容一致核心要求如下任务指令Anweisungen到目前为止你一直在用明尼苏达鸟类数据集挖掘“鸟类数量”与“种群密度”的信息练习方式换一个全新的数据集可以从公开数据平台如 Kaggle 获取产出物一个 Notebook用直方图为主要可视化手段讲述这个数据集的故事强制要求讨论数据时必须使用直方图。评估标准Bewertungskriterien| 卓越Vorbildlich | 合格Angemessen | 待改进Verbesserungswürdig | | --- | --- | -- | | Notebook 包含关于数据集的注释含数据来源并且使用至少 5 张直方图来发现数据中的事实 | Notebook 注释不完整或存在错误 | Notebook 没有任何注释且包含错误 |从评分表可以提炼出三个硬性门槛① 有注释与来源标注② 至少 5 张直方图③ 没有 bug、注释完整。下面各节将围绕这三个门槛为你补齐第 10 课的核心技法并给出可直接照做的完成路线。二、技法复习 1用 Matplotlib 绘制基础直方图作业要求“用直方图讨论数据”因此先复习第 10 课正文3-Data-Visualization/10-visualization-distributions/README.md中的核心技法。课程配套的示例 Notebook 位于 3-Data-Visualization/10-visualization-distributions/notebook.ipynb参考答案在 solution/notebook.ipynb作业实践时可对照参考。2.1 加载数据与快速总览无论换什么数据集第一步都是加载数据并观察结构import pandas as pd import matplotlib.pyplot as plt birds pd.read_csv(data/birds.csv) birds.head()在讲分布之前可以先用上一课09-visualization-quantities学过的散点图做全局预览——它能粗略反映数据沿坐标轴的分布情况但不是展示真实分布的最优方式分布的正规武器是直方图birds.plot(kindscatter, xMaxLength, yOrder, figsize(12, 8)) plt.title(Max Length per Order) plt.ylabel(Order) plt.xlabel(Max Length) plt.show()2.2 直方图的核心参数binsMatplotlib 对直方图的支持非常成熟。直方图与柱状图相似通过柱子的起伏呈现分布形态构造直方图只需要数值型数据用kindhist即可。bins参数决定将数据切分为多少个小区间是控制“粒度”的关键# bins10粗粒度看整体形状 birds[MaxBodyMass].plot(kindhist, bins10, figsize(12, 12)) plt.show()从图中可见该数据集 400 多种鸟类中绝大多数鸟的 MaxBodyMass 落在 2000 以下。把bins提高到 30能观察到更细腻的分布birds[MaxBodyMass].plot(kindhist, bins30, figsize(12, 12)) plt.show()2.3 过滤数据 直方图让分布不那么左偏原始数据可能高度左偏掩盖了主体区间的形态。解决方案是先过滤再画图——这也是新数据集上最常用的探索手段。课程中把体重过滤到 160 区间并设置 40 个分箱filteredBirds birds[(birds[MaxBodyMass] 1) (birds[MaxBodyMass] 60)] filteredBirds[MaxBodyMass].plot(kindhist, bins40, figsize(12, 12)) plt.show()实操提示尝试不同的过滤条件与不同字段。若想看完整分布也可以去掉[MaxBodyMass]这一列筛选观察带标签的多列分布。这可以构成作业中的第 12 张直方图一张全量分布、一张过滤后分布。2.4 二维直方图观察两个分布的关联当你需要对比两个数值分布的关系时Matplotlib 提供hist2d用更亮的颜色表示高密度汇聚区域x filteredBirds[MaxBodyMass] y filteredBirds[MaxLength] fig, ax plt.subplots(tight_layoutTrue) hist ax.hist2d(x, y)从输出可以看到两个变量沿预期轴存在相关性并出现一个显著的汇聚点。这张二维直方图可作为作业中的第 3 张直方图用于回答“两个数值变量如何共同分布”。三、技法复习 2用多系列直方图对比文本分组直方图默认面向数值数据但遇到文本类分组如物种保护状态时可以对每个分组的数值字段分别绘制直方图并叠加。鸟类数据中的保护状态缩写来自 IUCN 红色名录CR极危Critically EndangeredEN濒危EndangeredEX灭绝ExtinctLC无危Least ConcernNT近危Near ThreatenedVU易危Vulnerable课程代码按保护状态分组叠加绘制“最小翼展”的分布用alpha控制透明度、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();结果发现最小翼展与保护状态之间并没有明显相关性——这本身就是值得写进 Notebook 的一个“发现”。在作业中你可以用同样手法对比自己数据集的任意分类字段国家、类型、年份区间等。这张多系列叠加直方图可作为作业中的第 4 张直方图。四、技法复习 3用 Seaborn 密度图让分布更平滑直方图的柱子是“阶梯状”的不够圆滑。想要更平滑的分布曲线可以引入 Seaborn 库的kdeplot核密度估计。课程原文档对 KDE 的定位是相比直方图KDE 在同时绘制多个分布时更整洁、更易解读但如果底层分布有界或不光滑也可能引入失真且结果同样依赖平滑参数的选择。一句话离群值永远会让图表失真。import seaborn as sns # 基础密度图 sns.kdeplot(filteredBirds[MinWingspan]) plt.show()它几乎复刻了之前直方图的形态只是更平滑。用 KDE 重绘之前“锯齿感”明显的 MaxBodyMass 分布可以得到顺滑曲线sns.kdeplot(filteredBirds[MaxBodyMass]) plt.show()4.1 用 bw_adjust 控制平滑程度bw_adjust参数可以调节带宽缩放值越小曲线越“贴身”更不平滑值越大曲线越圆滑。课程示例给出 0.2 的效果sns.kdeplot(filteredBirds[MaxBodyMass], bw_adjust.2) plt.show()4.2 按分组绘制多条密度曲线kdeplot支持通过hue按分类字段分色并用fill填充、common_norm控制是否共享归一化、palette指定色板。下面按鸟的目Order展示最大体重的密度分布sns.kdeplot( datafilteredBirds, xMaxBodyMass, hueOrder, fillTrue, common_normFalse, palettecrest, alpha.5, linewidth0, )4.3 二维密度图多变量分布叠加kdeplot同样支持二维形态——同时传入x与y即可将两个数值变量投影为等高线式密度再用hue区分分组sns.kdeplot(datafilteredBirds, xMinLength, yMaxLength, hueConservationStatus)如果观察到“易危Vulnerable”鸟类在长度维度上形成独立聚簇可以进一步验证其统计意义——这正是 Notebook 里值得展开的“数据故事”。五、作业完成路线图五步做出达标 Notebook综合任务指令与评分表推荐按以下五步完成第 1 步选数据集并交代来源对应“含来源的注释”选择一个你感兴趣的公开数据集注意字段应尽量包含多个数值列与至少一个分类列这样直方图与分组直方图都有用武之地。在 Notebook 开头的 Markdown 单元格里写明数据集名称、来源平台、下载地址、字段说明、记录数。课程 R 语言版本作业3-Data-Visualization/R/10-visualization-distributions/assignment.md也给出了同一套要求可作为对照。第 2 步数据加载与探索性总览用pandas.read_csv()或其他合适加载函数读入数据head()预览再用散点图做全局速览明确数据形态。第 3 步凑齐 5 张直方图评分硬指标建议组合如下既覆盖技法又天然形成叙事线某数值字段的全量直方图bins10与bins30对比过滤后的直方图先df[(df[col] a) (df[col] b)]再画图二维直方图hist2d探索两个数值变量的联合分布按分类字段叠加的多系列直方图用alpha、color、label区分分组KDE 密度图kdeplot或带hue的多组密度图用bw_adjust微调平滑度。第 4 步让每张图都有“发现”每张直方图下方的 Markdown 单元格应写一句结论峰值出现在哪个区间分布是否偏斜有没有离群值分组之间分布是否重叠这既是评分表中的“注释”也是“讲故事”的核心。第 5 步对照评分表自检Notebook 有无数据集来源说明是否包含至少 5 张直方图每张图是否配有关键结论注释所有单元格能否无报错依次运行无 bug对照“卓越”标准逐项打勾即完成达标作品。六、参考资源第 10 课正文直方图与密度图完整讲解3-Data-Visualization/10-visualization-distributions/README.md课程配套练习 Notebook3-Data-Visualization/10-visualization-distributions/notebook.ipynb参考答案 Notebook含全部可运行代码与输出3-Data-Visualization/10-visualization-distributions/solution/notebook.ipynb英文版作业原文3-Data-Visualization/10-visualization-distributions/assignment.md德语版作业原文本文关联文档translations/de/3-Data-Visualization/10-visualization-distributions/assignment.mdR 语言版本作业3-Data-Visualization/R/10-visualization-distributions/assignment.md示例数据鸟类数据集data/birds.csv【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考