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

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

# 【使用するデータ】![スクリーンショット 2022-09-12 11.48.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/b9ca483c-7ed0-e05a-1016-f3a6beadab30.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/98714ec5-07bd-a42f-64e1-87d2e9f54a07.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/51f8ea2e-2357-3484-f102-d061c924d85c.png)
データはobjectが5つ(Name, Sex, Ticket, Cabin, Embarked)あり、そのままでは使えないため数値変換するか、特徴量を落とす必要があります。

* 欠損値の数
学習用
![スクリーンショット 2022-09-09 17.11.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/374f43a7-fb78-27d7-55f2-f6f275751025.png)
テスト用
![スクリーンショット 2022-09-09 17.12.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/c83ef748-8544-e2a4-1895-3b46e3a01aa2.png)
欠損値が含まれているカラムは3つあり、AgeとCabinはかなり欠損値が含まれていることがわかる。利用するモデルによっては、欠損値を埋める必要があるので考察する。
* 各カラムのユニークな要素数
学習用
![スクリーンショット 2022-09-12 9.45.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/988d702e-c16b-9f32-6ced-a49b5942bc15.png)
テスト用
![スクリーンショット 2022-09-12 9.36.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/ee0ecfdc-5de1-ba44-97cb-8642da20a6c9.png)
PassengerIdのように、全てにユニークな値が振られているものは即削除でいいのかなと思ったが、Idの番号とSurvivedに相関があったら特徴量として有用かもしれないと思ったので、相関を調べることにした。
また、NameやTicketなどのようにobject型で多くのデータがユニークであるものは、実際にデータを見ながら考察することにする。
* 相関係数
![スクリーンショット 2022-09-12 10.15.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/6c931562-8af4-8c89-cdbc-a3fe93fae7fb.png)
数値データのみ相関係数を求めたが、「Survived」と相関が比較的強いものは、PClassとFareであり、PClassとFareは負の相関が強く多重共線性を考慮する必要があるかもしれない。
* describe
![スクリーンショット 2022-09-12 10.26.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/b8adbbc5-4e50-7fd5-3be7-644f81f4e2b9.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/04571e8c-58ab-3238-dc83-d888b9711c79.png)
Pclassはチケットのクラス(種類)を表している。チケットごとに支払う料金やサービスの内容が異なる可能性がある。ヒストグラムを確認すると、チケット1を購入した人は生存率が高く、チケット3を購入した人は死亡率が高くなっている。以下のようなことを考察した。
* チケットの種類で助ける順番を決めた
* チケットの種類で部屋の場所等が決まり、チケット1の方が救助しやすい場所であった
* チケットの種類ごと見ても生存者、志望者共にいるため救助には他の要因も考えられる(子供等を優先したなど)。

### 2.2 Age
![スクリーンショット 2022-09-12 11.48.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/91fefa0c-fce8-6657-6cd5-52002207f615.png)
乗船者の年齢である。10歳以下であると生存者の方が多く、優先して救助されたのではないかと考察できる。

### 2.3 SibSp
![スクリーンショット 2022-09-12 11.56.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/81c3c9c7-a87a-656d-8b0a-851e9ab85f2a.png)
同乗している兄弟や配偶者の数を表している。配偶者や兄弟のいない人の死亡率が高いことがわかった。(共助者の影響?)二人以上だと死亡者の方が多くなるため、人数が多ければ言い訳でもないように思える。親や子供の数も踏まえて考えた方がいいのかもしれない。
### 2.4 Parch
![スクリーンショット 2022-09-12 12.58.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/b18d3c38-63d1-a583-917a-8069315bc32a.png)
親もしくは子供の数を表している。親子供ともにいない人は、やはり死亡率が高い。
親子も兄弟・配偶者もいない人や、少なくともどちらかはいるヒストグラムについても調べてみた。
・一人で来ている人の分布
![スクリーンショット 2022-09-12 13.44.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/3115ce8d-b6dc-00c8-909d-012432d15414.png)

・二人以上で来ている人の分布
   ・SibSp
![スクリーンショット 2022-09-12 13.47.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/2b10b819-e7a0-a1eb-e4b8-c9c41ea43012.png)

   ・Parch
![スクリーンショット 2022-09-12 13.48.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/59d54a3b-e5df-1161-c209-03393f657580.png)
一人で来ている人と比較して、二人以上で来ている場合では死亡率が大幅に下がったと言える。

### 2.5 Fare
![スクリーンショット 2022-09-12 14.00.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/bde14cff-bd3f-a09c-f682-5ec1eb3a94d3.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/dac3efaf-6f66-32fd-fb79-0ed85d2239d0.png)
そして、ダミー変数に変換した。
```
train_data = pd.get_dummies(train_data)
train_data.head()
```
![スクリーンショット 2022-09-12 15.27.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/ed07be89-5be8-b6b5-2faa-375c09f3099b.png)今回は、One-hot-Encodingによる数値化を実施したが、今後、カテゴリ変数の数値化手法については検討・考察したい。

### 3.2 全体
* 相関係数
![スクリーンショット 2022-09-12 15.47.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/e683a0db-45f3-a3f9-b98d-31538ecbb8c8.png)
    相関は「Sex」と「Survived」がありそうだと思った。
* describe
![スクリーンショット 2022-09-12 15.46.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/bf5493a3-ed85-4d46-5810-b824cc933445.png)
基本統計量を見ると、女性より男性が多く、EmbarkedはSがかなり占めていることが分かった。

### 3.3 Sex
![スクリーンショット 2022-09-12 16.16.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/be70176f-a1e4-0eff-e9ea-3abde63e5154.png)
乗客の性別を表している。男性は死亡率が高く、女性は反対に生存率が高いことが分かる。女性が優先的に救助された?

### 3.4 Embarked
* Embarked_C 
![スクリーンショット 2022-09-12 16.11.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/affac21b-9abd-e0e9-f20b-7a2d774ebbfe.png)
* Embarked_S
![スクリーンショット 2022-09-12 16.21.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/01973f38-44da-e42b-d12b-d7cc7b765352.png)
* Embarked_Q 
![スクリーンショット 2022-09-12 16.22.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2774002/2d9208fc-38f7-1e93-5a17-bc5e83d16e8b.png)
出港地を表している。直感的には生存率とは関係なさそうであるが、データを確認するとEmbarked_Sは死亡率が比較的高いように見える


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

### 次の記事
https://qiita.com/tasuku303/items/e942227823fd0838018c