Python 機械学習 前処理

機械学習を行う前に

現実にはデータが完全な形で提供されることはほぼなく、欠損値や外れ値が存在する。

また、列の内容が文字列の場合、数値に変換することも必要になる。

欠損値

欠損値を見つける

# 欠損値があるかをtrue/falseで表示
df.isnull()

# 欠損値のある列を確認
df.isnull().any(axis=0)

# 欠損値のある行を確認
df.isnull().any(axis=1)

# 欠損値のある行の数を確認
df.isnull().sum()

欠損値への対処

# 欠損値のある行を削除
df = df.dropna(how='any',axis=0)

# 欠損値を0で穴埋め
df["国語"] = df["国語"].fillna(0)

# 欠損値を平均で穴埋め
heikin = df["国語"].mean()
df["国語"] = df["国語"].fillna(heikin)

他にもグループ毎で平均を出し、その値で欠損値を埋める方法もある。

文字列の数値への変換

例えば、男を1、女を0などに置き換える。

ダミー関数の利用

# 男 列ができ、1と0になる。
x = pd.get_dummies(df['男'],drop_first=True)

# 結果を元のdfに連結する
x=pd.get_dummies(df['男'],drop_first=True)
df = pd.concat([df,x],axis=1)

A,B,Cの3パターンがあるとき、drop_first=Trueでは、B,Cの2列、drop_first=Falseでは、A,B,Cの3列ができ、それぞれ1か0が入る。

外れ値への対処

散布図を作成し、外れ値があるかを確認する。
外れ値があればそれを抜き出し、削除する。
no = df[(df["列名1"]>上限値) & (df["列名2"]<下限値)].index
df = df.drop(no,axis=0)