完整性

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 的資料清理

遺漏資料的類型

左:六面骰,代表完全隨機遺漏(MCAR)。中:六面骰每面都只有 1 點,代表隨機遺漏(MAR)。右:四個方塊循環指向,代表非隨機遺漏(MNAR)。

R 的資料清理

遺漏資料的類型

完全隨機遺漏:遺漏與其他值之間沒有系統性關係。例:輸入時的人工作業錯誤。

R 的資料清理

遺漏資料的類型

隨機遺漏:遺漏與其他已觀測值有系統性關係。例:高溫時缺少 Ozone 資料。

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 的資料清理

一起來練習吧!

R 的資料清理

Preparing Video For Download...