データ分析において、欠損値の処理は避けては通れない問題です。欠損の仕方にも様々あり、データに応じて適切な処理をして上げる必要があります。今回は、missingnoライブラリを使って簡単に欠損値を可視化してみました。
目次
欠損値の種類
ライブラリの実践の前に、参考までに欠損値の種類についてまとめてみます。欠損値には大きく以下の3つがあります。下に行くほど処理方法がやっかいです汗。
MCAR(Missing Completely at Random)
完全にランダムな状態。例:クラスで欠席者(欠損値)が複数いるが、お互いに完全に別々の理由で欠席している。
MAR(Missing at Random)
欠損をある程度予測できるが欠損するかはランダム。例:冬という要因で(風邪で)欠席者が増えるが、風邪を引くかどうかはランダム。
MNAR(Missing Not at Random)
なぜ欠損したかはそのデータ自体の情報に依存している。例:Aさんの誕生日に、Aさんの友達も一緒に欠席している
missingnoによる可視化
kaggleのtitanicデータを使用して可視化してみます。まずはライブラリをインポートし、データを読み込みます。
注釈:titanicのデータはkaggleから予めダウンロードしています(ファイル名:train.csv)
#ライブラリのインポート
import pandas as pd
import missingno as msno
#データをロード
train=pd.read_csv('train.csv')
train.head()
msnoを使って可視化します。
Barplot
msno.bar(train)
Age,Cabin,Embarkedカラムに欠損値があることが分かります。Embarkedは2つだけですので、2行分をまるごと削除してしまっても良いかもしれません(影響は少ないため)。
一方で、AgeとCabinを同じように削除してしまうと、全体のデータ数が大幅に少なくなってしまうため、削除ではなく補完を考えたほうが良さそうです。
Matrix
msno.matrix(train)
matrixを使うと、欠損値がデータのどのあたりに存在するか視覚的に分かります。AgeとCabinはお互いに相関があるように見えなくもありません。最初に述べたMCAR,MAR,MNARでいうと、MNARに該当する可能性があります。
一方で、Cabinだけ欠損が少ないため、MCARが一番近そうです。
Dendrogram
msno.dendrogram(train)
こちらは、欠損値の相関関係を視覚的に表しています。
Heatmap
msno.heatmap(train)
カラム同士の相関を相関係数と色で表しています。
まとめ
missinngnoライブラリを使用してtitanicデータの欠損値を可視化してみました。非常に簡単に欠損値の傾向を把握することが出来るので、今後も使っていきたいと思います。
kaggle titanicは下記リンクから入手