Kaggle のタイタニック問題をやってみる(1)
今までGoの記事を書いてきましたが、一旦お休みして、今回は kaggle の Titanic - Machine Learning from Disaster に挑戦しようと思います。挑戦とはいえ、初心者ですので、下記を Code を参考にしながら進めていきたいと思います。
まずは、データの中身を見ていきます。
データ
このタイタニック問題のデータの中身については、いろいろなサイトで解説されていますので、横着しますが、詳細はこちらのサイトを参照してもらえればと思います。データの項目として、乗客の名前やチケットクラス、年齢、性別などのデータと生存フラグがあります。訓練データにはこれら全ての項目があり、テストデータはこれらの項目の中から生存フラグが無いデータになります。
生存に大きく関与した項目として考えられるのは「年齢」「性別」「チケットクラス」が挙げられると思います。今回はシンプルに考えるためにも、この3項目に注目して、データの中身を見ていきたいと思います。その前にまずは、データ全体の概要を見ていきます。
データ概要
import numpy as np import pandas as pd import seaborn as sns %matplotlib inline df = pd.read_csv("/root/practice/titanic/csv/train.csv") df.info() df.isnull().sum().sort_values(ascending=False)
<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 dtypes: float64(2), int64(5), object(5) memory usage: 83.7+ KB
Cabin 687 Age 177 Embarked 2 PassengerId 0 Survived 0 Pclass 0 Name 0 Sex 0 SibSp 0 Parch 0 Ticket 0 Fare 0 dtype: int64
データ数は891行、Cabin(客室番号)とAge(年齢)、Embarked(出港地)に欠損値があるようです。
チケットクラス
Pclass(チケットクラス)についてグラフにしてみます。
sns.set_style("whitegrid") sns.countplot(x="Pclass", data=df, hue="Survived")
Pclassの数値の意味ですが下記の通りで、上のクラスの人ほど生存率が高いことがわかります。
- 1:上層クラス
- 2:中級クラス
- 3:下層クラス
性別
性別についてグラフにします。
sns.set_style("whitegrid") sns.countplot(x="Sex", data=df, hue="Survived")
女性の方が生存率が高いことがわかります。
年齢
年齢についてグラフにします。
age_survived = df.query("Survived == 1 and Age > 0") age_not_survived = df.query("Survived == 0 and Age > 0") sns.histplot(x="Age", data=age_survived, bins=30, kde=True, color="green", alpha=0.5) sns.histplot(x="Age", data=age_not_survived, bins=30, kde=True, color="red", alpha=0.5)
10代以下の人の生存率が高いことがわかります。30代の生存者数は多いようですが、死亡者数も多いので生存率としては高くないようです。
その他要素
その他の要素についてもグラフにします。
兄弟/配偶者の数
sns.set_style("whitegrid") sns.countplot(x="SibSp", data=df, hue="Survived")
親/子供の数
sns.set_style("whitegrid") sns.countplot(x="Parch", data=df, hue="Survived")
料金
fare_survived = df.query("Survived == 1") fare_not_survived = df.query("Survived == 0") sns.histplot(x="Fare", data=age_survived, bins=30, kde=True, color="green", alpha=0.7) sns.histplot(x="Fare", data=age_not_survived, bins=30, kde=True, color="red", alpha=0.5)
出港地
sns.set_style("whitegrid") sns.countplot(x="Embarked", data=df, hue="Survived")
タイタニックに同乗している兄弟・配偶者の数、親・子供の数が0人以外だと、生存率が高いように見える、など気になるデータもありますが、今回はシンプルに考えたいので扱いません。
今回はデータの中身を調査して、下記のことがわかりました。
- 上層クラスの生存率が高い
- 女性の方が生存率が高い
- 10代の生存率が高い
次回はこれらの項目を元に学習していきたいと思います。