Help us understand the problem. What is going on with this article?

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

(An English translation 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に解説があります。ただし、これだけで本が書けるぐらいに多種多様で、奥が深い領域だと思います。 

TomoyukiAota
Stack Overflow: https://goo.gl/o3i9Do dev.to: https://dev.to/tomoyukiaota
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした