こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
【Python】欠損値の補完方法
統計処理や機械学習分野におけるデータ前処理、とりわけ「欠損値の対応」は、数理・AIモデルの性能向上に向けて欠かせない位置付けを担っています。
本記事では欠損値対応の1つの手段である「欠損値の補完方法」について詳しく言及します。
欠損値の補完方法は下記の手順で実施します。
- データセットの準備
- PandasのDataFrameを構築
- fillna()メソッドで欠損値を補完
- scikit-learnのSimpleImputerクラスをもとに欠損値を補完
メインは(3)(4)であり、その点詳しく解説します。
欠損値の補完に際して用いるPythonライブラリ
Pandas|fillna()
Pandasのfillna()
とは、欠損値補完のために用いられるメソッドです。
Pandasメソッドには事前に以下を実行しライブラリをインストールしておきましょう。
pip install pandas
scikit-learn|SimpleImputer
scikit-learnのSimpleImputer
とは、機械学習で用いるscikit-learnライブラリ内に準備されたクラスです。欠損値補完のために用いられます。
scikit-learnのクラスを用いるには事前に以下を実行しライブラリをインストールしておきましょう。
pip install scikit-learn
【Python】データセットの準備
欠損値補完を行うデータセットを準備し、PandasのDataFrameに変換します。今回はデータセットとして下記例を用います。
コード
import pandas as pd
from io import StringIO
csv_data = \
'''
ColA,ColB,ColC,ColD
1,2,1,4
10,9,,4
2,2,5,
3,,,9
'''
df = pd.read_csv(StringIO(csv_data))
出力結果
ColA | ColB | ColC | ColD | |
---|---|---|---|---|
0 | 1 | 2 | 1 | 4 |
1 | 10 | 9 | NaN | 4 |
2 | 2 | 2 | 5 | NaN |
3 | 3 | NaN | NaN | 9 |
【Python実践】Pandas.fillnaメソッドでの欠損値の補完方法
Pandasメソッドを用いて欠損値を補完する方法について解説します。
欠損値補完|中央値
fillna()メソッドを用いる際、下記のように引数を指定すると、該当列の欠損値が中央値で置換できます。
今回の例では、columnCの欠損値を中央値で置換した場合を示します。
コード
#特定の特徴量:のNaN → 中央値変換
df["ColC"].fillna(df["ColC"].median())
出力結果
欠損値補完|平均値
指定した列の欠損値を、その列の「平均値」で補完したい場合、以下の実行します。
#平均値変換
df["ColC"].fillna(df["ColC"].mean())
欠損値補完|最大・最小値
指定した列の欠損値を、その列の「最大値」で補完したい場合、以下の実行します。
#最大値
df["ColC"].fillna(df["ColC"].max())
「最小値」で補完したい場合、以下の実行します。
#最小値
df["ColC"].fillna(df["ColC"].min())
欠損値補完|最頻値
指定した列の欠損値を、その列の「最頻値」で補完したい場合、以下の実行します。
#最頻値
df["ColC"].fillna(df["ColC"].mode())
上記引数にinplace=True
を指定すると、欠損値補完されたオブジェクトとして更新されます。
【Python】scikit-learnのSimpleImputerで欠損値を一括補完する方法
Scikit-learnのSimpleImputerでインスタンスを作成し、欠損値の補完を行います。
各特徴量(列)ごとに計算された平均値で各々の欠損値を置換したい場合、下記のように記載します。
コード
import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer
#Dataframe値をarrayで読込
X = df.iloc[:,:4].values
#インスタンス生成・平均値補完
si = SimpleImputer(missing_values=np.nan, strategy='mean')
#補完
X = si.fit_transform(X)
#新規のDataFrameを生成
df1 = pd.DataFrame(X,columns=list(df.columns))
print(df1)
出力結果
欠損値の補完方法の指定
欠損値補完方法を指定するには、strategy=”XXXX”部分に下記を記載します。
mean | 平均値 |
---|---|
median | 中央値 |
most_frequent | 最頻値 |
constant | 定数(fill_valueで指定した数値or文字列) |
中央値(median)
各列毎に算出された「中央値」で欠損値を一括補完したい場合、strategyを次のように書き換えて実行します。
コード
#中央値
si = SimpleImputer(missing_values=np.nan, strategy='median')
出力結果
指定した値で欠損値補完|定数(constant)
欠損値をfill_valueで指定した数値または文字列で置換します。
constantでの欠損値一括補完というケースほとんどないですが今回は例として示します。
コード
#定数(fill_value)
si = SimpleImputer(missing_values=np.nan, strategy='constant',fill_value=9999)
出力結果
【参考】欠損値の可視化・除去作業について
本記事をご覧いただきありがとうございました!本記事ではデータクレンジングのノウハウとして「欠損値の確認・可視化方法」および「欠損値の除去(削除)方法」についても解説しています。是非ご覧ください!
データクレンジング:欠損値の確認・可視化方法
【Python】Pandasで欠損値確認・missingnoで欠損状況を視覚化
データ分析や機械学習・AIモデル構築のために欠かせないデータクレンジング。その中でも欠損値の処理は分析・モデル精度向上という観点で非常に重要なプロセスと言えます。本記事では「Pythonを用いた欠損値の確認・可視化方法」について解説します。
データクレンジング:欠損値の除去方法
【Python】欠損値を削除・一括除外する方法
データ分析や機械学習・AIモデル構築のために欠かせないデータクレンジング。本記事では「Pythonを用いた欠損値データの除外方法」について解説。
【参考】Pythonでのデータ前処理技法を学ぶ上でおすすめの教材
統計処理や機械学習分野では、データの前処理はモデル精度向上に欠かせません。Pythonでのデータ前処理について詳しく学びたい方は、上記の書籍もおすすめできます。
【参考】Pythonでのデータ前処理・分析・可視化
当サイトではPythonを用いた「データ前処理手法」「データ分析」「グラフや表を用いた可視化」手法について幅広く解説しております。AI・機械学習にも応用できる内容となっておりますため、興味がある方は併せてご確認下さい。
Pythonを活用したデータ処理・分析手法一覧
【参考】Pythonとは・できること一覧
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら