拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Data-Science-For-Beginners 第10课 R 版作业实战:用 ggplot2 直方图讲述数据集的故事

Data-Science-For-Beginners 第10课 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可视化分布》一课的 R 版本作业translations/da/3-Data-Visualization/R/10-visualization-distributions/assignment.md。作业要求你在已经掌握明尼苏达州鸟类数据集分析技能的基础上换一个全新数据集用 R 脚本配合至少 5 张直方图histogram挖掘数据事实并讲出故事。读完本文你将完整掌握 ggplot2 直方图、分组直方图与密度图的实操写法并知道如何按评分标准交付一份范例级Exemplary作业。作业背景上一课做了什么在本课之前你已经用明尼苏达州鸟类数据集data/birds.csv发现了鸟类数量与种群密度相关的信息——包括通过可视化离群点发现错误数据、按鸟类的最大体长MaxLength比较不同鸟目Order之间的差异。本课则转向分布distribution视角数据如何沿坐标轴组织。例如你关心的是该数据集中明尼苏达鸟类的最大翼展MaxWingspan或最大体重MaxBodyMass的整体分布形态。R 版课程完整讲义位于 3-Data-Visualization/R/10-visualization-distributions/README.md作业要求正是基于其中讲解的直方图技术来完成的。作业要求逐条解读作业原文丹麦语给出的指令如下到目前为止你一直在使用明尼苏达州鸟类数据集来发掘鸟类数量和种群密度的信息。请通过尝试另一个数据集来练习应用这些技术数据集可以从 Kaggle 等公开平台获取。构建一个 R 脚本讲述这个数据集的故事并且务必在讨论中使用直方图。核心要求可拆解为四点换数据集不再使用课程自带的鸟类数据而是自行选择一个新数据集例如来自 Kaggle 公开数据集平台。写 R 脚本产出可运行的.R脚本而非 Jupyter notebook这是与 Python 版作业见 3-Data-Visualization/10-visualization-distributions/assignment.md其要求为 notebook的区别。讲故事脚本不是零散的绘图堆砌而应围绕数据讲出一个连贯的发现过程。必须使用直方图直方图是本次作业指定的核心图表类型。评分标准三个档位范例级Exemplary合格级Adequate需改进Needs Improvement脚本配有关于该数据集的注释包括其来源并至少使用 5 张直方图来发现数据事实脚本注释不完整或存在错误脚本没有注释且包含错误对照此表交付前请重点自检三点注释是否覆盖数据来源与解读、直方图是否达到 5 张以上、脚本能否无错运行。评估细则全文可见关联作业文档。技术铺垫课程讲义中的直方图全家桶作业所要求的能力全部来自本课 R 版讲义。下面按讲义顺序梳理可直接复用的技术作为你完成新数据集脚本的工具箱。1. 加载数据并去除离群点讲义使用ggplot2绘图并用read.csv读取鸟类数据注意fileEncodingUTF-8-BOM用于处理 UTF-8 BOM 头library(ggplot2) birds - read.csv(../../data/birds.csv, fileEncodingUTF-8-BOM) birds_filtered - subset(birds, MaxWingspan 500) head(birds_filtered)这一步沿用了上一课去除离群点的做法MaxWingspan 500过滤掉翼展异常大的记录。数据前几行示例如下NameScientificNameCategoryOrderFamilyGenusConservationStatusMinLengthMaxLengthMinBodyMassMaxBodyMassMinWingspanMaxWingspanBlack-bellied whistling-duckDendrocygna autumnalisDucks/Geese/WaterfowlAnseriformesAnatidaeDendrocygnaLC475665210207694Fulvous whistling-duckDendrocygna bicolorDucks/Geese/WaterfowlAnseriformesAnatidaeDendrocygnaLC455371210508593Snow gooseAnser caerulescensDucks/Geese/WaterfowlAnseriformesAnatidaeAnserLC6479205040501351652. 用散点图先做总体概览正式画直方图之前可以先用散点图获得体长按鸟目分布的粗略印象ggplot(databirds_filtered, aes(xOrder, yMaxLength, group1)) geom_point() ggtitle(Max Length per order) coord_flip()讲义明确指出散点图能给出总体分布概览但不是展示真实分布的最优方式这个任务通常交给直方图完成。3. 直方图geom_histogram与bins参数直方图类似条形图通过柱子的起伏展示数据分布要绘制直方图必须使用数值型数据。对MaxBodyMass画整体分布ggplot(data birds_filtered, aes(x MaxBodyMass)) geom_histogram(bins10) ylab(Frequency)可以看到数据集中 400 多只鸟的MaxBodyMass大部分落在 2000 以下右侧拖着长尾属于典型右偏分布。把bins提高到 30能看到更细粒度的分布细节ggplot(data birds_filtered, aes(x MaxBodyMass)) geom_histogram(bins30) ylab(Frequency)分箱越细低值区的形状越平滑但长尾特征不变——这验证了数据整体右偏。4. 过滤数据绘制更对称的直方图右偏严重的图不易阅读可以先用subset限定范围再画图得到向左偏移较少的分布。例如只保留体重在 1 到 60 之间的鸟并展示 30 个分箱birds_filtered_1 - subset(birds_filtered, MaxBodyMass 1 MaxBodyMass 60) ggplot(data birds_filtered_1, aes(x MaxBodyMass)) geom_histogram(bins30) ylab(Frequency)练习提示尝试不同的过滤器与数据点如果想看数据的完整分布可以移除体重过滤条件展示带标签的分布。5. 二维直方图geom_bin2d比较两个分布的关系直方图也支持二维形式用于比较两个分布之间的关联。讲义用MaxBodyMass与MaxLength做对比ggplot(databirds_filtered_1, aes(xMaxBodyMass, yMaxLength)) geom_bin2d() scale_fill_continuous(type viridis)从图上看两者沿一条预期的轴存在相关性并且有一个特别强的汇聚点。geom_bin2d在 R 中对应 Python 版讲义里的ax.hist2d是同一类技术在不同语言生态中的实现。6. 文本数据的直方图按 ConservationStatus 分组直方图默认处理数值数据。若想查看按文本分类的分布如保护状态 ConservationStatus需要先做变换。讲义先把状态码映射为分组标签x1–x6再以fill分组叠加绘制并使用alpha0.4的半透明效果birds_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))需要说明的是数据集中保护状态缩写来自 IUCN 红色名录IUCN Red List CategoriesCR极危Critically EndangeredEN濒危EndangeredEX灭绝ExtinctLC无危Least ConcernNT近危Near ThreatenedVU易危Vulnerable讲义结论是最小翼展与保护状态之间看不出明显的相关性图中以Least Concern为主的分布呈近似正态、峰值在翼展 20 左右而其他组样本较少且分散。讲义建议用同样方法测试数据集的其他字段、尝试不同过滤器寻找可能存在的相关性。7. 密度图geom_density平滑分布曲线直方图是阶梯状的不够平滑。密度图可以把分布画成平滑的弧线需要用到 R 的geom_density对应 Python 版的 Seabornkdeplotggplot(data birds_filtered_1, aes(x MinWingspan)) geom_density()密度图与之前的直方图形状呼应只是更平滑。对右偏的MaxBodyMass同样适用ggplot(data birds_filtered_1, aes(x MaxBodyMass)) geom_density()8. 用adjust参数控制平滑程度密度图并非越平滑越好。adjust参数可调节核密度估计的带宽adjust 1/5会得到一条平滑但不过度光滑的曲线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)如何按作业要求组织一个5 张直方图的 R 脚本把上述工具箱迁移到你的新数据集一个能覆盖范例级评分的脚本骨架可以这样设计以任意数值型字段替换示例列名# 0. 注释数据来源与背景 # 数据集数据集名称来源Kaggle 页面/出处说明 # 字段说明关键字段的含义与单位 library(ggplot2) # 1. 读取数据根据实际格式调整读取函数与编码 data - read.csv(path/to/your_dataset.csv, fileEncodingUTF-8-BOM) summary(data) # 2. 数据清洗与讲义一致先去除离群点 data_clean - subset(data, 数值列 阈值) # 直方图 1目标变量的整体分布讲整体形态如右偏/双峰 ggplot(data data_clean, aes(x 数值列1)) geom_histogram(bins30) ylab(Frequency) ggtitle(Overall distribution) # 直方图 2调整分箱数后的分布讲粒度变化 ggplot(data data_clean, aes(x 数值列1)) geom_histogram(bins60) ylab(Frequency) # 直方图 3过滤子集后的分布讲某个区间内的形态 data_sub - subset(data_clean, 数值列1 下限 数值列1 上限) ggplot(data data_sub, aes(x 数值列1)) geom_histogram(bins30) ylab(Frequency) # 直方图 4二维直方图比较两个数值变量的关系 ggplot(data data_sub, aes(x 数值列1, y 数值列2)) geom_bin2d() scale_fill_continuous(type viridis) # 直方图 5按文本分类变量分组先映射标签再叠加直方图 ggplot(data data_sub, aes(x 数值列1, fill 分类列)) geom_histogram(position identity, alpha 0.4, bins 20) scale_fill_manual(name Legend Title, values c(red,green,blue,pink)) # 进阶密度图补充平滑视角可选加分项 ggplot(data data_sub, aes(x 数值列1)) geom_density(adjust 1/5)设计要点每张图配一句注释说明这张图揭示了什么事实——这直接命中评分标准中的注释annotations要求脚本开头写明数据集名称与来源——命中包括其来源including its source要求至少 5 张直方图可用整体分布 → 不同分箱 → 过滤子集 → 二维直方图 → 分组直方图的递进结构天然凑齐并形成从粗到细、从单变量到多变量的叙事线叙事连贯先讲整体形态偏斜/峰值再讲分箱粒度的影响再讲分组差异与变量关系最后用密度图平滑收尾形成完整故事。交付前自检清单对照作业原文的评估标准逐项核验注释完整性脚本是否解释了每个数据集的来源、字段含义以及每张图的发现直方图数量是否至少 5 张直方图含geom_histogram与geom_bin2d可运行性脚本在 R 环境中能否无错执行注意读取路径、包加载ggplot2与编码参数是否正确本课讲义还提供了延伸练习研究直方图相比散点图、条形图、折线图的差异收集直方图的优秀应用案例思考它们通常在哪些领域被使用并进一步查阅geom_density_2d()的文档理解一维或多维的连续概率密度曲线。这些都可以作为脚本中注释的素材来源帮助你写出更有深度的分析。通过本课 R 版作业的完整实践你将能够独立完成数据加载 → 清洗 → 直方图探索 → 分组对比 → 密度平滑的标准分析链路这套流程可直接复用到 Kaggle 等平台上的任意新数据集。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门