以下の内容はhttps://cysec148.hatenablog.com/entry/2025/10/07/063237より取得しました。


ステップ③:前処理(欠損値処理とカテゴリ変数の対応)

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, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2025/10/07/063237より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14