【Python】Pandasで欠損値確認・missingnoで欠損状況を視覚化|データ前処理・クレインジング入門

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

データ分析や機械学習・AIモデル構築のために欠かせないデータクレンジング。その中でも欠損値の処理は分析・モデル精度向上という観点で非常に重要なプロセスと言えます。本記事では「Pythonを用いた欠損値の確認・可視化方法」について解説します。

目次

【Python】欠損値の確認・可視化

統計処理や機械学習分野におけるデータ前処理、とりわけ「欠損値の対応」は、数理・AIモデルの性能向上に向けて欠かせない位置付けを担っています。

本記事では欠損値対応を行う上で、前段となる「Pythonでの欠損値の確認方法」について解説します。

具体的に、下記の手順で欠損値を確認していきます。

  1. データセットの準備
  2. Pandasライブラリを用いてデータセットをDataFrameに変換
  3. isnull()メソッドで欠損値確認
  4. グラフ・ヒートマップをもとに欠損値可視化

欠損値確認に用いるPythonライブラリ

Pandas|isnull()

isnull()とは、欠損値抽出のために用いられるメソッドです。指定したDataFrame内の値に対して欠損値該当時はTrue、該当しない場合はFalseを渡します。

上記メソッドはPandasのインストールがお済みであれば、容易に活用できます。

pip install pandas

missingno

missingnoとは、ヒートマップ、棒グラフ、マトリックス形式で各種データ項目の欠損値を可視化できるメソッドです。

欠損値の可視化はmissingnoを用いて実施します。インストール未済の場合は下記のようにインストールしましょう。

pip install missingno

【Pythonデータ前処理実践】Pandasでの欠損値確認方法

データセットの準備

まず、データセットを読み込み、PandasライブラリでDataFrameを作成します。シンプルなデータセット例を以下記載します。

import pandas as pd
from io import StringIO

csv_data = \
    '''
    名前,性別,年齢,出身
    田中,女,21,京都
    佐藤,女,,山梨
    山田,男,30,
    高橋,,,東京
    '''

#データフレーム
df = pd.read_csv(StringIO(csv_data))
名前 性別 年齢 出身
0 田中 21 京都
1 佐藤 NaN 山梨
2 山田 30 NaN
3 高橋 NaN NaN 東京

欠損値の確認

各変数における欠損値有無を確認します。下記のよう記載した場合、欠損値有り(True)、欠損値無し(False)として確認できます。

df.isnull().any()

# 出力結果
# 名前         False
# 性別         True
# 年齢         True
# 出身         True
# dtype: bool

上記出力結果の場合、名前以外の変数は欠損値を含むことを意味します。

欠損件数の算出

続いて変数毎に欠損値の件数を確認してみましょう。

df.isnull().sum()

# 出力結果
# 名前        0
# 性別        1
# 年齢        2
# 出身        1
# dtype: int64

今回のデータセットは変数がそこまで多くないですが、多くの変数を取り扱う場合、欠損件数でフィルタリングや変数の並び替えを行うことがあります。

例えば、欠損件数1件以上の変数のみ表示し、欠損件数が多い変数順に並び替えて出力する場合を示します。

df.isnull().sum()[df.isnull().sum()>=1].sort_values(ascending=False)

# 出力結果
# 年齢    2
# 出身    1
# 性別    1
# dtype: int64

【Pythonデータ前処理実践】missingnoでの欠損値可視化方法

missingnoを用いると、ヒートマップ、棒グラフ、マトリックス形式等で欠損値分布が可視化できます。

import missingno

# 棒グラフ
missingno.bar(df)

上記棒グラフで欠損値を可視化した際のグラフイメージを示します。縦軸に正常値(非欠損値)の割合・件数を示したグラフが出力されます。

その他グラフ出力方法を下記に示します。用途に応じて使い分けると便利です。

マトリックス

各変数の周期性や季節性が欠損値に与える影響を確認したい場合

import missingno
#マトリックス
missingno.matrix(df)

デンドログラム

各変数をレコード単位で欠損値出現類似性を確認したい場合

import missingno
#デンドログラム
missingno.dendrogram(df)

ヒートマップ

各変数をレコード単位で欠損値出現相関性を確認したい場合

import missingno
#ヒートマップ
missingno.heatmap(df)

Seabornライブラリを用いた場合、下記の記載も可能です。

import seaborn
#ヒートマップ
seaborn.heatmap(df.isnull())

※Seabornライブラリを利用する際は、以下のように事前にインストールしておく必要があります。

pip install seaborn

【参考】欠損値の除去・補完方法について

本記事をご覧いただきありがとうございました!本記事ではデータクレンジングのノウハウとして、欠損値を確認した後に行う「欠損値の除去」および「欠損値の補完」方法についても詳しく解説しています。合わせてご覧ください!

データクレンジング:欠損値除去方法

データクレンジング:欠損値補完方法

【参考】Pythonでのデータ前処理技法を学ぶ上でおすすめの教材

統計処理や機械学習分野では、データの前処理はモデル精度向上に欠かせません。Pythonでのデータ前処理について詳しく学びたい方は、上記の書籍もおすすめできます。

【参考】Pythonでのデータ前処理・分析・可視化

当サイトではPythonを用いた「データ前処理手法」「データ分析」「グラフや表を用いた可視化」手法について幅広く解説しております。AI・機械学習にも応用できる内容となっておりますため、興味がある方は併せてご確認下さい。

Pythonを活用したデータ処理・分析手法一覧



【参考】Pythonとは・できること一覧

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次