Edited at

欠損値の出現パターンを簡単に可視化する

More than 1 year has passed since last update.


(An English version is available here.)

Pythonでデータ分析をする際に、欠損値の出現パターンを簡単に可視化する方法を紹介します。


はじめに

データ分析をする際に、欠損値に対処する必要があります。方法は様々あります1が、対処法を考える前に、欠損値の数や出現パターンを知る必要があります。この記事では、Pythonを用いてデータ分析をする際に、欠損値の出現パターンを簡単に可視化する方法を紹介します。

なお、この記事で紹介する方法については、私のGitHub repoにJupyter notebookをアップロードしてあります。下のバッジをクリックすると、Binderで実行できます。

Binder


前提

以下、Kaggleから入手できるTitanicのtrain datasetを例として紹介します。以下のコードと実行結果があるものとします。

import numpy as np

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.read_csv('train.csv')

# 各列ごとの欠損値の数を確認します。

df.info()

<class 'pandas.core.frame.DataFrame'>

RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId 891 non-null int64
Survived 891 non-null int64
Pclass 891 non-null int64
Name 891 non-null object
Sex 891 non-null object
Age 714 non-null float64
SibSp 891 non-null int64
Parch 891 non-null int64
Ticket 891 non-null object
Fare 891 non-null float64
Cabin 204 non-null object
Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB


方法1:seaborn.heatmap

はじめに、seaborn.heatmapを使う方法を紹介します。次の一行で、大まかな欠損値の出現パターンが分かります。

sns.heatmap(df.isnull(), cbar=False)

image.png

Indexに対して、Ageは偏りなく少量、Cabinは偏りなく大量に、Embarkedは最初の方に少しだけ、という大まかな傾向がつかめます。今回のTitanic datasetではないですが、特に時系列データでは、同じ個数の欠損値でも、まとまっているかばらばらなのかを知る必要があります。この手法により、ひと目で分かります。また、仮に2つの列の欠損値の発生箇所に相関があれば、それもこの可視化によってある程度分かります。(今回のdatasetではそのような相関はなさそうです。このことも、一つの情報です。)たった一行のコードですが、heatmapを用いた欠損値の出現パターンの可視化によって、今述べたような情報を大まかに得ることができます。


方法2:missingno module

より様々な可視化をしたい場合は、missingnoというmoduleを使うとよいと思います。

まずはインストールし、importします。

pip install missingno

import missingno as msno

方法1のseaborn.heatmapと同様の結果を得たい場合は、missingno.matrixを使います。

msno.matrix(df)

image.png

方法1のseaborn.heatmap相当の情報に加えて、右側にバーが表示されています。これは、各行ごとに、非欠損値の個数を線グラフとして表示したものです。このdatasetでは、全ての行が10 - 12個の非欠損値を持つことが分かります。(欠損値は、0 - 2個ということになります。)

更に、missingno.heatmapを使うと、各列の欠損値の発生箇所についての相関が分かります。

msno.heatmap(df)

image.png

この他にも、各列の欠損値の個数の棒グラフ、欠損値の発生箇所の相関をもとに作成したデンドログラムなど、欠損値に関する様々な可視化ができますので、READMEを一読すると良いと思います。


おわりに

以上、Pythonでデータ分析をする際に、欠損値の出現パターンを簡単に可視化する方法を紹介しました。

まずはseaborn.heatmapを使い、より多くの分析が必要な場合は、missingno moduleを使うと良いと思います。





  1. 主な例としては、欠損値の対処法 | ブログ | 統計WEBに解説があります。ただし、これだけで本が書けるぐらいに多種多様で、奥が深い領域だと思います。