pandasで欠損値を簡単に確認する方法は?
欠損値に何かパターンがあるみたいだけどどうやって確認すれば良いかわからない
本記事ではそんな疑問に対してサンプルコードを添えてお答えします。
scikit-learnなどのサンプルデータで機械学習を学び始めるとデータの欠損などはないため、特に気にすることはないかと思いますが、実データを扱い出すとまず欠損値がないなんてことはありません!
欠損値をそのまま省いてしまう方法もデータ量が多ければありですが、欠損値があるパターンなどを理解することで新たな特徴を捉えられる可能性もあります。
今回はそのヒントとなる欠損値の可視化、解析手法を紹介します。
こんな方におすすめの記事
- pandasでの簡単な欠損値の確認方法を知りたい方
- 欠損値のパターンの可視化方法を知りたい方
それでは始めましょう!
pandasを用いた欠損値の可視化方法
まずはpandasのみを用いた欠損値の可視化方法を紹介します。
この手法においてはまずpandasのデータタイプを確認し、「category」のデータタイプにあたるものだけを取得します。その上で欠損値があるカラムの名称およびその割合を表示させます。
今回はサンプルとしてtaitanicのデータを利用しています。
def get_null_df(df: pd.DataFrame):
"""Calculate missing data rate
Args:
df (pd.DataFrame): target_df
Returns:
col_null_df: dataframe of null_feature_rate
"""
col_null_df = pd.DataFrame(columns = ['Column', 'Type', 'Total NaN', '%'])
col_null = df.columns[df.isna().any()].to_list()
L = len(df)
for col in col_null:
T = 0
if df[col].dtype == "float64":
T = "Numerical"
elif df[col].dtype == "int64":
T = "Numerical"
else:
T = "Categorical"
nulls = len(df[df[col].isna() == True][col])
col_null_df = col_null_df.append({'Column': col,
'Type': T,
'Total NaN': nulls,
'%': (nulls / L)*100
}, ignore_index=True)
return col_null_df
get_null_df(df)
cabinのデータがほとんど欠損していることがわかります。対してembarkedのデータは欠損値が2個しかないので個別にデータを確認して対応できそうです。
このように大まかに全体の傾向を見ることで欠損値に対する対応方法を立案できます。
Missingnoを用いた欠損値の可視化方法
次はMissingnoを用いた欠損値の可視化手法です。欠損値の傾向を把握するために作成されたパッケージであるため様々な可視化手法が利用できます。
pip install missingno
パッケージの詳細は以下のリンクを参照ください。
欠損値データの分布表示
以下のコードで簡単に欠損値の分布状況を把握できます。同じデータ行で同じ項目が欠損しているなどの傾向を可視化して表示できるので非常に便利です。
msno.matrix(df)
欠損値データの棒グラフ表示
以下のコードでは欠損値の数を棒グラフで確認できます。特に項目が多いときなど割合ではなく見た目として欠損値の数を確認できるのはいいですね。
msno.bar(df)
欠損値データの相関ヒートマップ図
以下のコードでは欠損値感の相関関係をヒートマップで可視化できます。例えばある項目の欠損値がある場合にはもう一方の項目の欠損値もないなど欠損値間に相関関係がある場合このヒートマップを見れば一目瞭然です。
高い相関関係がある項目が見つかった場合は新しい特徴量として捉えられる可能性もあります。
msno.heatmap(df)
まとめ
今回はpandasおよびMissingnoを活用したデータの欠損値確認方法に関して紹介しました。欠損値を上手く扱うことでデータハンドリングのレベルは格段にあがります。
是非参考にしてください。
もっと詳しくPythonの使い方を勉強したいと思ったそこのアナタ!pythonを用いたコーディング学習にはData Campがおススメです!
詳細に関してはこちらで紹介しています。↓
こちらもぜひ参考にしてください。
それでは本日は以上でした!