专栏首页庄闪闪的R语言手册R数据科学|5.5.2内容介绍及课后习题解答

R数据科学|5.5.2内容介绍及课后习题解答

5.5.2 两个分类变量

要想对两个分类变量间的相关变动进行可视化表示,需要计算出每个变量组合中的观测数量。常用的两种方法有:

  • 使用内置的geom_count() 函数:
 ggplot(data = diamonds) +
 geom_count(mapping = aes(x = cut, y = color))

【注】图中每个圆点的大小表示每个变量组合中的观测数量。相关变动就表示为特定 x 轴变量值与特定 y 轴变量值之间的强相关关系。

  • 使用dplyr
diamonds %>%
 count(color, cut)
#> Source: local data frame [35 x 3]
#> Groups: color [?]
#>
#> color cut n
#> <ord> <ord> <int>
#> 1 D Fair 163
#> 2 D Good 662
#> 3 D Very Good 1513
#> 4 D Premium 1603
#> 5 D Ideal 2834
#> 6 E Fair 224
#> # ... with 29 more rows

接着使用geom_tile()函数和填充图形属性进行可视化表示:

diamonds %>%
 count(color, cut) %>%
 ggplot(mapping = aes(x = color, y = cut)) +
 geom_tile(mapping = aes(fill = n))

【注】如果分类变量是无序的,那么可以使用seriation包对行和列同时进行重新排序,以便更清楚地表示出有趣的模式。对于更大的图形,你可以使用d3heatmapheatmaply包,这两个包都可以生成有交互功能的图形。

5.5.2 习题解答

问题一

如何调整count数据,使其能更清楚地表示出切割质量在颜色间的分布,或者颜色在切割质量间的分布?

解答

为了清楚地显示切割质量在颜色内的分布,可以引入一个新的变量prop,即每个切割在颜色内的比例。

diamonds %>%
  count(color, cut) %>%
  group_by(color) %>%
  mutate(prop = n / sum(n)) %>%
  ggplot(mapping = aes(x = color, y = cut)) +
  geom_tile(mapping = aes(fill = prop))

同理可计算颜色在切割质量间的分布:

diamonds %>%
  count(color, cut) %>%
  group_by(cut) %>%
  mutate(prop = n / sum(n)) %>%
  ggplot(mapping = aes(x = color, y = cut)) +
  geom_tile(mapping = aes(fill = prop))

问题二

使用geom_tile()函数结合 dplyr 来探索平均航班延误数量是如何随着目的地和月份的变化而变化的。为什么这张图难以阅读?如何改进?

解答

flights %>%
  group_by(month, dest) %>%
  summarise(dep_delay = mean(dep_delay, na.rm = TRUE)) %>%
  ggplot(aes(x = factor(month), y = dest, fill = dep_delay)) +
  geom_tile() +
  labs(x = "Month", y = "Destination", fill = "Departure Delay")
#> `summarise()` regrouping output by 'month' (override with `.groups` argument)

从上图可以发现存在缺失值,因此可以通过删除缺失值来改进:

flights %>%
  group_by(month, dest) %>%                                 # This gives us (month, dest) pairs
  summarise(dep_delay = mean(dep_delay, na.rm = TRUE)) %>%
  group_by(dest) %>%                                        # group all (month, dest) pairs by dest ..
  filter(n() == 12) %>%                                     # and only select those that have one entry per month 
  ungroup() %>%
  mutate(dest = reorder(dest, dep_delay)) %>%
  ggplot(aes(x = factor(month), y = dest, fill = dep_delay)) +
  geom_tile() +
  labs(x = "Month", y = "Destination", fill = "Departure Delay")
#> `summarise()` regrouping output by 'month' (override with `.groups` argument)

问题三

为什么在以上示例中使用aes(x = color, y = cut)要比aes(x = cut, y = color)更好?

解答

更好的做法是使用带有更多类别的分类变量,或者在y轴上较长的标签。如果可能的话,标签应该是水平的,因为这样更容易阅读。并且,切换顺序不会导致标签重叠。

diamonds %>%
  count(color, cut) %>%
  ggplot(mapping = aes(y = color, x = cut)) +
  geom_tile(mapping = aes(fill = n))

本文分享自微信公众号 - 庄闪闪的R语言手册(Zss_R4ds),作者:我才是赵西西

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-01-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • R数据科学|3.4内容介绍及习题解答

    通过基于变量名的操作,select()函数可以让你生成一个有用的变量子集。基本用法如下:

    庄闪闪
  • R数据科学|3.7内容介绍及习题解答

    虽然与summarize()函数结合起来使用是最有效的,但分组也可以与mutate()和filter()函数结合,以完成非常便捷的操作。示例如下:

    庄闪闪
  • R数据科学|3.5内容介绍及习题解答

    上节我们对选择现有的列进行了介绍与习题解答,现在对数据框添加新列进行介绍,这里使用mutate()函数,注意:mutate()总是将新列添加在数据集的最后。

    庄闪闪
  • R数据科学|5.4内容介绍及习题解答

    我们不建议使用这种方式,因为一个无效测量不代表所有测量都是无效的。此外,如果数据质量不高,若对每个变量都采取这种做法,那么你最后可能会发现数据已经所剩无几!

    庄闪闪
  • R数据科学|第十一章内容介绍

    因子在 R 中用于处理分类变量。从历史上看,因子远比字符串更容易处理。因此,R 基础包中的很多函数都自动将字符串转换为因子。

    庄闪闪
  • R数据科学|5.3课后习题解答

    研究 x、y 和 z 变量在 diamonds 数据集中的分布。你能发现什么?思考一下,对于一条钻石数据,如何确定表示长、宽和高的变量?

    庄闪闪
  • 想转行人工智能?机会来了!!!

    昱良
  • 想转行人工智能?机会来了!!!

    2018年1月 教育部印发的《普通高中课程方案和语文等学科课程标准》新加入了数据结构、人工智能、开源硬件设计等 AI 相关的课程。

    Java团长
  • 研究了数千个在线课程,我整理了一份数据科学入门课清单

    大数据文摘
  • 严格的评选标准,造就了这张分享量过千的在线机器学习课程榜单

    选自Medium 作者:David Venturi 机器之心编译 本文作者 David Venturi 是技术博客 freeCodeCamp 的知名主笔之一。 ...

    机器之心
  • 2 个月如何从小白到 Python 高手,牛津大学博士带你飞!

    Python 可以做任何事情。无论是从入门级选手到专业级数据挖掘、科学计算、图像处理、人工智能,Python 都可以胜任。或许是因为这种万能属性,周围好更多的小...

    小莹莹
  • 面对来势汹汹的AI大潮,你该如何应对?

    2018年1月 教育部印发的《普通高中课程方案和语文等学科课程标准》新加入了数据结构、人工智能、开源硬件设计等 AI 相关的课程。

    abs_zero
  • 2017年最全的数据科学学习计划(1)

    导读 希望这篇学习路线图对你学习数据科学有帮助,需要说明的是国内本文中所说的数据科学家在国内一般称为数据分析师或者数据挖掘师,尽管称谓不同,但文章的路线图仍可...

    小莹莹
  • 软件开发|机器学习实践指南

    你可能在各种应用中听说过机器学习machinelearning(ML),比如垃圾邮件过滤、光学字符识别(OCR)和计算机视觉。

    用户8710643
  • 想学习数据科学?我们整理了一份优质编程入门课程清单

    原作者 David Venturi 编译 CDA 编译团队 本文为 CDA 数据分析师原创作品,转载需授权 一年以前,我还只是一个没有任何编程经验的电...

    CDA数据分析师
  • CNS常客——单细胞转录组:不愧是我

    动物单细胞的研究有将近10年了,每年都是CNS的常客。在国内形成了北汤南郭的局面,一个是单细胞转录组的世界第一人,一个促成了单细胞从追求深度到追求数量的转变。具...

    生信宝典
  • 【翻译】数据科学的多语言协作编程方式:Python + R + SQL

    在这篇文章中,我将试图使用一种新的方法来介绍数据科学编程。 R vs. Python question中集中谈论了数据科学编程的问题,每个人都...

    小莹莹
  • ElasticSearch入门之环境搭建

    ElasticSearch是基于Apache Lucene构建的开源搜索引擎 采用Java编写,提供了简单易用的RESTFul API 轻松的横向扩展,可支持P...

    蒋老湿
  • 还在为自学数据科学发愁吗?化学工程毕业生教你如何转行

    作为一名最近毕业于化学工程专业的学生,我第一份工作是在一家科技公司担任数据分析师。我曾在这里记录了从化学工程到数据科学的转变。从那时起,每当我与学校的学生谈论这...

    大数据文摘

扫码关注云+社区

领取腾讯云代金券