【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()


png

我们通常分布图以比例的形式来

tab <- murders %>% 
  count(region) %>% 
  mutate(proportion = n/sum(n))
tab
A data.frame: 4 × 3
regionnproportion
<fct><int><dbl>
Northeast 90.1764706
South 170.3333333
North Central120.2352941
West 130.2549020
tab %>% ggplot(aes(region, proportion)) + geom_bar(stat = 'identity')


png

7.3直方图

直方图往往描述数值型数据的分布,需要选择合适bins或者binwidth参数来使得我们的直方图更平滑

heights %>% 
  filter(sex == "Female") %>% 
  ggplot(aes(height)) + 
  geom_histogram()
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.


png

heights %>% 
  filter(sex == "Female") %>% 
  ggplot(aes(height)) + 
  geom_histogram(binwidth = 1)


png

heights %>% 
  filter(sex == "Female") %>% 
  ggplot(aes(height)) +
  geom_histogram(binwidth = 1, fill = "blue", col = "black") +
  xlab("Female heights in inches") + 
  ggtitle("Histogram")


png

7.4概率密度曲线

使用geom_density来绘制概率密度曲线。概率密度曲线相当于是将直方图以平滑的形式绘制

heights %>%
    filter(sex == 'Female') %>%
    ggplot(aes(height))+
    geom_density(fill='blue',adjust=2)


png

可以使用adjust参数来调整平滑度

7.5箱线图

上述图形都是绘制单个变量的分布情况,箱线图可以用于比较分类变量不同值的情况下,某一变量的分布情况,
需要指定x、y两个参数

heights %>%
    ggplot(aes(sex,height))+
    geom_boxplot(aes(fill=sex))


png

7.6QQ-plot

qq-plot是绘制理论q分位点和样本q分位点的散点图。来判断数据是否服从标准正态分布
使用geom_qq可以绘制qqplot,我们需要使用sample参数指定我们要绘制变量的qq图

heights %>% filter(sex=='Male')%>%
    ggplot(aes(sample=height))+
    geom_qq()


png

默认情况下,我们是判断是否服从标准正态分布。可以使用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()


png

从qq图来看,数据近似服从正态分布,还有一种绘制qq图的方法是,我们先把数据标准化,再绘制标准qq图

heights %>% 
  filter(sex=="Male") %>%
  ggplot(aes(sample = scale(height))) + 
  geom_qq() +
  geom_abline()


png

可以看出结果和上面的一致

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


png

我们还可以使用scale_fill_gradientn来调整热力图色阶

x %>% ggplot(aes(x, y, fill = z)) + 
  geom_raster() + 
  scale_fill_gradientn(colors =  terrain.colors(10))


png

posted @ 2022-08-27 11:08  JOJO数据科学  阅读(406)  评论(0编辑  收藏  举报