
Data-Science-For-Beginners 实战用 R 与 ggplot2 直方图完成数据分布可视化作业【免费下载链接】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》一课的实践作业展开讲解如何以明尼苏达州鸟类数据集birds.csv为起点用 R 语言与 ggplot2 绘制直方图、二维直方图与密度图最终独立完成基于新数据集编写 R 脚本、用至少 5 个直方图讲述数据故事的课后任务。读完本文你将掌握geom_histogram的bins调参、geom_bin2d的双变量分布对比、geom_density的平滑曲线绘制以及将文本型分类字段转换为可参与直方图分箱的实用技巧并对照评分标准Grille dévaluation自查作业质量。一、任务解读作业到底要求做什么本课作业原文法语版见 translations/fr/3-Data-Visualization/R/10-visualization-distributions/assignment.md英文版见 translations/en/3-Data-Visualization/R/10-visualization-distributions/assignment.md的核心诉求非常明确到目前为止你已使用明尼苏达鸟类数据集探索了鸟类数量与种群密度。请将这些技术应用到另一个数据集例如来自 Kaggle 的数据集上编写一个 R 脚本来讲述该数据集的故事并且务必在分析中使用直方图。其评分标准Rubric分三档优秀Exemplaire合格Adéquat待改进À améliorer脚本包含关于数据集的详细注释含数据来源且至少使用 5 个直方图来挖掘数据事实脚本注释不完整或存在错误脚本无注释且包含错误可以看出作业的验收点有三个可运行的 R 脚本、包含数据来源在内的详细注释、不少于 5 个直方图。而直方图背后需要的全部技术正是本课正文 3-Data-Visualization/R/10-visualization-distributions/README.md 所教授的。因此完成作业的第一步是把这节课的图表工具箱学透。二、准备数据环境读取与清洗 birds 数据集本课所有示例都基于仓库根目录下的 data/birds.csv含表头共 443 行即 442 条鸟类记录。该文件带有UTF-8 BOM 编码直接使用read.csv会把首列列名读成乱码因此必须显式指定fileEncodingUTF-8-BOMlibrary(ggplot2) birds - read.csv(../../data/birds.csv, fileEncodingUTF-8-BOM) birds_filtered - subset(birds, MaxWingspan 500) head(birds_filtered)数据集的 13 个字段覆盖了每只鸟的分类学信息Name、ScientificName、Category、Order、Family、Genus、保护状态ConservationStatus以及四组长度/体重/翼展的最小值与最大值MinLength、MaxLength、MinBodyMass、MaxBodyMass、MinWingspan、MaxWingspan。其中 LC、NT、VU、EN、CR、EX 是 IUCN 红色名录的简写分别表示无危Least Concern、近危Near Threatened、易危Vulnerable、濒危Endangered、极危Critically Endangered、灭绝Extinct。subset(birds, MaxWingspan 500)是在承接上一课剔除异常值的结论——数据中存在个别记录异常大的翼展值过滤后得到更可信的分布样本。后续所有分布分析都基于birds_filtered展开。三、直方图基础用 geom_histogram 观察分布形态课程指出散点图如ggplot(databirds_filtered, aes(xOrder, yMaxLength)) geom_point()只能给出分布的粗略概览真正的分布形态应当用直方图来呈现。直方图本质上是一种条块随数值高低起伏的图表它把连续数值切分成若干等宽区间bin再统计每个区间内的样本频数。对全量数据绘制 MaxBodyMass最大体重的分布ggplot(data birds_filtered, aes(x MaxBodyMass)) geom_histogram(bins10) ylab(Frequency)一眼即可看出这 400 多只鸟的体重绝大多数集中在 2000 以下分布严重右偏。直方图对数据分布的骨架描绘能力是散点图难以替代的。bins 参数颗粒度决定洞察深度直方图的细腻程度由bins参数控制。将区间数从 10 提高到 30ggplot(data birds_filtered, aes(x MaxBodyMass)) geom_histogram(bins30) ylab(Frequency)区间越多条块越细分布细节越清晰。这是作业里可以反复利用的一个杠杆针对不同字段尝试不同的 bins 值观察分布的峰、谷与长尾。用 subset 过滤数据以还原更干净的分布左偏严重时可以先用subset裁剪数据范围让主体分布拉开。例如只保留体重在 1 到 60 之间的记录birds_filtered_1 - subset(birds_filtered, MaxBodyMass 1 MaxBodyMass 60) ggplot(data birds_filtered_1, aes(x MaxBodyMass)) geom_histogram(bins30) ylab(Frequency)这种先过滤、再分箱的组合拳在作业中可用于揭示某个子群体如按 Category 或 Order 过滤的内部分布规律是产出第 3、4 个直方图的现成思路。四、二维直方图对比两个变量的分布关系直方图不仅能刻画单变量还能通过geom_bin2d()把两个数值变量放进同一张图用颜色亮度表示二维分箱中的频数聚合度。例如对比 MaxBodyMass 与 MaxLengthggplot(databirds_filtered_1, aes(xMaxBodyMass, yMaxLength)) geom_bin2d() scale_fill_continuous(type viridis)从图中可以观察到两个变量沿一条预期轴线的相关性并存在一个明显的强收敛区域——这正是体重与体长在生物学上正相关的可视化证据。viridis色板提供了对色觉障碍友好的连续渐变色适合作为默认配色。五、处理文本数据让分类字段参与直方图直方图默认要求数值型输入。若想分析 ConservationStatus保护状态这类文本字段与数值字段如 MinWingspan的联合分布课程给出了一个巧妙的文本转有序编码方案先把分类缩写映射为带顺序的占位字符串再作为填充色传入geom_histogrambirds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus EX] - x1 birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus CR] - x2 birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus EN] - x3 birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus NT] - x4 birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus VU] - x5 birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus LC] - x6 ggplot(databirds_filtered_1, aes(x MinWingspan, fill ConservationStatus)) geom_histogram(position identity, alpha 0.4, bins 20) scale_fill_manual(nameConservation Status, valuesc(red,green,blue,pink), labelsc(Endangered,Near Threathened,Vulnerable,Least Concern))这段代码的关键点有三编码映射x1~x6只是占位值目的是让文本类别可以进入分箱逻辑实际展示时通过scale_fill_manual的labels恢复语义化名称position identity让不同类别的条块叠加而非堆叠便于直接比对各组分布alpha 0.4半透明叠加防止后画的组完全遮住先画的组。课程的结论是最小翼展与保护状态之间并没有明显的相关性。作业阶段可以沿此法继续测试其他字段组合MinLength、MaxBodyMass 等与不同过滤条件寻找真正有故事的关联。六、密度图让分布曲线平滑流动直方图是阶梯状的不够圆润。geom_density()用核密度估计把分布拟合成一条平滑曲线是直方图的极佳补充。对 MinWingspan 绘制密度曲线ggplot(data birds_filtered_1, aes(x MinWingspan)) geom_density()可以看到它与之前的直方图形态互相印证只是曲线更平滑。同理把前面略显锯齿的 MaxBodyMass 直方图换成密度图ggplot(data birds_filtered_1, aes(x MaxBodyMass)) geom_density()如果觉得默认曲线太滑可以用adjust参数控制带宽——adjust越小曲线越贴近原始数据、越不平滑ggplot(data birds_filtered_1, aes(x MaxBodyMass)) geom_density(adjust 1/5)密度图还能用fill一次比较多个分组。例如按鸟的 Order目叠加展示体重密度ggplot(databirds_filtered_1, aes(x MaxBodyMass, fill Order)) geom_density(alpha0.5)这张图在作业里非常出彩它用一张图讲清了不同鸟类目的体重分布各有各的峰是密度图而非直方图不可替代的叙事能力。注意其中alpha0.5同样是半透明防遮挡。七、作业落地从示例代码到完整脚本把上面的技术点串起来作业的标准动作可以归纳为如下流程直接决定了脚本能否同时满足至少 5 个直方图与详细注释两条优秀标准选数据集并注明来源可以是 Kaggle 上任何带数值列的公开数据集。脚本头部用注释块写明数据集名称、下载地址/出处、行数列数概览这正是评分标准中包括其来源的注释要求读取与清洗参照read.csv(../../data/birds.csv, fileEncodingUTF-8-BOM)的写法注意处理编码与异常值subset过滤至少 5 个直方图按难度递增排列例如——单变量直方图 ×2不同字段或不同bins对应文中geom_histogram(bins10)与bins30过滤子集直方图 ×1subsetgeom_histogram二维直方图 ×1geom_bin2d对比两个数值列文本分类着色直方图 ×1编码映射 scale_fill_manual若想升级可再加入分组密度图geom_densityfill用平滑曲线补足直方图的叙事盲区每个图表配注释在 R 代码中用#说明这张图想回答什么问题、观察到了什么事实让脚本成为一份可读的数据故事报告对照评分表自查优秀档要求脚本带注释、含来源、≥5 个直方图缺注释、有报错则分别落入合格或待改进档。八、延伸与挑战从直方图走向更高级的分布图课程末尾的挑战题建议读者搜索直方图在各领域的经典应用——它比散点图、柱状图、折线图更擅长揭示数据的集中趋势、离散程度与异常聚集因此在质量检测、生物统计、金融风控等领域都是高频工具。进一步的自学方向是geom_density_2d()——它把密度估计扩展到二维可以画出连续概率密度等高线适合观察两个变量联合分布的峰谷结构。完成本课作业后用geom_density_2d替换geom_bin2d再做一次双变量对比会是对分布可视化能力的又一次有效巩固。相关资源索引本课正文含全部代码与图表3-Data-Visualization/R/10-visualization-distributions/README.md英文作业原文translations/en/3-Data-Visualization/R/10-visualization-distributions/assignment.md法语作业原文translations/fr/3-Data-Visualization/R/10-visualization-distributions/assignment.md示例数据集data/birds.csv本课全部运行结果图3-Data-Visualization/R/10-visualization-distributions/images同系列 R 可视化课程目录3-Data-Visualization/R【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考