データ前処理からランダムフォレスト予測・提出までのコード解説

# 説明
こちらの記事は以下の記事に関連する記事となります。

https://qiita.com/koichi2426/items/515841c5356998b7140a


# 対象コード全文
```python
# -------------------------------
# ライブラリのインポート
# -------------------------------
import numpy as np  # 数値計算ライブラリ
import pandas as pd  # データ処理・CSV読み込み用

import os
# 入力データの一覧を表示（確認用）
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

# -------------------------------
# データの読み込み
# -------------------------------
train_df = pd.read_csv('/kaggle/input/titanic/train.csv')
test_df = pd.read_csv('/kaggle/input/titanic/test.csv')

print("Trainデータの形:", train_df.shape)
print("Testデータの形:", test_df.shape)

# -------------------------------
# データの基本確認
# -------------------------------
print("\n--- 欠損値の数 ---")
print(train_df.isnull().sum())

print("\n--- 学習データの先頭 ---")
print(train_df.head())

print("\n--- 学習データの情報 ---")
print(train_df.info())

# -------------------------------
# 欠損値の補完
# -------------------------------

# Age（年齢）を中央値で補完
train_df['Age'] = train_df['Age'].fillna(train_df['Age'].median())
test_df['Age'] = test_df['Age'].fillna(test_df['Age'].median())

# Embarked（乗船地）を最頻値で補完
train_df['Embarked'] = train_df['Embarked'].fillna(train_df['Embarked'].mode()[0])

# Fare（運賃）を中央値で補完（テストデータ）
test_df['Fare'] = test_df['Fare'].fillna(test_df['Fare'].median())

# -------------------------------
# カテゴリ変数を数値に変換
# -------------------------------

# 性別（Sex）: male → 0, female → 1
train_df['Sex'] = train_df['Sex'].map({'male': 0, 'female': 1})
test_df['Sex'] = test_df['Sex'].map({'male': 0, 'female': 1})

# 乗船地（Embarked）: S → 0, C → 1, Q → 2
embarked_map = {'S': 0, 'C': 1, 'Q': 2}
train_df['Embarked'] = train_df['Embarked'].map(embarked_map)
test_df['Embarked'] = test_df['Embarked'].map(embarked_map)

# -------------------------------
# 使用する特徴量の選択
# -------------------------------

# モデルに使う列
features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']

# 学習用とテスト用のデータを準備
X_train = train_df[features]
y_train = train_df['Survived']
X_test = test_df[features]

# 処理後のデータ確認
print("\n--- 処理後の特徴量（学習データ） ---")
print(X_train.head())

# -------------------------------
# 機械学習モデルの学習と予測
# -------------------------------

from sklearn.ensemble import RandomForestClassifier  # ランダムフォレストを使用
from sklearn.metrics import accuracy_score  # （任意）精度確認用

# モデルのインスタンスを作成
model = RandomForestClassifier(n_estimators=100, random_state=42)

# 学習データでモデルを訓練
model.fit(X_train, y_train)

# テストデータに対して予測を実行
predictions = model.predict(X_test)

# -------------------------------
# 提出用ファイルの作成
# -------------------------------

# 提出には PassengerId が必要なので test データから取得
submission = pd.DataFrame({
    'PassengerId': test_df['PassengerId'],
    'Survived': predictions
})

# CSVファイルとして保存（Kaggleにアップロードする用）
submission.to_csv('/kaggle/working/submission.csv', index=False)

print("\n--- 予測結果の一部 ---")
print(submission.head())

print("\nsubmission.csv を作成しました。Kaggle画面から [Submit Predictions] で提出できます。")
```

# 解説パート

## ステップ1：ライブラリのインポートとデータ確認

まずは必要なライブラリをインポートし、Kaggle上の入力ファイルを確認します。

```python
import numpy as np  # 数値計算用
import pandas as pd  # データフレーム操作用
import os
```

以下のコードで、Kaggle Notebook上にアップロードされているデータファイルの一覧を表示します。

```python
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))
```


## ステップ2：データの読み込み

訓練データとテストデータを読み込みます。

```python
train_df = pd.read_csv('/kaggle/input/titanic/train.csv')
test_df = pd.read_csv('/kaggle/input/titanic/test.csv')
```

データのサイズを確認して、行数・列数の把握をします。

```python
print("Trainデータの形:", train_df.shape)
print("Testデータの形:", test_df.shape)
```


## ステップ3：基本的なデータの確認

```python
print("\n--- 欠損値の数 ---")
print(train_df.isnull().sum())
```

この出力で、どの列に欠損値（NaN）があるかを確認できます。

```python
print("\n--- 学習データの先頭 ---")
print(train_df.head())
```

どんなカラム（列）があるかをざっと確認します。

```python
print("\n--- 学習データの情報 ---")
print(train_df.info())
```

`info()`により、各列のデータ型と欠損の有無が分かります。


## ステップ4：欠損値の補完

データをそのままでは使えないため、欠損している値を補います。

```python
train_df['Age'] = train_df['Age'].fillna(train_df['Age'].median())
test_df['Age'] = test_df['Age'].fillna(test_df['Age'].median())
```

`Age`（年齢）は中央値で補完。

```python
train_df['Embarked'] = train_df['Embarked'].fillna(train_df['Embarked'].mode()[0])
```

`Embarked`（乗船地）は最頻値で補完。

```python
test_df['Fare'] = test_df['Fare'].fillna(test_df['Fare'].median())
```

`Fare`（運賃）もテストデータのみに欠損があるため、中央値で補完します。


## ステップ5：カテゴリ変数の数値化

機械学習では文字情報をそのまま扱えないため、数値に変換します。

```python
train_df['Sex'] = train_df['Sex'].map({'male': 0, 'female': 1})
test_df['Sex'] = test_df['Sex'].map({'male': 0, 'female': 1})
```

性別は、`male = 0`, `female = 1` に変換。

```python
embarked_map = {'S': 0, 'C': 1, 'Q': 2}
train_df['Embarked'] = train_df['Embarked'].map(embarked_map)
test_df['Embarked'] = test_df['Embarked'].map(embarked_map)
```

乗船地も `S = 0`, `C = 1`, `Q = 2` に数値化。

## ステップ6：特徴量の選択とデータ分割

機械学習に使うカラム（特徴量）を指定します。

```python
features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']
X_train = train_df[features]
y_train = train_df['Survived']
X_test = test_df[features]
```

これで、訓練用の入力（`X_train`）、正解ラベル（`y_train`）、テスト用の入力（`X_test`）が準備されます。

## ステップ7：モデルの構築と学習・予測

ここではランダムフォレスト（決定木を複数使った強力なモデル）を使用します。

```python
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
```

`fit()`で訓練し、学習済みモデルが完成します。

```python
predictions = model.predict(X_test)
```

学習済みモデルでテストデータの生存予測を行います。


## ステップ8：提出ファイルの作成

提出には `PassengerId` と `Survived` 列が必要です。

```python
submission = pd.DataFrame({
    'PassengerId': test_df['PassengerId'],
    'Survived': predictions
})
submission.to_csv('/kaggle/working/submission.csv', index=False)
```

これで、`submission.csv` が生成されました。あとはKaggle画面右側の「Submit Predictions」から提出するだけです。