尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

JHU R 数据可视化笔记(四)

JHU R 数据可视化笔记(四) 通过向fct_reorder函数提供我们想要重新排序的向量以及我们想要用来对因子水平进行排序的数据中的另一个向量我们可以轻松地按照排序向量值的升序获得图表上所需的水平顺序。如果我们想按降序进行也可以轻松实现。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/442ccb0ea03348dc0eed17e31d51f8f4_4.png总结与工具forcats包含许多方便的函数可以快速以这种方式重新排序因子。因此你应该花几分钟时间进一步熟悉这些函数以备在你自己数据中需要使用它们。请记住这个技巧在你未来的项目中处理分类数据时它会非常有用。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/442ccb0ea03348dc0eed17e31d51f8f4_6.png在本节课中我们一起学习了因子的概念、其默认顺序的问题以及如何使用forcats包中的fct_relevel和fct_reorder函数来手动重排因子水平从而在数据可视化中获得正确的分类顺序。掌握因子是控制图表中分类变量显示顺序的关键。067连接和透视 https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_0.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_2.png在本节课中我们将学习两个重要的数据整理技能如何将数据从“宽格式”转换为“长格式”即数据透视以及如何将来自不同来源的数据表合并即连接。掌握这些技能对于整合和准备项目数据至关重要。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_4.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_6.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_7.png上一节我们介绍了处理字符串、日期和分类数据的基本工具。本节中我们来看看如何重塑和合并数据表。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_9.png首先有一个小知识点需要提及。在R中你可以为Tibble或数据框创建包含空格的列标题。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_10.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_12.png# 使用反引号创建包含空格的列名Column Name With Spaces-c(1,2,3)https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_14.png通常不建议在数据处理阶段这样做除非是在为图表制作图例或坐标轴标题时需要确保格式美观。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_16.png如果你导入的数据本身列名就包含空格那么在调用这些列时也需要用反引号将列名括起来。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_18.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_19.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_21.png理解了列名的处理方式后现在我们来回顾将数据从宽格式转换为长格式的概念。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_23.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_24.png在Tidyverse中我们更倾向于使用长格式数据即每一行代表一个单一的观测值。但你经常会发现现实世界中的数据是宽格式的即每一行可能是一个案例但该案例有多个观测值分布在不同的列中。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_26.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_27.png例如下面这个简单的表格就是宽格式。每个单元或案例在time1、time2和time3有三个观测值因此观测值在表格中是横向排列的。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_29.png| case | time1 | time2 | time3 ||------|-------|-------|-------|| A | 10 | 12 | 15 || B | 8 | 9 | 11 |这不是在Tidyverse中处理数据的好方式因此我们需要能够将这种数据透视成长格式。我们使用pivot_longer函数来实现。以下是使用pivot_longer的步骤首先将我们想要透视的数据传递给函数。然后选择我们想要进行透视的列。接着为包含原列名的新列指定一个名称。最后为存放被透视数值的新列指定一个名称。如果这听起来不太直观没关系先运行函数观察输出结果你就能逐渐理解其原理。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_31.pnglibrary(tidyr)wide_data-tibble(casec(A,B),time1c(10,8),time2c(12,9),time3c(15,11))long_data-pivot_longer(wide_data,colsc(time1,time2,time3),# 选择要透视的列names_totime_point,# 新列存放原列名time1, time2...values_tomeasurement)# 新列存放对应的数值https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_33.png运行函数后你会看到之前的宽格式数据现在变成了长格式。这相当于进行了部分转置。理解这种差异非常重要因为它可能与你习惯的数据思维方式不同并且对于在Tidyverse中工作至关重要。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_35.png如果出于某些原因例如格式化表格你需要将数据从长格式转回宽格式可以使用pivot_longer的逆函数pivot_wider。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_37.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_39.png# 将长格式数据转回宽格式back_to_wide-pivot_wider(long_data,names_fromtime_point,# 从哪一列获取新列名values_frommeasurement)# 从哪一列获取数值https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_41.png建议你在两种格式之间来回转换几次观察单元格是如何从宽格式移动到长格式并返回的从而更好地理解这个函数的工作原理。刚开始使用时可能不太直观但多加练习就会熟悉。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_42.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/jhu-r-dtviz/img/47065c9f4bdc77f52c06335c5598d2b5_44.png学会了如何重塑单个表格的形状后接下来我们看看如何合并来自不同表格的数据。你的项目数据很可能来自多个电子表格、CSV文件或其他类型的文件你需要将它们合并成一个完整的大表。假设你有一些关于世界多个城市的数据但它们分散在不同的表格中。表格A包含纽约、伦敦、堪培拉和内罗毕的变量X数据。表格B包含纽约、伦敦、堪培拉和雅加达的变量Y数据。将纽约、伦敦和堪培拉这两个变量的数据合并到一个表格中会非常方便。我们可以通过“连接”操作来实现。连接的工作原理是在不同的表中查找“键值”并基于这个键值将表拼接起来。键值本质上是不同表中共有的列。例如这里的共有列是“城市”。我们可以基于该键值列使用连接来合并数据。主要有四种类型的连接左连接、右连接、内连接和全连接。以下是四种连接的说明左连接保留连接函数中第一个表的所有行并尽可能匹配第二个表中的数据。结果合并表中将包含第一个表的所有行但如果第二个表中没有某个键值的数据则该处显示为缺失值NA。右连接与左连接相反保留第二个表的所有行并匹配第一个表的数据。第一个表中没有的键值对应的数据会显示为缺失值。内连接只保留键值在两个表的共有列中都存在的行。即结果只包含两个表共有的键值对应的数据。全连接保留两个表中的所有行缺失的数据用NA填充。连接数据可能相当棘手也存在一定风险因为有很大的出错空间可能导致数据丢失或错误合并。键值列中的微小不一致都可能造成错误和不匹配。有时你可能需要进行更复杂的模式匹配或其他技巧才能使连接正常工作。务必、务必、务必通过手动检查数据来验证你的连接操作是否正确。关于连接的更多信息强烈建议你阅读《R for Data Science》的第13章该章节已包含在本视频的后续阅读材料中。如果你能理解那部分内容你将能够合并各种有趣的数据并创建出色的可视化图表。本节课中我们一起学习了数据整理的两个高级技能使用pivot_longer和pivot_wider进行数据透视以及使用左连接、右连接、内连接和全连接来合并多个数据表。掌握这些技能能帮助你整合不同来源和格式的数据为后续的数据分析和可视化打下坚实的基础。
返回列表