KaggleのHouse Pricesコンペで実施したデータ前処理(備忘録)
前提条件
Python3.7.10を使用
1.目的変数の分布の確認
目的変数の分布が正規分布になっているかどうか確認し、正規分布になっていなかった。
log1p
関数で、目的変数で変換し、目的変数の分布を確認。学習を行う際に、正規分布にした方が、精度が上がるらしい。
※log1p
関数は、$\log(1+x)$の演算を行う関数
2.欠損値の補完
欠損値を確認し、データ補完を実施した。
補完方法は、None/ゼロ/最頻値/平均値/中央値など。
補完方法 | コード |
---|---|
None | df.fillna({colum_name : 'None'}, inplace=True) |
ゼロ | df[colum_name].fillna(0, inplace=True) |
最頻値 | df[colum_name].fillna(df[colum_name].mode()[0], inplace=True) |
平均値 | df[colum_name].fillna(df[colum_name].mean(), inplace=True) |
中央値 | df[colum_name].fillna(self.df[colum_name].median(), inplace=True) |
※dfはPandasのDataFrame
3.外れ値の除去
各列のデータを箱ひげ図などで確認し、外れ値を除去する。以下はLotFrontageが160以上の場合、160に値を変更するプログラム
df.loc[df['LotFrontage'] >= 160, 'LotFrontage'] = 160
4.数値データのカテゴリ化
数値データであるが、実際は、カテゴリデータである場合。数値データを文字列に変換する。
df['MSSubClass'] = df['MSSubClass'].apply(str)