2
3

More than 1 year has passed since last update.

Kaggle超入門 ~タイタニック号の生存予測~(データ確認編)

Last updated at Posted at 2022-09-12

【目的】

初投稿です。Kaggleに挑戦し、データ分析について深く学んでみようと思い、代表的なトレーニングコンペであるタイタニック号の生存予測を行いました。今回は、利用するデータを確認してみたいと思います。

【使用するデータ】スクリーンショット 2022-09-12 11.48.49.png

今回の分析で使用したデータは、分析コンペプラットフォームであるKaggleで提供されているデータを利用しました。テストデータから生存者

【分析の流れ】

・データの確認
・データ前処理
・モデル作成
・モデル評価
 

【データ確認】

1.全体

まずは、trainデータとtestデータを読み込んで、trainデータの先頭を確認した。

import pandas as pd

train = pd.read_csv('train.csv')
train.head()

スクリーンショット 2022-09-02 17.34.09.png

各columnの詳細は以下のとおり
・Survived/生存確認
・Pclass/チケットのクラス
・Sex/性別
・Age/年齢
・SibSp/タイタニック号に乗船している兄弟・配偶者の数
・Parch/タイタニック号に乗船している
・Ticket/チケット番号
・Fare/旅客運賃
・Cabin/キャビンナンバー
・Embarked/乗船港

データサイズ、データの型、欠損値を確認

  • データサイズ
train.shape, test.shape
((891, 12), (418, 11))

学習用データが891個、テスト用データが418個あることが分かります。
それぞれのカラムは、目的変数(Survived)含め12あることがわかります。

  • データの型
    スクリーンショット 2022-09-12 9.15.15.png
    データはobjectが5つ(Name, Sex, Ticket, Cabin, Embarked)あり、そのままでは使えないため数値変換するか、特徴量を落とす必要があります。

  • 欠損値の数
    学習用
    スクリーンショット 2022-09-09 17.11.32.png
    テスト用
    スクリーンショット 2022-09-09 17.12.21.png
    欠損値が含まれているカラムは3つあり、AgeとCabinはかなり欠損値が含まれていることがわかる。利用するモデルによっては、欠損値を埋める必要があるので考察する。

  • 各カラムのユニークな要素数
    学習用
    スクリーンショット 2022-09-12 9.45.58.png
    テスト用
    スクリーンショット 2022-09-12 9.36.43.png
    PassengerIdのように、全てにユニークな値が振られているものは即削除でいいのかなと思ったが、Idの番号とSurvivedに相関があったら特徴量として有用かもしれないと思ったので、相関を調べることにした。
    また、NameやTicketなどのようにobject型で多くのデータがユニークであるものは、実際にデータを見ながら考察することにする。

  • 相関係数
    スクリーンショット 2022-09-12 10.15.00.png
    数値データのみ相関係数を求めたが、「Survived」と相関が比較的強いものは、PClassとFareであり、PClassとFareは負の相関が強く多重共線性を考慮する必要があるかもしれない。

  • describe
    スクリーンショット 2022-09-12 10.26.17.png

ここからは、それぞれの特徴量を見ながら、考察していく。

2.各特徴量[数値データ]

各特徴量のSuvivedで分けたヒストグラムを確認し、実際どういう関連があるかを考察してみる。ヒストグラムは、以下のコードで作成した。

# データフレームをSurvivedのラベルで分ける
tr_dead = train.query('Survived == 0')
tr_survive = train.query('Survived == 1')

# ヒストグラム作成
def make_hist(name):
    plt.hist([tr_dead[name], tr_survive[name]], label=["dead", "survive"])
    plt.title(name)
    plt.legend(loc="upper left", fontsize=13) 
    plt.show()

2.1 PClass

スクリーンショット 2022-09-12 11.36.03.png
Pclassはチケットのクラス(種類)を表している。チケットごとに支払う料金やサービスの内容が異なる可能性がある。ヒストグラムを確認すると、チケット1を購入した人は生存率が高く、チケット3を購入した人は死亡率が高くなっている。以下のようなことを考察した。

  • チケットの種類で助ける順番を決めた
  • チケットの種類で部屋の場所等が決まり、チケット1の方が救助しやすい場所であった
  • チケットの種類ごと見ても生存者、志望者共にいるため救助には他の要因も考えられる(子供等を優先したなど)。

2.2 Age

スクリーンショット 2022-09-12 11.48.49.png
乗船者の年齢である。10歳以下であると生存者の方が多く、優先して救助されたのではないかと考察できる。

2.3 SibSp

スクリーンショット 2022-09-12 11.56.39.png
同乗している兄弟や配偶者の数を表している。配偶者や兄弟のいない人の死亡率が高いことがわかった。(共助者の影響?)二人以上だと死亡者の方が多くなるため、人数が多ければ言い訳でもないように思える。親や子供の数も踏まえて考えた方がいいのかもしれない。

2.4 Parch

スクリーンショット 2022-09-12 12.58.00.png
親もしくは子供の数を表している。親子供ともにいない人は、やはり死亡率が高い。
親子も兄弟・配偶者もいない人や、少なくともどちらかはいるヒストグラムについても調べてみた。
・一人で来ている人の分布
スクリーンショット 2022-09-12 13.44.07.png

・二人以上で来ている人の分布
・SibSp
スクリーンショット 2022-09-12 13.47.24.png

・Parch
スクリーンショット 2022-09-12 13.48.12.png
一人で来ている人と比較して、二人以上で来ている場合では死亡率が大幅に下がったと言える。

2.5 Fare

スクリーンショット 2022-09-12 14.00.37.png
その人が支払った料金を表している。チケット以外にも支払いがあるのかは不明。単位が分からないが支払いの少ない人が圧倒的に多く、死亡率も高い。

数値データを確認してきたが、どれも生存率に関連しているところはあると思うが、objectも確認してみる。

3. 各特徴量(oblectデータ)

続いて、objectデータを確認していこうと思う。今回、「Name」、「Ticket」、「Cabin」の3つはユニークな要素が多いため、事前に削除する(時間があるときこれらの特徴量も確認し、前処理手法を検討のうえ精度が向上できるか確認したい)

train_data = train.drop(["PassengerId", "Name", "Ticket", "Cabin"], axis=1)
train_data.head()

3.1 ダミー変数に変換

ダミー変数に変換する前に、まずは欠損値を補完した。欠損値は平均値で補完した。

train_data = train_data.fillna(train_data.mean())
train_data.head()

スクリーンショット 2022-09-12 15.28.42.png
そして、ダミー変数に変換した。

train_data = pd.get_dummies(train_data)
train_data.head()

スクリーンショット 2022-09-12 15.27.02.png今回は、One-hot-Encodingによる数値化を実施したが、今後、カテゴリ変数の数値化手法については検討・考察したい。

3.2 全体

  • 相関係数
    スクリーンショット 2022-09-12 15.47.04.png
    相関は「Sex」と「Survived」がありそうだと思った。
  • describe
    スクリーンショット 2022-09-12 15.46.21.png
    基本統計量を見ると、女性より男性が多く、EmbarkedはSがかなり占めていることが分かった。

3.3 Sex

スクリーンショット 2022-09-12 16.16.49.png
乗客の性別を表している。男性は死亡率が高く、女性は反対に生存率が高いことが分かる。女性が優先的に救助された?

3.4 Embarked

  • Embarked_C
    スクリーンショット 2022-09-12 16.11.14.png
  • Embarked_S
    スクリーンショット 2022-09-12 16.21.42.png
  • Embarked_Q
    スクリーンショット 2022-09-12 16.22.25.png
    出港地を表している。直感的には生存率とは関係なさそうであるが、データを確認するとEmbarked_Sは死亡率が比較的高いように見える

4. まとめ

  • 今回はタイタニック号の生存予測のデータの確認を行なったが、実際の現場などではもっとしつこくデータと向き合う必要があると思うので、今から慣れていきたい。
  • 特徴量選択の方法等今後検討していきたい
  • やっていく中でいろんな手法を調べて知ったので、比較してみたい
  • 次回は、実際にモデルを用いて学習と評価を行なってみたい

次の記事

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3