今回はpandasを使用した欠損値の処理について備忘録を兼ねた記事になります。
欠損値とは表データ等で値が入っていない事をいいます。
例えば表データの空欄であったり、NULLなどの具体的な数値が入っていない状態の事です。
この欠損値をそのままにしてグラフで可視化しようとすると偏りが出て正確なデータ分析が出来なくなります。
欠損値の確認するには?
では、欠損値をどのように確認するか。
それは、Pythonのライブラリpandas
を使用して欠損値の確認isnull()
、処理dropna()やfillna()
を行います。
pandasのインストールや基本的な使い方については前回の記事を参考にしていただければ幸いです。
それでは、欠損値の確認を行っていきましょう。今回はサンプルとして、kaggleのチュートリアルで使用されているタイタニックデータ(https://www.kaggle.com/c/titanic/data)を使用してます。
データを読み込み、isnull()
を実行しましょう。
import pandas as pd
data = pd.read_csv("train.csv")
data.isnull()
isnull()
はデータの欠損を検出してくれるメソッドです。値が欠損していればTrue
、欠損していなければFalse
を返します。
isnull().ayy()
欠損値があるか知りたい場合はany()
という関数をisnull()
の後に付け足せば各列に欠損値があるか確認してくれます。
欠損値がある場合はTrue
、無い場合はFalse
を返してくれます。
isnull().sum()
欠損値の個数を知りたい場合に使用します。any()
と同様にisnull()
の後ろに付け加える事で、欠損している要素数を列ごと調べてくれます。
欠損値を処理するには?
欠損値の処理方法には大きく分けて2つあります。
1.欠損値を含む列や行を削除する。
2.欠損している箇所を別のデータで補完する。
どちらを採用するかは、状況に応じて変わるかと思います。どう処理をするか判断するにはそのデータ分析の目的が何かを明確にする事が重要になります。
欠損値を含む行を削除する事で重要なデータをも削除してしまい、データ全体の傾向を見誤り分析精度が下がってしまう。この様な場合は別の値で補完しデータ数を維持する事が得策かもしれません。
また、説明変数の変化が目的変数の変化に影響するか等のデータを理解する目的であれば補完し過ぎるのは誤った理解に繋がってしまうかもしれません。
何が最善かは目的を明確にして、データ分析を進めていくと良いでしょう。
欠損値の削除
欠損値を含む行や列を削除してくれるのがdropna()
です。
data.dropana()
デフォルトでは欠損値の行を削除してくれます。
列を削除したい場合は、下記の様にします。
data.dropna(axis = 'columns')
欠損値の補完
欠損値を別のデータで補完してくれるのがfillna()
です。
補完したいデータを引数に指定し、欠損を補完してくれます。
data['Age'].fillna(20)
上記の場合、Age列の欠損値を20に補完してくれます。
他にも、平均値や中央値、最頻値で補完してくれます。
data['Age'].fillna(data['Age'].mean()) # Age列の欠損値をAgeの平均値で補完
data['Age'].fillna(data['Age'].median()) # Age列の欠損値をAgeの中央値で補完
data['Age'].fillna(data['Age'].mode()) # Age列の欠損値をAgeの最頻値で補完
また、fillna()
とdropna()
を呼び出しても元のデータに反映されません。
更新する場合は下記の様になります。
data.dropna(inplace=True)
data = data.dropna() #こちらでも更新できます。
まとめ
欠損値の処理はデータ分析を行う際に欠かせない技術の一つです。
データの特性に応じた柔軟な対応が求められます。
データ分析の目的を明確に決めるのは今の私も難しいと感じますが、様々なデータに触れ経験を積んでいきたいと思います。