naniarパッケージの紹介記事を書いたことと、プラスのまとめ

qiita.com

上の記事をこの前Qiitaに投稿した。この後、もう少し書いて置くべきことを見つけたので、こっちの記事にまとめておく。

準備編

library(naniar)
data("pedestrian")
> str(pedestrian)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   37700 obs. of  9 variables:
 $ hourly_counts: int  883 597 294 183 118 68 47 52 120 333 ...
 $ date_time    : POSIXct, format: "2016-01-01 00:00:00" "2016-01-01 01:00:00" "2016-01-01 02:00:00" "2016-01-01 03:00:00" ...
 $ year         : int  2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 ...
 $ month        : Ord.factor w/ 12 levels "January"<"February"<..: 1 1 1 1 1 1 1 1 1 1 ...
 $ month_day    : int  1 1 1 1 1 1 1 1 1 1 ...
 $ week_day     : Ord.factor w/ 7 levels "Sunday"<"Monday"<..: 6 6 6 6 6 6 6 6 6 6 ...
 $ hour         : int  0 1 2 3 4 5 6 7 8 9 ...
 $ sensor_id    : int  2 2 2 2 2 2 2 2 2 2 ...
 $ sensor_name  : chr  "Bourke Street Mall (South)" "Bourke Street Mall (South)" "Bourke Street Mall (South)" "Bourke Street Mall (South)" ...

Qiitaの記事では、アメリカの生活習慣病データが記録されているriskfactorsデータセットを用いたが、特に意味はないが、今回はpedestrianデータを用いる。このデータは2016年に計測されたメルボルン市内での歩行者数がカウントされたデータが記録されている。気になる人は下記を参照。

data.melbourne.vic.gov.au

欠損値確認編

miss_var_run(): 欠損値が出現する頻度の確認

> miss_var_run(data = pedestrian, var = hourly_counts)
# A tibble: 35 x 2
   run_length is_na   
        <int> <chr>   
 1       6628 complete
 2          1 missing 
 3       5250 complete
 4        624 missing 
 5       3652 complete
 6          1 missing 
 7       1290 complete
 8        744 missing 
 9       7420 complete
10          1 missing 
# … with 25 more rows

どのようなパターンで欠損値がデータ上に出現しているかがすぐにわかる。時系列データなどではランダムに欠損値が出ているのか、規則性があるのかを確認でき、使いようによってはかなり便利っぽそう。

miss_var_span(): 指定したデータスパン内での欠損値確認

> miss_var_span(pedestrian, var = hourly_counts, span_every = 4000)
# A tibble: 10 x 5
   span_counter n_miss n_complete prop_miss prop_complete
          <int>  <int>      <dbl>     <dbl>         <dbl>
 1            1      0       4000   0               1    
 2            2      1       3999   0.00025         1.000
 3            3    121       3879   0.0302          0.970
 4            4    503       3497   0.126           0.874
 5            5    745       3255   0.186           0.814
 6            6      0       4000   0               1    
 7            7      1       3999   0.00025         1.000
 8            8      0       4000   0               1    
 9            9    745       3255   0.186           0.814
10           10    432       3568   0.108           0.892

スパンを指定して、スパン毎の欠損値の要約を出力してくれる関数。引数varで欠損値の要約を得たい変数を指定し、span_everyで列数(欠損値の要約を得るスパン)を指定。アウトプットは欠損値と非欠損値の実数と割合を表示してくれるので確認が容易にできる。

可視化編

gg_miss_span(): 指定したスパン内での欠損値の割合を可視化

gg_miss_span(pedestrian, var = hourly_counts, span_every = 4000)

f:id:kokiando:20190511143309p:plain

スパンごとに欠損値の割合を棒グラフで一目で教えてくれる優れもの。

まとめ

さわりの部分はこちらのQiita記事に書いたので気になる人は参照してください。naniarパッケージはかなり便利ですが、日本語でまとめられている記事をみなかったので書きました。よりパッケージに詳しい人とがいれば足りていない部分を教えて欲しいです。