R数据科学1_进阶
本系列为R语言进阶版学习,包含《R数据科学》的代码笔记及课后习题,已收录至“R数据科学”专栏,空余时间会持续更新。
第一部分 探索
第1章 使用ggplot2进行数据可视化
准备工作:安装并加载tidyverse包
install.packages("tidyverse")
library("tidyverse") #ggplot2是tidyverse的核心R包,使用ggplot2前可以先加载tidyverse包
使用ggplot做个简单的散点图:
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))
- 练习:
- 运行ggplot(data = mpg)
ggplot(data = mpg)
- 数据集mpg有几行几列
view(mpg) #查看完整数据框
head(mpg) #查看前6行数据
tail(mpg) #查看后6行数据
nrow(mpg) #查看mpg行数
ncol(mpg) #查看mpg列数
dim(mpg) #查看mpg行列数
glimpse(mpg) #查看数据框信息,其中包含行列数
- 变量drv的意义是什么?使用?mpg命令阅读帮助文件以找出答案
help(mpg)
#drv:the type of drive train, where f = front-wheel drive, r = rear wheel drive, 4 = 4wd
- 使用hwy和cyl绘制一张散点图
ggplot(data = mpg)+
geom_point(mapping = aes(x = cyl,y = hwy))
ggplot(mpg,aes(x = cyl,y = hwy))+
geom_point()
- 如果使用class和drv绘制散点图,会发生什么情况?为什么这张图没什么用处?
ggplot(data = mpg)+
geom_point(mapping = aes(x = class,y = drv)) #class和drv为分类变量,并存在重复,不适合用散点图展示
ggplot(mpg,aes(x = class,y = drv))+
geom_point()
#散点图不显示观测值数量,因此当所有x,y为唯一值时,最适合绘制简单散点图
count(mpg, drv, class) #快速查看变量类型和数量
# 结果:
# A tibble: 12 × 3
drv class n
<chr> <chr> <int>
1 4 compact 12
2 4 midsize 3
3 4 pickup 33
4 4 subcompact 4
5 4 suv 51
6 f compact 35
7 f midsize 38
8 f minivan 11
9 f subcompact 22
10 r 2seater 5
11 r subcompact 9
12 r suv 11
- 扩展:
① 使用count可绘制带有观测值大小的散点图
ggplot(mpg,aes(x = class,y = drv))+
geom_count()
② 使用色标显示观测值
mpg %>%
count(class, drv) %>%
ggplot(aes(x = class, y = drv))+
geom_tile(mapping = aes(fill = n))
③ 补全空白区域
mpg %>%
count(class, drv) %>%
complete(class, drv, fill = list(n = 0)) %>% #使用n=0的色标填补空白区域
ggplot(aes(x = class,y = drv))+
geom_tile(mapping = aes(fill = n))
1.3 图形属性映射
ggplot(data = mpg)+
geom_point(mapping = aes(x = displ, y = hwy, color = class)) #以class颜色分类
ggplot(data = mpg)+
geom_point(mapping = aes(x = displ, y = hwy, size = class)) #以class尺寸分类
ggplot(data = mpg)+
geom_point(mapping = aes(x = displ, y = hwy, alpha = class)) #以class透明度分类
ggplot(data = mpg)+
geom_point(mapping = aes(x = displ, y = hwy, shape = class)) #以class形状分类
注意:ggplot2只能同时使用6种形状,当超过6种时候,多出的变量将不会显示在图中
aes() #可以将图层中每个图形属性映射集合在一起,然后传递给该图层的映射参数。
ggplot(data = mpg)+
geom_point(mapping = aes(x = displ,y = hwy), color = "blue") #手动设计图形属性,让图中所有点为蓝色
形状用数值表示,如下图所示:有些形状相同,比如0、15和22都是正方形。区别在于color和fill这两个图形属性。空心形状(0-14)的边界颜色由color决定;实心形状(15-20)的填充颜色由color决定;填充形状(21~24)的边界颜色由color决定,填充颜色由fill决定
- 练习:
- 以下这段代码有什么错误?为什么点不是蓝色的?
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = "blue"))
#此处color是包含在aes映射参数中,没有把blue当作颜色,而是把blue当作分类变量了,只取了一个blue值
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = 1))
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = 1:234))
#将color取值为1,1:234效果同上
- mpg中哪些变量是分类变量?哪些变量是连续变量?(提示:输入?mpg来阅读这个数据集的文档)当调用mpg时,如何才能看到这些信息?
mpg #<chr>为分类变量,<int>、<dbl>为连续型变量
glimpse(mpg) #使用glimpse()函数可以简洁的显示数据框每列的属性
- 将一个连续变量映射为color、size 和shape。对分类变量和连续变量来说,这些图形属性的表现有什么不同?
ggplot(mpg, aes(x = displ, y = hwy, color = cty))+
geom_point() #映射为color
ggplot(mpg, aes(x = displ, y = hwy, size = cty))+
geom_point() #映射为size
ggplot(mpg, aes(x = displ, y = hwy, shape = cty)) +
geom_point() #此时会报错,因为cty为连续型变量,将它映射到形状上时是无法区分不同形状对应的大小顺序的
- 如果将同一个变量映射为多个图形属性,会发生什么情况?
ggplot(mpg, aes(x = displ, y = hwy, color = cty, size = displ))+
geom_point()
将单个变量映射到多个变量是冗余信息,所以在大多数情况下尽量避免将单个变量映射到多个变量
- stroke这个图形属性的作用是什么?它适用于哪些形状?(提示:使用?geom_point 命令。)
#作用是调整边框粗细
ggplot(mtcars, aes(wt, mpg))+
geom_point