Shikata Ga Nai

Private? There is no such things.

7. 実践!Kaggle Titanicコンペに挑戦① 〜データの読み込みと基本分析〜

Hello there, ('ω')ノ

📌 1. Titanicコンペとは?

1912年、豪華客船「タイタニック号」が氷山に衝突し、乗客の約68%が死亡する大惨事となりました。
このコンペでは、乗客の情報(年齢・性別・乗船クラスなど)をもとに、生存する確率を予測します。

📌 使用するデータセット
- train.csv(訓練データ)
- 乗客の情報(年齢・性別・客室クラスなど)+ 生存(Survived: 0 = 死亡, 1 = 生存)
- test.csv(テストデータ)
- 生存情報がない乗客データ(モデルを使って予測する)

👉 Titanicコンペのページ からデータをダウンロードできます。


📌 2. データの読み込み

まずは、データを読み込んで内容を確認しましょう!

✅ pandasを使ってデータを読み込む

import pandas as pd

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

# データの先頭5行を表示
train.head()

pd.read_csv() でデータを読み込める!
train.head() でデータの最初の5行を確認!


📊 3. データの基本情報を確認

次に、データの概要を把握しましょう!

# データの行数・列数
print("Trainデータのサイズ:", train.shape)
print("Testデータのサイズ:", test.shape)

# データ型と欠損値の確認
print(train.info())

出力結果(例)

Trainデータのサイズ: (891, 12)
Testデータのサイズ: (418, 11)

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   PassengerId  891 non-null    int64  
 1   Survived     891 non-null    int64  
 2   Pclass       891 non-null    int64  
 3   Name         891 non-null    object  
 4   Sex          891 non-null    object  
 5   Age          714 non-null    float64  
 6   SibSp        891 non-null    int64  
 7   Parch        891 non-null    int64  
 8   Ticket       891 non-null    object  
 9   Fare         891 non-null    float64  
10   Cabin        204 non-null    object  
11   Embarked     889 non-null    object  

train.shape でデータのサイズ(行数 × 列数)を確認!
train.info() で各列のデータ型と欠損値の有無を確認!

🔍 気づいたこと
- Age(年齢)に 欠損値がある(714/891しかデータがない)
- Cabin(客室番号)の欠損率が かなり高い(204/891しかデータがない)
- Embarked(乗船地)に 少し欠損がある(889/891)

欠損データの処理が必要になる!


📊 4. 目的変数(Survived)の分布を確認

目的変数 Survived(生存) の割合を見てみましょう!

pip install japanize-matplotlib


import matplotlib.pyplot as plt
import seaborn as sns
import japanize_matplotlib  # ← 日本語フォントを自動設定

# 生存率のカウントプロット
sns.countplot(x="Survived", data=train)
plt.title("生存者と非生存者の分布")  # ← 日本語タイトル
plt.show()

sns.countplot() でカテゴリ変数の分布を可視化!
0(死亡)より1(生存)の方が少ないことがわかる!


📊 5. 各特徴量と生存率の関係を調べる

次に、生存率に影響を与えそうな特徴を確認します!

✅ (1) 性別と生存率

# 性別ごとの生存率を計算
print(train.groupby("Sex")["Survived"].mean())

# 可視化
sns.barplot(x="Sex", y="Survived", data=train)
plt.title("性別ごとの生存率")
plt.show()

🔍 結果の考察
- 女性の生存率が男性よりも圧倒的に高い!
「女性を優先して救助する」ルールがあったため


✅ (2) 乗船クラス(Pclass)と生存率

# 乗船クラスごとの生存率
print(train.groupby("Pclass")["Survived"].mean())

# 可視化
sns.barplot(x="Pclass", y="Survived", data=train)
plt.title("乗船クラスごとの生存率")
plt.show()

🔍 結果の考察
- 1等客(Pclass=1)は生存率が高い!
富裕層の方が救助されやすかった可能性がある


✅ (3) 年齢と生存率

import warnings

# 🔹 警告メッセージを非表示にする
warnings.simplefilter(action="ignore", category=FutureWarning)

# 年齢の分布を可視化
sns.histplot(train["Age"], bins=30, kde=True)
plt.title("年齢の分布")
plt.show()

# 年齢ごとの生存率を可視化
sns.boxplot(x="Survived", y="Age", data=train)
plt.title("年齢ごとの生存率")
plt.show()

🔍 結果の考察
- 子ども(年齢が低い人)の方が生存率が高い!
「女性と子どもを優先」するルールが影響した可能性


🎯 まとめ

データの読み込みと基本的な情報を確認した!
Survived(生存)の分布を可視化した!
性別・乗船クラス・年齢と生存率の関係を調べた!

Best regards, (^^ゞ