R语言数据分析

本系列主要介绍R语言在数据分析领域的应用包括:
R语言编程基础、R语言可视化、R语言进行数据操作、R语言建模、R语言机器学习算法实现、R语言统计理论方法实现。
本系列会完成下去,请大家多多关注点赞支持,一起学习~
参考资料:
Data Analysis and Prediction Algorithms with R

文章目录

  • R语言数据分析
  • R语言数据分析从入门到高级:(七)数据分布可视化
  • 7.1变量类型
  • 7.2箱线图
  • 7.3直方图
  • 7.4概率密度曲线
  • 7.5箱线图
  • 7.6QQ-plot
  • 7.7热力图

R语言数据分析从入门到高级:(七)数据分布可视化

我们知道数值型变量一般用平均值和标准差描述,但是这样会导致一部分数据的信息缺失。我们在这一章介绍一下怎么绘制数据分布图

7.1变量类型

变量分为数值型和分类型两种。而分类型数据又可以分为有序和无序;
数值型数据可以分为连续和离散。

例如

  • 学生的体重:连续数值型变量
  • 学生的年龄:离散型数值变量
  • 学生的性别:无序分类型变量
  • 学生的年级:有序分类型变量

下面我们以heights数据集为例,进行相关数据分布的可视化实例

# 导入相关库
library(tidyverse)
library(dslabs)
data(heights)

7.2箱线图

箱线图适合绘制分类型数据的分布情况

murders %>% ggplot(aes(region)) + geom_bar()


R语言如何输入分布 r语言数据分布图_直方图



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

tab <- murders %>% 
  count(region) %>% 
  mutate(proportion = n/sum(n))
tab

A data.frame: 4 × 3

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


R语言如何输入分布 r语言数据分布图_R语言如何输入分布_02



7.3直方图

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

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



R语言如何输入分布 r语言数据分布图_直方图_03



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


R语言如何输入分布 r语言数据分布图_数据_04



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


R语言如何输入分布 r语言数据分布图_数据分析_05



7.4概率密度曲线

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

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


R语言如何输入分布 r语言数据分布图_数据_06



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

7.5箱线图

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

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


R语言如何输入分布 r语言数据分布图_R语言如何输入分布_07



7.6QQ-plot

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

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


R语言如何输入分布 r语言数据分布图_数据_08



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


R语言如何输入分布 r语言数据分布图_直方图_09



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

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


R语言如何输入分布 r语言数据分布图_直方图_10



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

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


R语言如何输入分布 r语言数据分布图_数据_11



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

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


R语言如何输入分布 r语言数据分布图_数据分析_12