完全性

Rでのデータクリーニング

Maggie Matsui

Content Developer @ DataCamp

欠損データとは?

ピースが1つ欠けた完成パズル。説明:観測の変数に値が保存されていない状態。

NAnan099. などで表されることがある。

Rでのデータクリーニング

欠損データとは?

missing.png

NAnan099. などで表されることがある。

技術的エラーを表すロボット。

Rでのデータクリーニング

欠損データとは?

missing.png

NAnan099. などで表されることがある。

人為的ミスを表す人物の図。

Rでのデータクリーニング

Airquality データ

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でのデータクリーニング

Airquality データ

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)

コードで作成した可視化。最左列に黒線が最も多く、2列目が次に多い。他の列には黒線がない。

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でのデータクリーニング

欠損の種類

左:無作為欠損(Missing Completely at Random)を表すサイコロ。中央:一面に1つの点だけあるサイコロで「ランダム欠損」を表す。右:互いに循環する4つの四角で「非ランダム欠損」を表す。

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でのデータクリーニング

Passons à la pratique !

Rでのデータクリーニング

Preparing Video For Download...