Hello there, ('ω')ノ
🧹 ステップ③:前処理(データクレンジング)
ここでは主に以下の作業を行います:
| 処理内容 | 目的 |
|---|---|
| 欠損値(NaN)の処理 | モデルが学習できるようにする |
| カテゴリ変数の処理 | 文字列データを数値に変換して学習可能にする |
| データの統合と整形 | trainとtestを一緒に加工して一貫性を保つ |
📦 まずはtrainとtestを結合しよう
# 保存しておく y = train['SalePrice'] # 予測対象 train_ID = train['Id'] test_ID = test['Id'] # 'Id'と'SalePrice'を削除 train.drop(['Id', 'SalePrice'], axis=1, inplace=True) test.drop(['Id'], axis=1, inplace=True) # trainとtestを結合 all_data = pd.concat([train, test], axis=0).reset_index(drop=True) print("Combined data shape:", all_data.shape)
🔍 欠損値の確認(どの列にどれだけあるか)
# 欠損値の数が多い順に表示(20件まで) missing = all_data.isnull().sum() missing = missing[missing > 0].sort_values(ascending=False) missing.head(20)
この出力を見ると、どの列にどれだけ欠損があるのかがわかります。
🛠 欠損値の処理(初心者向けにシンプルに)
ここでは簡単に:
- 数値データ → 平均値で埋める
- カテゴリデータ → 最頻値で埋める
# 数値型とカテゴリ型に分ける num_cols = all_data.select_dtypes(include=['int64', 'float64']).columns cat_cols = all_data.select_dtypes(include=['object']).columns # 数値型:平均値で埋める for col in num_cols: all_data[col] = all_data[col].fillna(all_data[col].mean()) # カテゴリ型:最頻値で埋める for col in cat_cols: all_data[col] = all_data[col].fillna(all_data[col].mode()[0])
🔁 カテゴリ変数の変換(ダミー変数化)
モデルに使えるように、文字列 を 数値 に変換します。
# One-hot encoding(ダミー変数化) all_data = pd.get_dummies(all_data) print("Data shape after get_dummies:", all_data.shape)
🔄 学習用とテスト用に分割し直す
# 学習用データとテストデータに戻す X_train = all_data[:len(y)] X_test = all_data[len(y):]
✅ ここまでのまとめ
| 処理 | 内容 |
|---|---|
| 欠損値処理 | 数値→平均、カテゴリ→最頻値で埋めた |
| カテゴリ変数 | One-hotエンコーディングで数値に変換 |
| 結合処理 | trainとtestを合体→同時に処理→再分割 |
Best regards, (^^ゞ