ARTICLE DETAIL

资讯详情

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

Data Science For Beginners:使用 R 与 ggplot2 可视化数据分布(直方图与密度图实战)

Data Science For Beginners:使用 R 与 ggplot2 可视化数据分布(直方图与密度图实战) 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 课程数据可视化系列的第十课承接上一课可视化数量围绕明尼苏达州鸟类数据集 data/birds.csv 展开。你将学会用 R 的ggplot2绘制直方图Histogram、二维直方图geom_bin2d与密度图Density Plot掌握bins、adjust、fill、alpha等核心参数并理解先看分布、再谈统计的数据探索思路。学完本课你将能够用十几行 R 代码快速回答这批数据是如何分布的、哪些区间密集、变量之间是否存在聚集关系这类问题。数据集回顾从散点图到分布在上一课3-Data-Visualization/R/09-visualization-quantities/README.md中我们已经通过折线图与散点图发现数据中存在明显异常值例如翼展超过 2000 厘米的翼龙级数据并确认这些多为录入错误。本课继续沿用同一份清洗后的数据把观察视角从数量转向分布——即数据沿坐标轴的排布形态。在 R 控制台中加载ggplot2与数据沿用上一课的异常值过滤逻辑MaxWingspan 500library(ggplot2) birds - read.csv(../../data/birds.csv, fileEncoding UTF-8-BOM) # 沿用上一课结论剔除翼展超过 500 的异常记录疑似录入错误 birds_filtered - subset(birds, MaxWingspan 500) head(birds_filtered)数据集的 13 个字段来源见 data/birds.csv共 444 行在前几行中已经覆盖了物种学名、分类阶元目/科/属、保护状态以及长度、体重、翼展的最小/最大值。过滤后的头部数据示例NameScientificNameCategoryOrderFamilyGenusConservationStatusMinLengthMaxLengthMinBodyMassMaxBodyMassMinWingspanMaxWingspan0Black-bellied whistling-duckDendrocygna autumnalisDucks/Geese/WaterfowlAnseriformesAnatidaeDendrocygnaLC4756652102076941Fulvous whistling-duckDendrocygna bicolorDucks/Geese/WaterfowlAnseriformesAnatidaeDendrocygnaLC4553712105085932Snow gooseAnser caerulescensDucks/Geese/WaterfowlAnseriformesAnatidaeAnserLC6479205040501351653Rosss gooseAnser rossiiDucks/Geese/WaterfowlAnseriformesAnatidaeAnserLC57.364106615671131164Greater white-fronted gooseAnser albifronsDucks/Geese/WaterfowlAnseriformesAnatidaeAnserLC648119303310130165说明从源码结构看本课的 R 练习3-Data-Visualization/R/10-visualization-distributions/README.md与配套图片images/位于 R 专版目录下原始数据的目录级路径../../data/birds.csv是相对本课目录而言在仓库根目录下即 data/birds.csv。先用上一课用过的散点图快速瞥一眼分布——按目Order查看最大体长ggplot(data birds_filtered, aes(x Order, y MaxLength, group 1)) geom_point() ggtitle(Max Length per order) coord_flip()这张图能给出体长按鸟类目分布的整体概览但散点图并不是呈现真实分布的最优手段——点与点之间相互重叠、密度难以量化。真正的分布展示通常交给直方图来完成。直方图把连续数值切成箱子ggplot2用geom_histogram()提供直方图。直方图长得像柱状图但本质不同它把数值轴切成若干等宽区间bins统计每个区间内落入的数据条数频数用柱高表现上升与下降从而直观呈现数据集中或分散的区域。构建直方图的先决条件是数值型数据。对全量过滤后数据集的MaxBodyMass最大体重绘制 10 个箱子的直方图ggplot(data birds_filtered, aes(x MaxBodyMass)) geom_histogram(bins 10) ylab(Frequency)从图中可以立刻读出数据集中 400 多只鸟里绝大多数最大体重落在 2000 以下的区间右侧长尾延伸出少量巨鸟。直方图把 400 行数据压缩成一条一目了然的密度轮廓——这正是散点图难以做到的。bins 参数颗粒度决定洞察把bins从 10 提高到 30每个箱子的宽度变小分布形态更加细腻ggplot(data birds_filtered, aes(x MaxBodyMass)) geom_histogram(bins 30) ylab(Frequency)对比两张图可以发现规律bins越大频数分布越能暴露局部起伏但过大则会出现大量空箱、噪声凸显bins越小曲线越平滑但会掩盖细节。bins参数是直方图最重要的旋钮默认值为 30实际使用时应根据数据量级与业务问题反复调节。过滤数据矫正左偏上面两张图都明显左偏大部分体重集中在低值区间。如果我们只关心体重小于 60 的那部分鸟类可以先过滤再绘图得到更均衡的形态birds_filtered_1 - subset(birds_filtered, MaxBodyMass 1 MaxBodyMass 60) ggplot(data birds_filtered_1, aes(x MaxBodyMass)) geom_histogram(bins 30) ylab(Frequency)✅ 动手试一试换不同的过滤条件与数据点想看完整数据分布时可以去掉MaxBodyMass的过滤条件观察所有标签的分布形态。二维直方图两个分布的关系ggplot2提供geom_bin2d()绘制二维直方图——把平面切成二维网格用颜色深浅cell count表示每个格子的数据密度是观察两个分布之间关系的内建手段。这里对比MaxBodyMass与MaxLength并用 viridis 色阶亮色表示高密度突出聚集区ggplot(data birds_filtered_1, aes(x MaxBodyMass, y MaxLength)) geom_bin2d() scale_fill_continuous(type viridis)从结果看两个变量沿一条预期中的斜向主轴呈明显正相关聚集且存在一个特别强的收敛点——体重与体长同步增大符合生物学常识。这也是用分布看关系的典型范式不计算相关系数先看二维密度云是否呈线性带。文本数据的分布保护状态的变换直方图默认面向数值数据。那么面对文本型分类数据比如保护状态怎么办birds.csv的ConservationStatus字段记录了鸟类保护状态缩写来自 IUCN 红色名录分类体系本数据集中出现CR极危Critically EndangeredEN濒危EndangeredEX灭绝ExtinctLC无危Least ConcernNT近危Near ThreatenedVU易危Vulnerable这些是文本值无法直接进入直方图的数值轴因此需要做一次编码变换把字母缩写映射为有序的数值占位符x1~x6再作为fill分组映射到直方图上同时叠加最小翼展MinWingspanbirds_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透明度设为 40%让重叠区域仍可辨识scale_fill_manual()手动指定分组配色与图例标签。从图中看不出最小翼展与保护状态之间存在明显相关性。你可以用同样的方法去考察数据集里的其他元素体长、体重等尝试不同过滤条件看看能否找到有价值的关联。密度图把阶梯曲线平滑成弧线细心的读者会发现前面所有直方图都是阶梯状的——每个箱子是水平顶边整体并不流畅。geom_density()密度图用核密度估计KDE把这种阶梯轮廓平滑成连续弧线更适合观察分布的形状。先看MinWingspan的密度图ggplot(data birds_filtered_1, aes(x MinWingspan)) geom_density()可以看到它与之前最小翼展直方图的形态互相呼应只是曲线更加平滑。同理前面那张锯齿感很强的MaxBodyMass直方图30 bins 版本也可以用密度图优雅地重建ggplot(data birds_filtered_1, aes(x MaxBodyMass)) geom_density()adjust 参数控制平滑程度如果你想要平滑但别太平滑的折中效果可以调节adjust参数。adjust是核密度估计的带宽缩放因子默认值为 1值越小曲线越贴合原始数据、越毛糙值越大曲线越平滑、越失真。例如adjust 1/5会显著缩小带宽还原更多局部波动ggplot(data birds_filtered_1, aes(x MaxBodyMass)) geom_density(adjust 1/5)✅ 建议继续阅读geom_density()的官方参数文档并逐个实验kernel核函数类型、bw带宽、na.rm等都会显著改变曲线形态。分组密度一条命令看多类对比密度图非常擅长做分面式的对比说明。比如想了解不同鸟目的最大体重分布是否不同只需几行代码把Order映射到fill并用alpha 0.5半透明叠加ggplot(data birds_filtered_1, aes(x MaxBodyMass, fill Order)) geom_density(alpha 0.5)多个目的密度曲线重叠在一起各自峰位、峰高与尾部形态差异一目了然——这种解释性可视化正是密度图的价值所在把统计分布的差异直接画给读者看。深入学习挑战与课后实践 挑战直方图是比基础散点图、柱状图、折线图更精细的一类图表。请上网搜索直方图的优秀应用案例思考它们被用在哪些场景、展示了什么信息、通常在哪些领域或研究方向中被大量使用例如图像直方图、灰度分布、质量控制等。复习与自学本课用ggplot2绘制了更复杂的图表。接下来可以研究geom_density_2d()——它输出一个或多个维度上的连续概率密度曲线即二维密度等高线与geom_bin2d()互为补充前者用等高线后者用格子色块。阅读其官方文档理解其参数contour、bins等与适用场景。课后作业本课作业在 translations/fa/3-Data-Visualization/R/10-visualization-distributions/assignment.md。练习目标换一个数据集例如从公开数据平台获取用 R 写一个脚本讲出这个数据集的故事并确保讨论中至少使用 5 张直方图评估标准包括数据集来源说明、直方图数量以及脚本的可运行性。小结本课完成了一次完整的分布探索闭环先用散点图获得整体印象再用geom_histogram配合bins参数与数据过滤观察数值分布用geom_bin2d探查两个分布的聚集关系通过文本编码把分类变量纳入直方图最后用geom_density配合adjust与fill分组得到平滑可比的密度轮廓。这套方法源自本课程 R 版教材 3-Data-Visualization/R/10-visualization-distributions/README.md数据与示例均可直接在本仓库复现运行环境只需 R 与ggplot2包数据文件位于 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),仅供参考
返回列表