Kaggleへの参加 (1)

Kaggleへ参加してみることにしました。[たくさんのよい記事やTutorial](#参考資料)が準備されていますが、自分のためのメモとしてこの記事を残そうと思いました。今回は第一回の「Kaggleへの登録と結果の提出」になります。

# 全体
第一回　　Kaggleへ登録と結果の提出
第二回　　[データの理解](https://qiita.com/iwankoTG/items/6f2038d54d9b914ca966) 
第三回　　評価指標と評価方法
第四回　　データの前処理
第五回　　モデル構築
第六回　　ハイパーパラメタのチューニング

### ホストの環境
```souece:OS
$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"
```
### dockerの環境
Kaggleでは[Notebook(Kernel)の環境](https://qiita.com/upura/items/3c10ff6fed4e7c3d70f0#fn28)が準備されていて、こちらを使うと便利なようです。ここでは、自分のPC上でJupyterNotebookの環境をつくって準備をしました。

[こちらで構築した環境](https://qiita.com/iwankoTG/items/95e3b453faa0c9f7f3e4)を使っています。
今回はウェブカメラは使わないので、以下のようにしてdocker環境を立ち上げました。

```:
$xhost +
$docker run --gpus all -it --rm \
           -p 10000:8888 \
           -v /[working directory path]/:/kaggle \
           -v /tmp/.X11-unix:/tmp/.X11-unix \
           -e DISPLAY=$DISPLAY [REPOSITORY]:[TAG]
```
ここで[REPOSITORY]:[TAG]は、$docker images として表示される、作成したdockerになります。
コンテナが起動したら、jupyter notebookを立ち上げます。

```:
$cd /kaggle
$jupyter notebook &

    To access the notebook, open this file in a browser:
        file:///root/.local/share/jupyter/runtime/nbserver-346-open.html
    Or copy and paste one of these URLs:
        http://hostname:8888/?token=b4fd47...
```
ホスト側でブラウザを立ち上げ, URLとして http://localhost:10000 を入力します。
tokenを聞く画面が表示されたら、上記のtoken=以下の文字列をコピーして入力すると、ブラウザ上に、
/work以下のフォルダが表示されます。




#   Kaggleへの登録と結果の提出
[Titanic Tutorial](https://www.kaggle.com/alexisbcook/titanic-tutorial)にしたがって、データの取得から分析結果の提出までの流れをやってみます。結果の提出(サブミット)には、結果のcsvファイルをアップロードする方法と、notebookから提出する方法の２種類があります。

### 1 Titanic データのダウンロード
まずはKaggleへの登録です。[こちらのサイト](https://www.kaggle.com/)にアクセスして登録を行います。User Name, Display Name, e-mail address などを登録しますが、User Nameは後で変更できないので注意が必要です。

次に分析対象とするデータを取得するために、[Titanic](https://www.kaggle.com/c/titanic)のページに行きます。
![titanic02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616171/28bf0107-e7e3-424d-caba-6d3e2e602127.jpeg)
右の青い「Join Competition」ボタンをクリックすると、コンペティションのルールを説明するページに飛ぶので、ルールに従う意思表示である「I Understand and Accept」ボタンをクリックして、コンペティションに参加します。すると、青の「Join Competition」ボタンが黒の「Submit Prediction」にかわります。

次に[Dataタブ](https://www.kaggle.com/c/titanic/data)を選択すると、データについての説明があります。ページの一番下にあるDownload allボタンを押すとデータがダウンロードできます。

### 2 結果の提出(submission)
ダウンロードデータは、学習用データであるtrain.csv, テスト用のtest.csv, 提出(の練習)用のgender_submission.csvがあります。Titanicプロジェクトでは、生還したか否かを与えられた特徴量から予測することが目的ですが、詳細な分析の前に、結果の提出法を示します。

ひとつ目の提出法は、乗客のID(PassengerID)と生還したか否か(Survived)の2つのカラムをもつcsv(gender_submission.csvはその形式で作成されています)を作成し、アップロードします。

![titanic03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616171/8553b1f9-6c2c-9c8e-c098-976d41f52727.jpeg)
上図のSubmit Predictionボタンをクリックし、Step1のUpload submission fileの所にgender_submission.csvをドラッグ＆ドロップするか、上向き矢印の所をクリックしてファイルを選択します。その後、Make Submissionボタンをクリックすれば提出できます。ここで、一日に提出できる回数の上限は10回になっていることに注意します。

２つ目の提出法は、Notebooksタブを用いる方法です。こちらの使い方は、[Titanic Tutorial](https://www.kaggle.com/alexisbcook/titanic-tutorial)に詳細がまとめられていますが、以下に簡単に説明します。

![titanic04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616171/6c098841-e552-5afb-c0e5-f1100bf17cee.jpeg)

右側のNewNotebookボタンをクリックして、Select language: Python, Select type:NotebookでCreateボタンをクリックし、Jupyter notebookを作成します。ここで、[Titanic Tutorial](https://www.kaggle.com/alexisbcook/titanic-tutorial)に示されているように、train.csvデータを読み込み、RandomForestで分析した結果を、提出用ファイルの形式で出力します。

```:ReadFile
import numpy as np
import pandas as pd
        
train_data = pd.read_csv('/kaggle/02_Titanic/download/train.csv')
train_data.head()
```
```:RandomForest
from sklearn.ensemble import RandomForestClassifier

y = train_data["Survived"]
features = ["Pclass", "Sex", "SibSp", "Parch"]
X = pd.get_dummies(train_data[features])
X_test = pd.get_dummies(test_data[features])

model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
model.fit(X, y)
predictions = model.predict(X_test)

output = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': predictions})
output.to_csv('my_submission.csv', index=False)
print("Your submission was successfully saved!")
```
submitする前に、notebookを保存します。右上のSave Versionボタンをクリックすると、Save Versionポップアップが現れるので、「Save＆Run All(Commit)」が選択されている状態で、Saveボタンをクリックして、notebookを保存します。
![titanic05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616171/cca8536e-b1c0-b68d-2c0f-2bea687904b1.jpeg)

次に、Save version ボタンの横にあるversion番号をクリックします。すると画面の右側にVersion Historyが現れるので、最新版の右の(...)を左クリックして、「Open in Viewer」を選択します。
![titanic06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616171/0e2684c9-2d50-c402-e27e-78bb24b59dc5.jpeg)

右側のOutputを選択すると先ほど出力したmy_submission.csvの内容が示されているので、その横にあるSubmitボタンをクリックします。すると「Submit to competition」というポップアップが現れるので、notebookの名前やヴァージョン、出力ファイル(csvファイル)などが正しいことを確認して、Submitボタンをクリックします。
![titanic07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616171/43704278-4662-51e5-124b-87bece8662a8.jpeg)


作成したnotebookの一覧は左側のHomeボタンをクリックすると、右側に「Your Notebooks」として一覧表示されます。不要になったnotebookを削除するには、右側の一番上にある自分のページのボタンをクリックし、Notebooksタブを選択します。一覧から削除したいnotebookの右の...をクリックし、Deleteを選択すれば削除されます。


#   課題の理解
分析を始める前に、以下の観点から問題を整理します。問題のタイプによって用いる評価指標も変わってくるので、特徴を理解し、適切な評価指標を用いる必要があります。それについては、第三回でまとめたいと思います。

| |種類 |
|---|---|
|データのタイプ |テーブルデータ、時系列データ、画像、テキスト など  |
|問題のタイプ    |分類問題、回帰問題、ランキング　など  |
|評価指標|ROC AUC, MSE など  |

例えばタイタニックのデータに関しては、以下のようなサマリを作成してスタートしました。

| |種類 |
|---|---|
|解くべき課題 | Predicts which passengers survived the Titanic shipwreck.  |
|予測する変数   |Survived |
|問題のタイプ|Binary Classification: 'survived 1' or 'not survived 0' |
|評価指標| AUC  |



# 参考資料
1. [Kaggleに登録したら次にやること](https://qiita.com/upura/items/3c10ff6fed4e7c3d70f0#fn28)
2. [Titanic Tutorial](https://www.kaggle.com/alexisbcook/titanic-tutorial)