十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

Data-Science-For-Beginners:用 R(ggplot2)可视化“数量“——基于明尼苏达鸟类数据集的完整实战指南

Data-Science-For-Beginners:用 R(ggplot2)可视化“数量“——基于明尼苏达鸟类数据集的完整实战指南 Data-Science-For-Beginners用 Rggplot2可视化数量——基于明尼苏达鸟类数据集的完整实战指南【免费下载链接】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 课程第 9 课R 语言版本Visualizing Quantities数量的可视化展开系统讲解如何使用 R 生态中的ggplot2、dplyr、tidyverse等包以仓库内置的明尼苏达州鸟类数据集data/birds.csv为素材从零构建折线图、散点图和柱状图。读完后你将掌握 ggplot2 的图形语法心智模型、按分析目标选择几何图元的决策方法、用subset()/filter清洗离群值、以及用group_by()summarise()coord_flip()完成分组统计与堆叠/叠加柱状图的完整工作流并能直接复现课程中给出的全部图表。说明本文主体内容对应仓库中的芬兰语翻译文档 translations/fi/3-Data-Visualization/R/09-visualization-quantities/README.md其英文原版为 3-Data-Visualization/R/09-visualization-quantities/README.md两者内容一致本文以中文版重新组织并补充了数据集层面的实证细节。课程定位为什么从数量开始本仓库的课程设计是10 周、20 课人人可学的数据科学其中3-Data-Visualization是第 3 个模块而第 09 课09-visualization-quantities是可视化模块的第一课聚焦数量quantity这一最基础的数据可视化概念。该课的官方描述是使用 R 的多个库围绕数量概念创建有趣的可视化并借助清洗过的明尼苏达鸟类数据集了解本地野生动物的有趣事实。R 版本课程位于独立的 3-Data-Visualization/R/ 目录树中与 Python 主线各章节下的notebook.ipynb并行覆盖 09 至 13 共五节可视化课程。ggplot2 与图形语法课程首选的作图库是 ggplot2——注意此处引用的是 R 包标准入口。一般意义上的数据可视化流程包含五个步骤确定要使用 dataframe 的哪些部分、对数据做必要的变换、分配 x/y 轴取值、决定展示何种图表、渲染图表。ggplot2是一个基于 The Grammar of Graphics图形语法的声明式绘图系统。图形语法是一种通用的可视化方案把图表拆分为尺度scales和图层layers等语义组件。用课程原文的概括用户只需告诉ggplot2两件事变量如何映射到美学属性aesthetics、以及使用哪些图元graphical primitives其余工作由ggplot2完成。正因这种少量代码即可生成单变量或多变量图表的能力ggplot2成为 R 中最流行的可视化包。课程给出了一个核心公式值得作为心智模型记住✅Plot Data Aesthetics Geometry图表 数据 美学 几何Data数据集本身Aesthetics要研究的变量x、y 变量Geometry图表类型折线图、柱状图等。按要讲的故事选择几何图元课程强调应根据数据特点与你想传达的故事来选择几何图元。原文给出的决策清单如下分析目标推荐图元分析趋势trends折线line、柱column比较数值compare values条形bar、柱column、饼图pie、散点scatterplot展示部分与整体的关系饼图pie展示数据分布distribution散点scatterplot、条形bar展示变量间关系relationships折线line、散点scatterplot、气泡bubble课程还建议配合 ggplot2 的官方 cheatsheetPDF作为速查并可在 3-Data-Visualization/R/09-visualization-quantities/assignment.md 中找到本课的配套作业。准备数据集明尼苏达鸟类 CSV打开 R 控制台导入数据集。课程的相对路径写法是相对于 R 课程目录的../../data/birds.csv实际数据集存放在仓库根目录的data/文件夹中即 data/birds.csv——如果你的工作目录不同请相应调整路径birds - read.csv(../../data/birds.csv, fileEncodingUTF-8-BOM) head(birds)这里read.csv显式指定了fileEncodingUTF-8-BOM因为该 CSV 文件带 BOM 头用十六进制查看文件首字节可以确认文件以 UTF-8 BOM 开头。head()输出前 5 行数据是文本与数值的混合体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对仓库中的实际文件做行数核对data/birds.csv 共 443 行1 行表头 442 条鸟类记录列结构与上表完全一致——前 7 列为文本型名称、学名、类别、目、科、属、保护状态后 6 列为数值型最小/最大长度、最小/最大体重、最小/最大翼展。这一文本 数值混合的结构正是后续选择图元时要考量的关键特征。构建翼展折线图让异常值自己浮出水面假设你想观察这些鸟的最大翼展MaxWingspan。安装并加载ggplot2然后用ggplot()指定数据与美学映射用geom_line()绘制折线图install.packages(ggplot2) library(ggplot2) ggplot(databirds, aes(xName, yMaxWingspan, group1)) geom_line()要点解析ggplot()是绘制任何 ggplot 图表的入口data传入数据框aes()内用xName, yMaxWingspan完成变量到美学属性的映射group1把所有点视作同一组从而连成一条折线否则ggplot2会按 x 的因子水平分组折线断裂geom_line()决定几何图元为折线。此时应立刻注意到一件事至少存在一个刺眼的离群值——翼展超过 2000 厘米等于 20 多米。课程用明尼苏达州难道有翼手龙Pterodactyls来调侃。对照 data/birds.csv 逐行核验筛选MaxWingspan 500可以确认超阈值记录恰好两条Bald eagle白头海雕2300与Prairie falcon草原猎隼1100两者都比正常值多了一个数量级极可能是录入时多写了一个 0 的笔误。课程的建议是不要跳出 R 去 Excel 里排序找异常而是在图表内继续推进可视化流程。给 x 轴加上可读的标签ggplot(databirds, aes(xName, yMaxWingspan, group1)) geom_line() theme(axis.text.x element_text(angle 45, hjust1)) xlab(Birds) ylab(Wingspan (CM)) ggtitle(Max Wingspan in Centimeters)theme()中axis.text.x element_text(angle45, hjust1)将 x 轴刻度文字旋转 45 度并右对齐避免相互重叠xlab()/ylab()分别为 x、y 轴添加说明文字ggtitle()为图表命名。即便如此442 个物种名仍然多到无法辨认。课程给出的策略是换一种画法只给离群值打标签把标签放进图内并改用散点图给标签腾出空间ggplot(databirds, aes(xName, yMaxWingspan, group1)) geom_point() geom_text(aes(labelifelse(MaxWingspan 500, as.character(Name), )), hjust0, vjust0) theme(axis.title.xelement_blank(), axis.text.xelement_blank(), axis.ticks.xelement_blank()) ylab(Wingspan (CM)) ggtitle(Max Wingspan in Centimeters)拆解这段代码geom_point()绘制散点geom_text(aes(labelifelse(MaxWingspan 500, as.character(Name), )), ...)条件标签——只对MaxWingspan 500的鸟输出名称其余输出空字符串hjust0, vjust0控制文本锚点方向theme(axis.title.xelement_blank(), ...)用element_blank()清空 x 轴标题、刻度文字与刻度线彻底消除 442 个标签的噪声。运行后图中会清晰露出两个孤点正对应前面核验到的白头海雕与草原猎隼——这就是从图到数据、再从数据回图的探索式分析闭环。过滤数据得到更连贯的数据集既然两个离群值大概率是多写一个 0的录入错误想象一只翼展 25 米的白头海雕就用subset()构造一个剔除它们的新数据框birds_filtered - subset(birds, MaxWingspan 500) ggplot(databirds_filtered, aes(xName, yMaxWingspan, group1)) geom_point() ylab(Wingspan (CM)) xlab(Birds) ggtitle(Max Wingspan in Centimeters) geom_text(aes(labelifelse(MaxWingspan 500, as.character(Name), )), hjust0, vjust0) theme(axis.text.xelement_blank(), axis.ticks.xelement_blank())过滤后数据在翼展维度上明显更连贯、更易解读对照上文的实证核验原 442 条记录中仅 2 条被剔除。课程随后指出折线图与散点图适合展示值及其分布但接下来要关注数据集内在的数量问题并给出了本课要回答的三个典型问题存在多少个鸟类类别Category各类别的数量是多少灭绝extinct、濒危endangered、稀有rare、常见common的鸟各有多少对应ConservationStatus列取值如 LC 等 IUCN 缩写按林奈分类学各个属Genus和目Order有多少种柱状图展示分组数量柱状图bar chart在需要展示数据分组时非常实用。课程第一段柱状图代码同时演示了dplyr的管道式分组汇总 tidyr的长表转换 ggplot2 堆叠填充的完整链条install.packages(dplyr) install.packages(tidyverse) library(lubridate) library(scales) library(dplyr) library(ggplot2) library(tidyverse) birds_filtered %% group_by(Category) %% summarise(n n(), MinLength mean(MinLength), MaxLength mean(MaxLength), MinBodyMass mean(MinBodyMass), MaxBodyMass mean(MaxBodyMass), MinWingspan mean(MinWingspan), MaxWingspan mean(MaxWingspan)) %% gather(key, value, -c(Category, n)) %% ggplot(aes(x Category, y value, group key, fill key)) geom_bar(stat identity) scale_fill_manual(values c(#D62728, #FF7F0E, #8C564B, #2CA02C, #1F77B4, #9467BD)) xlab(Category) ggtitle(Birds of Minnesota)逐层解读这条管道group_by(Category)按类别分组summarise(...)每组内计算样本数n()与 6 个数值列的均值得到一行一类别的汇总表gather(key, value, -c(Category, n))宽转长——把 6 个均值列融化成两列key/value保留Category与n这是geom_bar堆叠的前提ggplot(..., aes(xCategory, yvalue, groupkey, fillkey))类别做 x 轴value 做 y 轴key 决定堆叠分段与颜色geom_bar(statidentity)使用现成数值而非计数scale_fill_manual(values...)手工指定 6 种颜色的填充色板即 ggplot 经典 set1 配色。课程紧接着指出这张图的缺点塞入的非分组统计量太多难以阅读。教训是只选你想画的数据。于是改为仅统计类别内的物种数量。由于类别数较多改用横向布局以容纳所有条目birds_count - dplyr::count(birds_filtered, Category, sort TRUE) birds_count$Category - factor(birds_count$Category, levels birds_count$Category) ggplot(birds_count, aes(Category, n)) geom_bar(stat identity) coord_flip()dplyr::count(..., sort TRUE)统计Category的取值频次并按频次排序关键技巧把计数结果再赋值回Category因子且levels保持排序后的顺序——ggplot2 按因子水平顺序而非字母顺序绘制这一步保证了条形按数量从高到低排列coord_flip()翻转坐标轴绘制横向条形图。这张图一眼就能看出Ducks/Geese/Waterfowl鸭/雁/水禽类别数量最多。对照 data/birds.csv 的实际统计过滤MaxWingspan 500后Ducks/Geese/Waterfowl45 种、New World warblers新世界莺41 种、Sandpipers/Allies鹬/近缘类34 种、Gulls/Terns/Skimmers鸥/燕鸥/剪嘴鸥28 种、New World sparrows新世界雀26 种——与图中条形长度次序一致。课程还点出背景明尼苏达是万湖之州水禽最多并不令人意外。这里也留下了一个练习对这个数据集做其他维度的计数如ConservationStatus、Genus、Order看看还有什么惊喜。数据比较新轴与叠加条形有了分组数据后可以通过创造新的轴来做不同维度的比较。课程示例是各类别最大体长MaxLength的比较birds_grouped - birds_filtered %% group_by(Category) %% summarise( MaxLength max(MaxLength, na.rm T), MinLength max(MinLength, na.rm T) ) %% arrange(Category) ggplot(birds_grouped, aes(Category, MaxLength)) geom_bar(statidentity) coord_flip()逻辑分组后对MaxLength取组内最大值na.rm T跳过缺失值再arrange(Category)排序最后用横向条形图渲染。结论符合直觉蜂鸟hummingbirds的 MaxLength 最小鹈鹕Pelicans和鹅Geese则大得多——当数据合乎逻辑时你会感到踏实。更进一步可以**叠加superimpose**两组数据对同一类别同时绘制MaxLength与MinLength两条条ggplot(databirds_grouped, aes(xCategory)) geom_bar(aes(yMaxLength), statidentity, positionidentity, fillblue) geom_bar(aes(yMinLength), statidentity, positionidentity, fillorange) coord_flip()这里的关键参数是positionidentity默认情况下第二个geom_bar会与第一个错位堆叠指定positionidentity后两层条形起点重合、直接叠画蓝色长条压着橙色短条一眼即可读出每类鸟体长区间的上下界。挑战、作业与延伸阅读课程结尾的 Challenge 建议这个鸟类数据集提供了特定生态系统中鸟类类型的丰富信息去查找其他面向鸟类或其他主题的数据集练习围绕它们构建图表发现此前不知道的事实。配套作业 Viivat, hajontakaaviot ja pylväätLines, Scatters, and Bars 要求为本数据集写一个脚本为某个具体物种示例为雪雁 Snow goose挖掘有趣事实并用本课的三种图型折线、散点、条形在 notebook 里讲一个完整的故事。其评分标准rubric明确列出三个维度——良好的标注good markings、强叙事strong storytelling、吸引人的图表compelling charts——三者齐备为优秀缺一为及格缺二为需改进。复习与自学习部分则指出方向本课时只是 ggplot2 可视化数量的起点建议研究其他可视化处理方式并尝试用Lattice、Plotly等包对同一数据集做不同风格的可视化。小结本课建立的完整工作流把整课串起来实际上是一条可复用的 R 可视化流程导入read.csv(..., fileEncodingUTF-8-BOM)head()快速探查数据结构本数据集为 442 条记录、文本数值混合选择图元用 Plot Data Aesthetics Geometry 与五类分析目标决策表先折线后散点让离群值白头海雕 2300cm、草原猎隼 1100cm自己暴露降噪theme()element_blank() 条件化geom_text()只保留对叙事有用的标签清洗subset(birds, MaxWingspan 500)得到连贯的birds_filtered分组统计group_by()summarise()或dplyr::count()生成汇总数据框用因子levels控制排序渲染geom_bar(statidentity)、coord_flip()横向化、positionidentity叠加完成从计数到比较再到区间叠加的递进。仓库中本课的全部素材——R 源码课程文档、配图、作业与评分标准——分别位于 3-Data-Visualization/R/09-visualization-quantities/README.md、3-Data-Visualization/R/09-visualization-quantities/assignment.md 与 3-Data-Visualization/R/09-visualization-quantities/images/数据集位于 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),仅供参考
返回列表