ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

R + ggplot2 分布可视化实战:在 Data-Science-For-Beginners 作业中用直方图讲好一个数据集故事

R + ggplot2 分布可视化实战:在 Data-Science-For-Beginners 作业中用直方图讲好一个数据集故事 R ggplot2 分布可视化实战在 Data-Science-For-Beginners 作业中用直方图讲好一个数据集故事【免费下载链接】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 版作业展开它要求你脱离明尼苏达鸟类数据集另选一份数据集编写一个带充分注释、明确数据来源、且至少包含 5 幅直方图的 R 脚本用分布的角度讲一个数据故事。读完本文你将掌握ggplot2中直方图geom_histogram、二维直方图geom_bin2d、叠加直方图与密度图geom_density的完整用法并知道如何对照评分标准自查提交质量。作业任务解读讲故事的 R 脚本本节作业原文位于 translations/bg/3-Data-Visualization/R/10-visualization-distributions/assignment.md保加利亚语翻译版英文原文见 translations/en/3-Data-Visualization/R/10-visualization-distributions/assignment.md。核心任务可以拆解为三点换数据集此前所有练习都在明尼苏达鸟类数据集data/birds.csv上进行用于发现鸟类数量与种群密度的洞察作业要求你从公开数据集平台如 Kaggle 等社区数据源另取一份感兴趣的数据集。写 R 脚本脚本需要围绕该数据集讲述一个故事——即按一条清晰的叙事线索组织分析。用足直方图讨论数据时必须包含直方图这一图表类型。原始英文作业文档本身非常简短它真正的教学内容集中在对应课程的 3-Data-Visualization/R/10-visualization-distributions/README.md 中。因此本文将以作业要求为主线把课程 README 中所有可复用的 R 代码与图表模式完整整理出来作为完成作业的工具箱。评分标准Rubric逐项对照作业给出了三档评分标准它直接决定了你的提交应该长什么样优秀Exemplary合格Adequate待改进Needs Improvement脚本附带关于数据集的详细注释包含数据来源且至少使用 5 幅直方图从数据中提取有意义的洞察。脚本注释不完整或存在错误。脚本没有注释且包含错误。将标准翻译成可执行的检查清单注释Annotations每个分析步骤前用#注释说明要回答什么问题、为什么用这种图、读图结论是什么来源Source脚本开头明确写出数据集的名称、获取渠道与下载地址或获取方式说明5 幅直方图At least 5 histograms这是硬指标。注意直方图在ggplot2中包括geom_histogram、geom_bin2d以及按类别填充叠加的直方图均可计入有意义的洞察Meaningful insights不能只画图不解释每张图后要有一两句这说明了什么的结论。前置技能回顾加载数据与清洗异常值课程 README 的第一步是回到上一课《可视化数量》3-Data-Visualization/R/09-visualization-quantities/README.md 已经学过的技能导入ggplot2、读取数据、剔除异常值。在 R 控制台或 RStudio中执行library(ggplot2) birds - read.csv(../../data/birds.csv, fileEncoding UTF-8-BOM) head(birds) birds_filtered - subset(birds, MaxWingspan 500) head(birds_filtered)两点说明数据文件 data/birds.csv 的列名为Name, ScientificName, Category, Order, Family, Genus, ConservationStatus, MinLength, MaxLength, MinBodyMass, MaxBodyMass, MinWingspan, MaxWingspan。读取时使用fileEncodingUTF-8-BOM是因为该 CSV 带有 UTF-8 BOM 头可从文件首行\ufeffName,...验证不指定该参数可能导致列名出现乱码subset(birds, MaxWingspan 500)是沿用上一课的结论数据中秃鹰Bald Eagle和草原隼Prairie Falcon的最大翼展疑似多打了一个 02000 厘米翼展相当于 20 米以上因此过滤掉MaxWingspan 500的异常行得到更干净的birds_filtered。在做作业时同样的流程适用于你自己的数据集加载 →head()检视 → 根据领域常识或可视化结果剔除异常值 → 再进入分布分析。用散点图粗看分布再用直方图精确刻画课程指出散点图可以快速给出数据分布的大致印象但它并不是展示真实分布的最优方式——这个任务通常交给直方图。以各目Order鸟类的最大体长为例ggplot(data birds_filtered, aes(x Order, y MaxLength, group 1)) geom_point() ggtitle(Max Length per order) coord_flip()这幅图给出了体长按鸟类目别分布的整体概览但点的堆叠难以量化每个取值区间里到底有多少只鸟。直方图的本质就是把数值轴的连续范围切成若干等宽的箱子bins统计每个箱子里的观测数量用柱子的起伏呈现分布形态。这正是作业要求大量使用直方图的原因——它是回答数据集中在哪里、如何散布、是否存在多峰或偏斜这类问题的最直接工具。直方图核心geom_histogram与bins参数ggplot2用geom_histogram一行即可绘制直方图。课程首先绘制全量数据MaxBodyMass最大体重的分布设置 10 个箱子ggplot(data birds_filtered, aes(x MaxBodyMass)) geom_histogram(bins 10) ylab(Frequency)结论非常直观数据集中 400 多种鸟类里绝大多数鸟的最大体重落在 2000 以下。把bins从 10 提高到 30分布会被切分得更细ggplot(data birds_filtered, aes(x MaxBodyMass)) geom_histogram(bins 30) ylab(Frequency)参数要点bins直接决定直方图的分辨率。箱子过少会丢失分布细节如多峰被合并过多则会因为每个箱子计数过少而出现大量锯齿噪声。实际使用时建议尝试 10 / 30 / 50 等多档取值观察分布形态是否稳定。另外注意geom_histogram还支持binwidth按固定箱宽切分与breaks自定义边界向量两种替代方式它们与bins互斥。过滤数据削弱左偏分布上图整体左偏——大量小鸟集中在低体重区右侧长尾拉长了横轴。课程给出的处理办法是先用subset过滤出只关心范围的子集再画直方图。例如只保留体重在 160 之间的鸟birds_filtered_1 - subset(birds_filtered, MaxBodyMass 1 MaxBodyMass 60) ggplot(data birds_filtered_1, aes(x MaxBodyMass)) geom_histogram(bins 30) ylab(Frequency)过滤后柱状分布不再被长尾挤压形态细节峰值位置、分布范围清晰可读。作业技巧遇到明显偏斜或长尾的数据时不要急着下结论先像这样限定一个合理的分析区间往往能发现被长尾淹没的子结构也可以对数据取对数log()后再画直方图这是处理长尾分布的另一常用手段。二维直方图用geom_bin2d考察两个分布的关联直方图还可以扩展到二维把平面按两个变量切成网格用颜色深浅表示每个格子里的观测密度。课程用geom_bin2d对比MaxBodyMass与MaxLengthggplot(data birds_filtered_1, aes(x MaxBodyMass, y MaxLength)) geom_bin2d() scale_fill_continuous(type viridis)两个变量沿预期的主轴呈现出明显的相关性并存在一个特别强的汇聚点。scale_fill_continuous(type viridis)使用色盲友好的 viridis 色阶颜色越亮表示该网格内观测越多。二维直方图是两个数值分布 两者相关关系三合一的可视化非常适合在作业中用来回答两个指标是否同涨同跌这类问题。文本数据的分布编码 填充叠加直方图直方图默认要求数值型输入但鸟类数据里还有大量文本型信息——Category、Family、Genus、ConservationStatus等。课程以保护状态为例先介绍这些缩写来自 IUCN 红色名录分类体系CR极危Critically EndangeredEN濒危EndangeredEX灭绝ExtinctLC无危Least ConcernNT近危Near ThreatenedVU易危Vulnerable处理思路是将文本类别映射为标记再按类别分别绘制并叠加。课程把birds_filtered_1中不同保护状态的记录重编码为x1x6然后以fill ConservationStatus叠加多组半透明直方图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(data birds_filtered_1, aes(x MinWingspan, fill ConservationStatus)) geom_histogram(position identity, alpha 0.4, bins 20) scale_fill_manual( name Conservation Status, values c(red, green, blue, pink), labels c(Endangered, Near Threathened, Vulnerable, Least Concern) )这段代码里值得注意的关键参数position identity让各组直方图不做堆叠或并排而是原样叠加在同一坐标系里便于直接对比各组分布区间alpha 0.4半透明填充避免后绘制的组完全遮挡先绘制的组bins 20统一各组箱宽保证不同保护状态之间可比scale_fill_manual(name..., values..., labels...)分别设置图例标题、填充颜色与图例标签原文档中标签拼写如 Near Threathened 为原文如此可自行修正为 Near Threatened。课程结论最小翼展与保护状态之间并没有明显的相关性。作业延伸用同样的方法测试你数据集中任意数值 × 类别组合比如不同类别的价格分布、不同地区的时长分布逐一记录有没有重叠、有没有分离的观察结论。从阶梯到平滑geom_density密度图直方图是阶梯状的柱顶不平滑如果希望用连续曲线表达分布可以用密度图geom_density其原理是基于核密度估计KDE拟合一条概率密度曲线。课程先用最小翼展演示ggplot(data birds_filtered_1, aes(x MinWingspan)) geom_density()曲线与之前的最小翼展直方图形状一致但明显更平滑。对于之前那张锯齿明显的MaxBodyMass直方图用密度图重建可以得到流畅的轮廓ggplot(data birds_filtered_1, aes(x MaxBodyMass)) geom_density()如果觉得曲线过于平滑、细节丢失可以调整adjust参数带宽缩放系数默认 1小于 1 使曲线更贴近原始数据、保留更多细节ggplot(data birds_filtered_1, aes(x MaxBodyMass)) geom_density(adjust 1/5)与直方图的bins类似adjust是密度图最核心的平滑度旋钮过大会抹平真实的峰谷结构过小则把噪声也画出来。作业技巧同一组数据可以同时给出直方图忠实计数与密度图平滑轮廓两个版本形成定量 定性的双重视角这也是凑足 5 幅图、且让分析更专业的常用套路。分组密度图一行代码对比多个类别密度图最优雅的用法是按类别分组绘制用fill映射到分组变量即可。课程按鸟类的目Order绘制最大体重密度ggplot(data birds_filtered_1, aes(x MaxBodyMass, fill Order)) geom_density(alpha 0.5)半透明填充让多个组的分布曲线可以互相叠加比较一眼就能看出哪些目的鸟类体重区间相近、哪些完全错开。这种数值分布 × 类别分组的组合是直方图/密度图家族中最有叙事力的形态强烈建议在作业中作为压轴图使用。作业提交自查清单对照 Rubric 与课程内容最终提交的 R 脚本应满足开头注释块数据集名称、来源平台 具体下载地址或获取方式、字段说明、分析目标数据加载与清洗read.csv注意fileEncoding处理 BOM、head()检视、subset()剔除异常值至少 5 幅直方图可从以下形态中自由组合geom_histogram(bins 10)全量分布概览geom_histogram(bins 30)细粒度分布过滤子集后的直方图解决偏斜geom_bin2d()二维直方图两个数值变量的联合分布geom_histogram(position identity, alpha ...)按类别填充的叠加直方图文本变量的分布geom_density()系列密度图可作为补充也可计入每幅图都有注释与读图结论图与图之间有叙事衔接最终形成完整故事脚本可运行无语法错误library()依赖声明齐全至少ggplot2。深入路径本课完整教学文档3-Data-Visualization/R/10-visualization-distributions/README.md含全部直方图与密度图代码、图像输出作业原文3-Data-Visualization/R/10-visualization-distributions/assignment.md上一课散点图、折线图、条形图与数据清洗3-Data-Visualization/R/09-visualization-quantities/README.md鸟类数据文件data/birds.csvPython 版对照课程同一主题的 Matplotlib 实现3-Data-Visualization/10-visualization-distributions/README.md课程其他语言的翻译版本可从 translations/en/3-Data-Visualization/R/10-visualization-distributions/assignment.md 出发在 translations 目录下按语言查找对应文件【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表