# 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
#> 5 D Ideal 2834
#> 6 E Fair 224
#> # ... with 29 more rows
```

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

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

# 5.5.2 习题解答

## 问题一

### 解答

```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))
```

## 问题二

### 解答

```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)
```

## 问题三

### 解答

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

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 相关的课程。

• ### 严格的评选标准，造就了这张分享量过千的在线机器学习课程榜单

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

• ### 2 个月如何从小白到 Python 高手，牛津大学博士带你飞！

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

• ### 面对来势汹汹的AI大潮，你该如何应对？

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

• ### 2017年最全的数据科学学习计划（1）

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

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

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

• ### 想学习数据科学？我们整理了一份优质编程入门课程清单

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

• ### CNS常客——单细胞转录组：不愧是我

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

• ### 【翻译】数据科学的多语言协作编程方式：Python + R + SQL

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

• ### ElasticSearch入门之环境搭建

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

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

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