【R语言数据科学】:(七)数据分布可视化
R语言数据分析
- 🌸个人主页:JoJo的数据分析历险记
- 📝个人介绍:小编大四统计在读,目前保研到统计学top3高校继续攻读统计研究生
- 💌如果文章对你有帮助,欢迎关注、点赞、收藏、订阅专栏
本系列主要介绍R语言在数据分析领域的应用包括:
R语言编程基础、R语言可视化、R语言进行数据操作、R语言建模、R语言机器学习算法实现、R语言统计理论方法实现。
本系列会完成下去,请大家多多关注点赞支持,一起学习~
参考资料:
Data Analysis and Prediction Algorithms with R
R语言数据分析从入门到高级:(七)数据分布可视化
我们知道数值型变量一般用平均值和标准差描述,但是这样会导致一部分数据的信息缺失。我们在这一章介绍一下怎么绘制数据分布图
7.1变量类型
变量分为数值型和分类型两种。而分类型数据又可以分为有序和无序;
数值型数据可以分为连续和离散。
例如
- 学生的体重:连续数值型变量
- 学生的年龄:离散型数值变量
- 学生的性别:无序分类型变量
- 学生的年级:有序分类型变量
下面我们以heights数据集为例,进行相关数据分布的可视化实例
# 导入相关库
library(tidyverse)
library(dslabs)
data(heights)
7.2箱线图
箱线图适合绘制分类型数据的分布情况
murders %>% ggplot(aes(region)) + geom_bar()
我们通常分布图以比例的形式来
tab <- murders %>%
count(region) %>%
mutate(proportion = n/sum(n))
tab
region | n | proportion |
---|---|---|
<fct> | <int> | <dbl> |
Northeast | 9 | 0.1764706 |
South | 17 | 0.3333333 |
North Central | 12 | 0.2352941 |
West | 13 | 0.2549020 |
tab %>% ggplot(aes(region, proportion)) + geom_bar(stat = 'identity')
7.3直方图
直方图往往描述数值型数据的分布,需要选择合适bins或者binwidth参数来使得我们的直方图更平滑
heights %>%
filter(sex == "Female") %>%
ggplot(aes(height)) +
geom_histogram()
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
heights %>%
filter(sex == "Female") %>%
ggplot(aes(height)) +
geom_histogram(binwidth = 1)
heights %>%
filter(sex == "Female") %>%
ggplot(aes(height)) +
geom_histogram(binwidth = 1, fill = "blue", col = "black") +
xlab("Female heights in inches") +
ggtitle("Histogram")
7.4概率密度曲线
使用geom_density来绘制概率密度曲线。概率密度曲线相当于是将直方图以平滑的形式绘制
heights %>%
filter(sex == 'Female') %>%
ggplot(aes(height))+
geom_density(fill='blue',adjust=2)
可以使用adjust参数来调整平滑度
7.5箱线图
上述图形都是绘制单个变量的分布情况,箱线图可以用于比较分类变量不同值的情况下,某一变量的分布情况,
需要指定x、y两个参数
heights %>%
ggplot(aes(sex,height))+
geom_boxplot(aes(fill=sex))
7.6QQ-plot
qq-plot是绘制理论q分位点和样本q分位点的散点图。来判断数据是否服从标准正态分布
使用geom_qq可以绘制qqplot,我们需要使用sample参数指定我们要绘制变量的qq图
heights %>% filter(sex=='Male')%>%
ggplot(aes(sample=height))+
geom_qq()
默认情况下,我们是判断是否服从标准正态分布。可以使用dparams参数设置成其他正态分布。并且可以通过geom_abline
添加一条直线
# 计算样本均值和标准差
params <- heights %>% filter(sex == 'Male')%>%
summarise(mean=mean(height),sd = sd(height))
heights %>% filter(sex == 'Male') %>%
ggplot(aes(sample=height))+
geom_qq(dparams = params)+
geom_abline()
从qq图来看,数据近似服从正态分布,还有一种绘制qq图的方法是,我们先把数据标准化,再绘制标准qq图
heights %>%
filter(sex=="Male") %>%
ggplot(aes(sample = scale(height))) +
geom_qq() +
geom_abline()
可以看出结果和上面的一致
7.7热力图
ggplot2中绘制热力图有几种方法,geom_tile和geom_raster,热力图需要一个包含x和y坐标以及相关坐标值的数据框,
# 定义数据
x <- expand.grid(x = 1:12, y = 1:10) %>%
mutate(z = 1:120)
x %>% ggplot(aes(x, y, fill = z)) +
geom_raster()
我们还可以使用scale_fill_gradientn来调整热力图色阶
x %>% ggplot(aes(x, y, fill = z)) +
geom_raster() +
scale_fill_gradientn(colors = terrain.colors(10))