Splunk でKaggleの Titanic に挑戦 - 1章：データ確認編


Splunk にも MLTK (Machine Learning Took Kit) なるものが用意されており、python の scikit-learn を利用した機械学習ができるようになっていますが、実際にデータ分析でよく使われる Kaggle のデータを Splunkを使って分析したらどうなるか実験してみました。

ちなみに、本来Splunkはリアルタイムに発生するデータの取り扱いの方が得意なので、このような Fixデータの解析向けではないと思うのですが、とりあえずやってみたいと思います。あと、精度を上げるためのもっといいアプローチはたくさんあると思いますが、今の私のレベルでやらせてもらいますので、あしからず。

# 全体の流れ
今回は Kaggle のチュートリアルとしても有名な Titanic を利用して分析してみます。
少し長くなるので、4つの章に分けて書きたいと思います。
[1章：データ確認編](https://qiita.com/maroon/items/53fd1ce702fe14485ba1)：実際のデータを可視化して確認します。分析方針を決めるためにも重要なステップ
[2章：処理編](https://qiita.com/maroon/items/8ef581c8a6265b319927) ：機械学習ができるように、データを整形します。もっとも手間がかかるが重要なパート
[3章：学習編](https://qiita.com/maroon/items/6d322c7ef461f6faca52) ：いくつかのアルゴリズムを利用して Train データを学習しモデルを作成します。
[4章：実践編](https://qiita.com/maroon/items/0e18cee7a455a637ec7a) ：最もよかった学習器を Testデータに適用して、Kaggleに Submitします。

# 利用データ
Kaggle の チュートリアルとしても有名なこちらの Titanicデータセットを利用します。
https://www.kaggle.com/c/titanic

各乗客の特徴データがあり、また目的変数として生存結果が 0と１で表記されております。

データは,訓練データ(train.csv)と、テストデータ (test.csv)に最初から分かれており、テストデータには生存結果が載っていないので、訓練データで学習させたモデルをもとに、テストデータの生存結果を予測します。最終的に、Kaggleに予測結果を送ることで、正解率などが判明します。

各データフィールドの説明もサイトに載ってますが、簡単に解説します。
・PassengerID --- 通し番号
・Survived --- 生存の結果（１は生存。0は死亡）
・Pclass -- 客室等級（１が最高）
・Name -- 名前
・Sex -- 性別
・Age -- 年齢
・SibSp --乗客下兄弟の数
・Parch -- 乗船した親・子の数
・Ticket -- チケット番号
・Fare -- 乗船代金
・Cabin -- 部屋番号
・Embarked -- 乗船した港。 S.C.Q の３種類

## 利用アプリ

今回分析するにあたり利用した Splunkアプリはこちらです。
・　Splunk Datasets Add-on : データの中身を確認・編集するのに便利です。
　https://splunkbase.splunk.com/app/3245/
・　Splunk Machine Learning Toolkit : MLTK 本体です。
　https://splunkbase.splunk.com/app/2890/
・　Python for Scientific Computing (for Linux 64-bit)　： MLTKを動かす上で必要な scikit-learn ライブラリが入ってます。各OS毎にコンポーネントが違うので注意してください。
　https://splunkbase.splunk.com/app/2882/

## データの取り込み

それでは実際に、訓練データ(train.csv)を取り込んでみます。今回は lookupファイルとして認識させて、データセットを作成します。

1. Lookup ファイルの作成と Lookup 定義の作成　（ここでは詳細は割愛します）
2. Splunk Datasets Add-onで追加したコンポーネントを利用してテーブルの拡張。次に全てのフィールドを選択し完了.最後に新しいテーブルセット名をつけて保存する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/0a6c6d77-4a8a-5a92-4a5b-ec4c62b4fea1.png)
3. データの中身を確認する。後ほどこちらの画面を利用して確認をおこなっていく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/87d0e09c-491c-9120-7807-93d594cc0e30.png)

##　データの確認

それでは、実際にデータの中身を可視化しながら見ていき、今後の分析の方向性を決めたいと思います。

### １）欠損データの有無

先ほどのデータセットの画面で確認できます。
欠損があるフィールドは、以下の３つ
・Age : 19.8% 
・Cabin: 77.1%
・Embarked : 0.22% 

### 2) データタイプ
こちらも先ほどのデータセット画面で確認できます。 (#は数値、aは文字列) 
・数値： Age, Fare, Parch, PassengerId, Pclass, SibSp, Survived
・文字列：　Cabin, Embarked, Name, Sex, 
・混在： Ticket (74% 数字、26% キャラクター) 

### 3) 生存の割合を確認
データセットを使って、もう少し可視化するため「ピポットで可視化」に移動する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/240f214c-ddc7-5530-5eb2-ef7e49554ef4.png)

７割近く死亡していることがわかる。本当に大惨事。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/ca358da4-0bbc-4f8f-d198-d056113e4e3f.png)

### 4) 男女の生存比率
男性が２倍近く乗船していたが、生存者は女性の方が２倍くらい多いことがわかる。不謹慎だがレディーファーストができていたということか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/5cbfc6e2-9577-04aa-9b3c-ef55cea13ba2.png)

### 5) 客室等級の生存比率
やはり、等級が下がると死亡率があがる。３等室は圧倒的に多い。逆に１等室だと高い確率で生存している
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/4abc0bf0-d14b-5420-61d6-22a98ea264b6.png)

### 6) 乗船港の違いによる生存比率
Cから乗った乗客は半数以上生存している。Sから乗った乗客は高い確率で死亡している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/4d679545-530c-40c3-b0cf-119b534df64d.png)

### 7) 年齢別の生存数
今度はサーチを使って、年齢を"Child", "Young", "Adult", "Old" の４つのカテゴリーに分けて可視化してみる。10才以下の Child　グループは半数以上が生存している。それ以上だとあまり変わらない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/ecb04376-7286-4208-b012-c01e9991fdd4.png)

### 8) 運賃別の生存数
運賃を見るとタダで乗船しているひとから500ドル以上の高額を支払っている人までバラバラいるが、安いグループから高いグループまで６段階にグループ分けして、生存数を比較してみる。運賃の高いグループ(100ドル以上のF5,F6グループ)は生存率が高い。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/295822bc-174d-f0eb-9d8c-188fdc522552.png)


## まとめ
データ欠損のあるフィールドを確認したり、生存結果に関係のありそうなフィールドが確認できました。
特に性別はかなりの関係性がありそうですし、客室等級の高い人も生存している割合が大きいことがわかります。
また年齢や運賃などは特定のグループに所属していると生存率が高くなることがわかりました。
これだけでもある程度の予測がたてられそうですが、これらの情報を元に機械学習のためのデータ前処理を次の章から実施していきたいと思います。