【python】missingnoライブラリによる欠損値解析

【python】missingnoライブラリによる欠損値解析

データ分析において、欠損値の処理は避けては通れない問題です。欠損の仕方にも様々あり、データに応じて適切な処理をして上げる必要があります。今回は、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は下記リンクから入手

https://www.kaggle.com/competitions/titanic