LoginSignup
0
0

More than 1 year has passed since last update.

kaggle machine learning basic 2

Posted at

前回簡単な予測をしたので今回は前処理の部分

まずはデータの読み込み
同じくhousingprice からダウンロード

X_full = pd.read_csv('train.csv', index_col='Id')

欠損値に関しての処理
・数値に対して
・カテゴリ変数に対して

欠損値のしらべかた
X_isnull().sum()
.sum をつけることでサマリーにしてくれる
image.png
このデータでは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の中のラベル化したいものだけを抜き出す

どちらも簡単

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0