データ分析　タイタニック号1

[Aidemy](https://aidemy.net/)　2020/10/30
#はじめに
　こんにちは、んがょぺです！バリバリの文系ですが、AIの可能性に興味を持ったのがきっかけで、AI特化型スクール「Aidemy」に通い、勉強しています。ここで得られた知識を皆さんと共有したいと思い、Qiitaでまとめています。以前のまとめ記事も多くの方に読んでいただけてとても嬉しいです。ありがとうございます！
　今回は「データ分析　タイタニック号」の一つ目の投稿になります。どうぞよろしくお願いします。

＊本記事は「Aidemy」での学習内容を「自分の言葉で」まとめたものになります。表現の間違いや勘違いを含む可能性があります。ご了承ください。

今回学ぶこと
・タイタニック号の生存者予測モデルの流れの確認
・②訓練データ/テストデータの取得
・③データの整形、作成、クレンジング
・④パターンの分析,データの分析（一部、残りは次回行う）

#タイタニック号の生存者予測
##予測の流れ
①明らかにしたい問い、__問題の定義__
②__訓練データ/テストデータの取得__
③__データの整形、作成、クレンジング__
④__パターンの分析__、特定、また探索的な__データの分析__
⑤問題の__モデル化__、予測、解決
⑥問題解決のステップと最終的な解決方法を__視覚化__、報告

##①明らかにしたい問い、問題の定義
・今回は__「タイタニック号の生存者予測」__についての予測モデルを構築する。「Kaggle」というサイトでは__「コンペ」__と呼ばれる__「モデルのオークション」__のようなものが開催されており、これはその課題の一つである。
・Kaggleでは、__課題の訓練データが渡される__。今回もそれを使っていく。

・問題の定義について
　・今回の訓練データには__「乗客のデータ」__と__「生存/死亡」のラベル__が付与されており、テストデータにはこのラベルはついていない。
　・このテストデータに構築したモデルを適用すれば乗客の状態を予測できる。

##②訓練データ/テストデータの取得
・データ取得は__「pd.read_csv()」__で行う。
・また、どの特徴量（変数）をデータセットとして使うかを決めるために、Pandasで__データの特徴量（変数）を確認__する。これには、train_dfの__列名を見ればいい__ので、__「train_df.columns.values」__で出力する。
・また、どのようなデータが入っているかを確認するために、__データの先頭と後ろの数行を出力__する。これは__「head()/tail()」__で確認すれば良い。

・コード
![スクリーンショット 2020-10-21 16.45.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/c94886df-98c2-524d-8bcb-e3b2a69c158a.png)

・出力結果(一部のみ)
![スクリーンショット 2020-10-21 16.48.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/fb450136-ba5b-ed8f-5721-de46a2e64be8.png)

・各特徴量について
　・__Survived__:生存したか　　「0」がYes/「1」がNo
　・__Pclass__:席のグレード　　「1」>「2」>「3」
　・__Sex__:性別
　・__Age__:年齢
　・__Sibsp__:乗船していた兄弟/配偶者の数
　・__Parch__:乗船していた親/子供/孫の数
　・__Ticket__:乗船番号
　・__Fare__:乗船費用
　・__Cabin__:客室の番号
　・__Embarked__:出航した港名

#③データの整形、作成、クレンジング
##特徴量の種類
・特徴量には__「カテゴリ値」__と__「数値」__が存在する。
##カテゴリ値
・__カテゴリ値__は、__'文字列'__か__'決まった数値'__しか取らない特徴量のことである。それぞれ__「名義データ」__と__「順序データ」__と呼ばれる。
・前項で確認した特徴量のうち、名義データは__「Survived」「Sex」「Embarked」__になる。（Survivedは「Yes/No」を示す）
・順序データは決まった数値「1,2,3」という順番を示す__「Pclass」__になる。

##数値
・数値データは__「離散データ」__と__「連続データ」__に分けられる。
・今回のデータでは、離散データは__「Sibsp」「Parch」__、連続データは__「Age」「Fare」__になる。

##欠損値のカウント
・次に、欠損値の処理を行うために、__データに欠損値があるか、どの特徴量にあるか__ということを確認していく。
・データに欠損値があるかは__「info()」__で確認する。
・出力されたコードを見ると__、「RangeIndex」__が891となっているので、データは全部で891件あることがわかる。ここで各特徴量を見たとき__、個数が891より少なくなっているものは、その分だけ欠損値が含まれている__ということになる。（例えばAgeは714個しかないので、__177個が欠損値__ということになる）
・train_df、test_df共に__「Age」「Fare」「Cabin」__に欠損値が含まれているので、③ではこれらの欠損値を補完していく。

・結果(一部のみ)![スクリーンショット 2020-10-22 12.03.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/6cbc8d9a-4d5c-9690-66d5-dc011ea9c77b.png)


##データの重複の確認
・__データが重複していた場合、削除する必要がある__。重複があるかは__「describe()」__で確認する。
・引数に__「include=['O']」__と指定することで、オブジェクトデータに関する情報を表示できる。具体的には__「count（データ数）」「unique（重複排除後のデータ数）」「top（最も多いデータ）」「freq（topの個数）」__が表示される。
・ここでは重複データの個数が知りたいので、__「unique」__の個数を見れば良い。

・結果![スクリーンショット 2020-10-22 12.00.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/f76f4fba-d6ae-5533-74a9-f7d167454090.png)

##③以降の方針
・ここからは、このデータを使ってモデルを構築していくのだが、__今までに見てきたデータからその際の方針を考えていく__。
・この時の方針（目標）になる物が__7つ__ある。__「分類」「相関」「変換」「補完」「修正」「作成」「グラフ」__である。これらについて「どの特徴量に対してどのように行うか」を考えていく。

・__相関__：モデルで予測していくのは乗客が生き残ったかどうか、すなわち__「Survived」__である。他の特徴量がSurvivedにどのような影響を与えているかを分析するために__相関を調べる__。

・__補完__：データの補完は__相関の強そうなものから優先的に行う__（相間の弱そうなものは次の__修正__を行った方が良い）。今回は__「Age」「Embarked」__から補完する。

・__修正__：Survivedと__明らかに相関がなさそうなものを除外する__。__「Passenerld」「Name」__は乗客の識別のためのデータであるため、生き残ったかどうかは無関係であるので除外とする。また、__「Ticket」__については__重複率が高く__、Survivedとの相関もない可能性があるので、除外される可能性がある。__「Cabin」__については__欠損値が非常に多い__ため、削除される可能性がある。

・__作成__：特徴量に対して__分割や抽出を行う__ことで__新しい特徴量を作成__する。今回は同系統の特徴量「Parch」「Sibsp」について__「FamilySize」__という新しい特徴量を作成する。また、連続データである「Age」「Fare」は__離散データにした方が予測しやすい__ので、__範囲を指定して分割した新しい特徴量__を作成する。

・__分類__：タイタニック号の__生存可能性は「子供」「女性」「上層階（上位クラス）」が高い__とされる。この仮説に基づいてデータを見ると__「Sex=Female」「Age<?」「Pclass=1」__は__「Survived=1」__の可能性が高いということになる。

#④パターンの分析,データの分析
##特徴量の集計（相関）
・今回のような大量のデータを集計、分析するときは__「ピボットテーブル」__を使う。
・ピボットテーブルは__欠損値を含まないデータでのみ行える__他、__「カテゴリ値、順序データ、離散データ」__で行うことが望ましい。
・分析としては、特徴量間の__相関関係を分析する__。

###Pclass（順序データ）とSurvivedのピボットテーブル作成
・まずはコードの記載
![スクリーンショット 2020-10-22 13.18.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/02af8a71-b3bf-7832-803f-abcfff0a7438.png)

・「__train_df[["Pclass","Survived"]]__」の部分は今回作るテーブルの__要素をtrain_dfの列から指定__している。
・「__groupby(["Pclass"],as_index=False)__」は__Pclass列でグループ化（集計）__を行っている。Pclass自体は「1,2,3」の値を持つが、これはそのままcolumnとして使いたいので、index化は行わない。
・「__mean()__」は値Survivedの__平均を算出__している。
・「__sort_values(by="Survived",ascending=False)__」はSurvivedの__平均値を降順でソート__していることを示す。

・出力結果![スクリーンショット 2020-10-22 13.34.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/acedde96-9196-039e-a1a4-7787402d5c26.png)

・これを__「Sex」「Parch」「SibSp」__についても同様に行う。

#まとめ
・タイタニック号の生存率予測のモデルを作成していくにあたり、はじめに行うことがデータの取得である。
・データを取得したら、次回以降でデータの整形を行うときnのために、欠損値や重複が存在するかを確認する。
・ここまでのデータから、次回以降の方針を考える。まずは「相関」の部分から行う。相関は、モデルの教師ラベルとなる「Survived」との相関を考える。

今回は以上です。最後まで読んでいただき、ありがとうございました。