前回簡単な予測をしたので今回は前処理の部分
まずはデータの読み込み
同じくhousingprice からダウンロード
X_full = pd.read_csv('train.csv', index_col='Id')
欠損値に関しての処理
・数値に対して
・カテゴリ変数に対して
欠損値のしらべかた
X_isnull().sum()
.sum をつけることでサマリーにしてくれる
このデータではLotFrontageが259個の欠損値がある
特定の列の欠損値を削除
X_full.dropna(axis=0, subset=['SalePrice'], inplace=True)
これはSalesPriceの列の欠損値があるところを削除
X_full.drop(['SalePrice'], axis=1, inplace=True)
これはSalesPriceを丸ごと削除
数値データの対応
数値データのみ抜き出し
X = X_full.select_dtypes(exclude=['object'])
この中でNaが入っているデータを抜き出す
miss_col_data = [col for col in X_train.columns if X_train[col].isnull().any()]
これでどこにNaがあるか判明
やり方はいろいろあるがimpleInputerが簡単
from sklearn.impute import SimpleImputer
my_imputer = SimpleImputer()
imputed_X_train = pd.DataFrame(my_imputer.fit_transform(X))
SimpleImputerはデフォルトはMean
https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html
カテゴリ変数の対応
2パターン、Onehotとorginal encoding
ちがいは。。。まだわかんない。。。とりあえずワンホットにしておけばいい気もするが。
orginal encoding
from sklearn.preprocessing import OrdinalEncoder
ordinal_encoder=OrdinalEncoder()
label_X_train[good_label_cols] = ordinal_encoder.fit_transform(X[label_cols])
これだけ、Xの中のラベル化したいものだけを抜き出す
one hot encoding
from sklearn.preprocessing import OneHotEncoder
OH_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False)
OH_cols_train = pd.DataFrame(OH_encoder.fit_transform(X[cardinality_cols]))
これだけ、Xの中のラベル化したいものだけを抜き出す
どちらも簡単