完整性

R 中的数据清洗

Maggie Matsui

Content Developer @ DataCamp

什么是缺失数据?

一幅缺一块的拼图。说明:当某观测的变量未存储任何数据值时发生。

可表示为 NAnan099.

R 中的数据清洗

什么是缺失数据?

missing.png

可表示为 NAnan099.

一个代表技术错误的机器人。

R 中的数据清洗

什么是缺失数据?

missing.png

可表示为 NAnan099.

一个代表人为错误的人形图。

R 中的数据清洗

空气质量

head(airquality)
   Ozone Solar.R Wind Temp Month Day
1     41     190  7.4   67     5   1
2     36     118  8.0   72     5   2
3     12     149  12.6   74     5   3
4     18     313  11.5   62     5   4
5     NA      NA  14.3   56     5   5
6     28      NA  14.9   66     5   6
R 中的数据清洗

空气质量

head(airquality)
   Ozone Solar.R Wind Temp Month Day
1     41     190  7.4   67     5   1
2     36     118  8.0   72     5   2
3     12     149  12.6   74     5   3
4     18     313  11.5   62     5   4
5     NA      NA  14.3   56     5   5
6     28      NA  14.9   66     5   6
R 中的数据清洗

查找缺失值

is.na(airquality)
     Ozone Solar.R  Wind  Temp Month   Day
[1,] FALSE   FALSE FALSE FALSE FALSE FALSE
[2,] FALSE   FALSE FALSE FALSE FALSE FALSE
[3,] FALSE   FALSE FALSE FALSE FALSE FALSE
[4,] FALSE   FALSE FALSE FALSE FALSE FALSE
[5,]  TRUE    TRUE FALSE FALSE FALSE FALSE
[6,] FALSE    TRUE FALSE FALSE FALSE FALSE
R 中的数据清洗

统计缺失值

# Count missing vals in entire dataset
sum(is.na(airquality))
44
R 中的数据清洗

可视化缺失值

library(visdat)
vis_miss(airquality)

由代码生成的可视化。最左列黑线最多,第二列次之。其他列无黑线。

R 中的数据清洗

探查缺失机制

airquality %>%
  mutate(miss_ozone = is.na(Ozone)) %>%

group_by(miss_ozone) %>% summarize(across(everything(), median, na.rm = TRUE))
  miss_ozone Ozone Solar.R  Wind  Temp Month   Day
  <lgl>      <dbl>   <int> <dbl> <dbl> <dbl> <dbl>
1 FALSE       31.5     207   9.7    65     7    16
2 TRUE        NA       194   9.7    99     6    15
R 中的数据清洗

探查缺失机制

airquality %>%
  arrange(Temp) %>%
  vis_miss()

与前图类似,但在表示 Ozone 的最左列中,所有缺失值都在底部。

R 中的数据清洗

缺失数据类型

左:六面骰子,表示完全随机缺失。中:各面只有一个点的骰子,表示随机缺失。右:四个方块循环指向,表示非随机缺失。

R 中的数据清洗

缺失数据类型

完全随机缺失:缺失与其他值无系统关系。示例:录入时的数据输入错误。

R 中的数据清洗

缺失数据类型

随机缺失:缺失与其他已观测值存在系统关系。示例:高温时臭氧数据缺失。

R 中的数据清洗

缺失机制类型

非随机缺失:缺失与未观测值存在系统关系。示例:高温时温度值缺失。

R 中的数据清洗

处理缺失数据

简单方法:

  1. 删除缺失数据
  2. 用统计量(均值、中位数、众数等)或领域知识填补

更复杂的方法:

  1. 用算法式方法插补
  2. 用机器学习模型插补

 

Dealing with Missing Data in R 了解更多

R 中的数据清洗

删除缺失值

airquality %>%
  filter(!is.na(Ozone), !is.na(Solar.R))
   Ozone Solar.R  Wind  Temp Month   Day
   <int>   <int> <dbl> <int> <int> <int>
 1    41     190   7.4    67     5     1
 2    36     118     8    72     5     2
 3    12     149  12.6    74     5     3
 4    18     313  11.5    62     5     4
 5    23     299   8.6    65     5     7
 6    19      99  13.8    59     5     8
R 中的数据清洗

替换缺失值

airquality %>%
  mutate(ozone_filled = ifelse(is.na(Ozone), mean(Ozone, na.rm = TRUE), Ozone))
   Ozone Solar.R  Wind  Temp Month   Day ozone_filled
   <int>   <int> <dbl> <int> <int> <int>        <dbl>
 1    41     190   7.4    67     5     1         41  
 2    36     118   8      72     5     2         36  
 3    12     149  12.6    74     5     3         12  
 4    18     313  11.5    62     5     4         18  
 5    NA      NA  14.3    56     5     5         42.1
R 中的数据清洗

Vamos praticar!

R 中的数据清洗

Preparing Video For Download...