【実践】EDAー欠損値の調べ方

※アフィリエイト広告を利用しています。

はじめにーEDAとは

データ分析の業務に携わるときに必ず行う作業があります。

それが、EDA(Exploratory Data Analysis)です。

これは、データ分析の最初のステップであり、取り扱っているデータの中身を理解するための作業です。以下に、EDAの主なアプローチと手法をいくつか説明します。

1.データの概要を確認する:データセットのサイズを確認し、カラム(特徴)の数と種類を把握します。データの最初のいくつかの行やサンプルを表示して、データのフォーマットや値の範囲を理解します。

2.データの欠損値を処理する:欠損値の有無を確認し、欠損値を適切に処理します。欠損値は、分析やモデリングに影響を及ぼす可能性があるため、適切に対処する必要があります。

3.データの要約統計を計算する:データの統計的な要約を計算し、平均、中央値、標準偏差、最小値、最大値などの情報を把握します。これにより、データの分布や外れ値の有無を把握できます。

4.データの可視化:ヒストグラム、散布図、箱ひげ図、バブルチャートなどのグラフを使用して、データの分布や相関関係を可視化します。視覚的な表現により、データの特徴やパターンがより明確になります。

5.特徴間の相関を調査する:特徴間の相関関係を確認し、データの中でどの特徴が重要かを理解します。相関は、特徴選択や特徴エンジニアリングの指針として役立ちます。

実際のデータを用いて欠損値を調査

今回使用するデータは、KaggleHouse Prices – Advanced Regression Techniquesのデータを用いてみます。

KaggleHouse Pricesについて詳しく知りたい方は以下のブログを記事をご覧ください。
>>【Kaggle入門ー重回帰分析】 Titanicの次に何をやるか!? House Prices – Advanced Regression Techniques

まずは、どんなデータなのか見てみます。

各住宅の販売価格を予測するための学習データですので、建物のクラス建築素材部屋の大きさ価格に影響を与える変数が並んでいます。

info()

多くのカラムがあるので、途中省略されています。これについての要約をみてみましょう。その際には、info()を使うことで、データ数、カラム名と数、データがある行数(その反対として欠損値の数もここから推測できる)、データ型を簡単に表示できます。

具体的にいうと、ここからわかることは、データ数(0~1459のインデックスがあるので、1460個のデータ)カラム数は81カラム名は表示されているとおり。各カラムにつき、データ数(non-nullとあるので、データが欠損(Null)していない数という意味です。)データの型(intかobjectか)が表示されています。

isnull().sum()

要約からみて、欠損値があることがわかりましたので、表示してみましょう。

その際に使うのが、isnull().sum()です。isnull()だけだと、ブール値欠損値の有無(True:欠損値、False:データあり)が表示されます。これをsum()を用いることで合計値を計算できます。

しかし、今回のデータはカラムが81個もあるので、このままでは、全部表示されません。そこで、すべてのカラムを表示するように設定を変更する必要があります。

pd.set_option(‘display.max_rows’,100)をしましょう。これをすることで、100行まで表示できるように変更されます。

81個もあるとスクロールしないと欠損値を把握できませんし、単純にこれだと見ずらいです。ここで欠損値を多い順に変更して見やすくしてみましょう。.sort_values(ascending=False)を用いれば、順番を降順に変更できます。

df_train.isnull().sum().sort_values(ascending=False)

これですごく見やすくなりました!!

最後に、これをplotして視覚的にわかりやすくしてみましょう。

missing_values = df_train.isnull().sum().sort_values(ascending=False)

plt.figure(figsize=(12,8))
missing_values.plot(kind='bar')
plt.xlabel('columns')
plt.ylabel('missing values count')
plt.show()

欠損値の降順missing_valuesに格納します。
サイズは今回は横12、縦8にとりあえず設定します(図が見ずらい場合は、こちらを再度変更します。)
これをbarチャート(棒グラフ)で表示します。
x軸名としてカラムy軸名として欠損値の数とします。

これを表示すると以下のようになります。

Missingno

今回は、isnull().sum()を用いましたが、Missingnoを用いる方法もあります。
これを用いることで、データの割合データ数が表示できます。

import missingno

importできない場合は、pip install missingno でインストールしてください。

missingno.bar(df_train)

こちらの図の見方ですが、図の一番上0.0~1.0データの割合です。
例えば、SalePriceでみると1.0なので、右側に表示されているようにデータが1460個(つまり、欠損値なし)です。
一方、MiscFeature~PoolQCあたりがデータの割合が小さいので、欠損値が多そうです。

まとめ

欠損値は、分析モデリングに影響を及ぼす可能性があるため、適切に対処する必要があります。

そのため、実務では、EDA(Exploratory Data Analysis)の最初のステップとして、欠損値を調査することが行われています。

参考になれば幸いです。