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