Help us understand the problem. What is going on with this article?

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

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

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

全体の流れ

今回は Kaggle のチュートリアルとしても有名な Titanic を利用して分析してみます。
少し長くなるので、4つの章に分けて書きたいと思います。
1章:データ確認編:実際のデータを可視化して確認します。分析方針を決めるためにも重要なステップ
2章:処理編 :機械学習ができるように、データを整形します。もっとも手間がかかるが重要なパート
3章:学習編 :いくつかのアルゴリズムを利用して Train データを学習しモデルを作成します。
4章:実践編 :最もよかった学習器を Testデータに適用して、Kaggleに Submitします。

利用データ

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

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

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

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

利用アプリ

今回分析するにあたり利用した 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
  3. データの中身を確認する。後ほどこちらの画面を利用して確認をおこなっていく。 image.png

 データの確認

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

1)欠損データの有無

先ほどのデータセットの画面で確認できます。
欠損があるフィールドは、以下の3つ
・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

7割近く死亡していることがわかる。本当に大惨事。
image.png

4) 男女の生存比率

男性が2倍近く乗船していたが、生存者は女性の方が2倍くらい多いことがわかる。不謹慎だがレディーファーストができていたということか。
image.png

5) 客室等級の生存比率

やはり、等級が下がると死亡率があがる。3等室は圧倒的に多い。逆に1等室だと高い確率で生存している
image.png

6) 乗船港の違いによる生存比率

Cから乗った乗客は半数以上生存している。Sから乗った乗客は高い確率で死亡している。
image.png

7) 年齢別の生存数

今度はサーチを使って、年齢を"Child", "Young", "Adult", "Old" の4つのカテゴリーに分けて可視化してみる。10才以下の Child グループは半数以上が生存している。それ以上だとあまり変わらない。
image.png

8) 運賃別の生存数

運賃を見るとタダで乗船しているひとから500ドル以上の高額を支払っている人までバラバラいるが、安いグループから高いグループまで6段階にグループ分けして、生存数を比較してみる。運賃の高いグループ(100ドル以上のF5,F6グループ)は生存率が高い。
image.png

まとめ

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away