GCP上でKaggle APIを使ってKaggleのデータを爆速でダウンロードする

この記事ではGoogle Cloud Platformと、Kaggle APIを用いてKaggleの容量が大きなデータでも、ローカルよりも速い速度でダウンロードするということをやります。

具体的にはGoogle Cloud Engineで仮想マシンを立ち上げ、そのマシン上でKaggle APIを使いデータをダウンロードします。GCP上の仮想マシンはGoogleの回線を使っているので、普通に自宅のwifiなどを使うよりは断然速くダウンロードすることができます。

# 対象者
- 最近Kaggleを始めた人
- GCP上でKaggleをやってみたい人
- データでかすぎてうぜえって思った人

# 概要
1. GCEインスタンス立ち上げ
2. Kaggle API導入
3. Kaggle データセットダウンロード

# 前提条件
- GCPを使える
- Kaggleに登録している

# 1 GCEインスタンス立ち上げ

まずはGCPのコンソール画面からGCEというサービスで仮想マシンを立ち上げます。
(そもそもGCEって？ https://qiita.com/oosha/items/746dc4a9ad16f5a6beac)

左のサイドバーのComputed Engineから、インスタンスを作成する

<img width="1440" alt="スクリーンショット 2019-03-11 10.25.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/266948/2ee09f43-0f29-751a-6ccd-1c67bc2c17b9.png">
 
<img width="1440" alt="スクリーンショット 2019-03-11 10.26.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/266948/8b21fc30-cfba-e238-6c05-61a22763bd60.png">

インスタンスの名前は任意の名前

リージョンはサーバーの場所,今回はeastUS1にする。（場所によっては無料枠でなくなる、アメリカの方が何かとアクセスが早い）

マシンのメモリは、30GB(120GBとかは大学の研究などのレベル)

料金に関しては 
https://cloud.google.com/compute/pricing?hl=ja

メモリの若干の目安

https://qiita.com/lain21/items/a33a39d465cd08b662f1#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%ABpc-vs-%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9

<img width="1440" alt="スクリーンショット 2019-03-11 10.30.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/266948/7bb1e4b9-14c9-17b1-b268-5823fc50937a.png">

ブートディスクはubuntsu16,サイズは50GBくらいあればいい

<img width="1440" alt="スクリーンショット 2019-03-11 10.30.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/266948/c8029d82-feaf-1236-41ed-2818eeb1c626.png">

アクセス権は全て許可
ファイアウォールも全てチェック

<img width="1440" alt="スクリーンショット 2019-03-11 10.32.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/266948/41e94c2c-e2c7-bb6e-38ea-f1b5b924f583.png">

作成ボタンを押して、少し待つとインスタンスが立ち上がる

<img width="1440" alt="スクリーンショット 2019-03-11 10.33.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/266948/344a0753-f54d-175f-f7b2-6495e813a56e.png">

興味があれば下の記事もご覧になってみてください。
ローカルのターミナルからssh通信でGCSに接続する方法
https://qiita.com/matken11235/items/e4e7de36ef5f01f1d1d7

出来るだけ安くGCEを使う方法
https://qiita.com/Brutus/items/22dfd31a681b67837a74

# 2 Kaggle APIの導入

次にKaggle APIを仮想マシンに導入します。
まずは仮想マシンにSSH通信というもので仮想マシンのシェルに入ります。
これはとても簡単で下の画像のように、SSHというボタンをクリックするだけで入ることができます。

<img width="1440" alt="スクリーンショット 2019-03-11 10.34.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/266948/53b5ae64-0ccf-7de3-9921-f76c7f98d080.png">

次にシェルで`pip install kaggle`　というコマンドを打ち込みでAPIをインストールします。

次にKaggleにログインし、アカウントページからcreate API Tokenを作る

<img width="1440" alt="スクリーンショット 2019-03-12 0.39.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/266948/bfc6aa60-713e-8ada-ccd7-85f277b18119.png">

kaggle.jsonファイルがダウンロードされる

そのファイルの中身を仮想マシンに移します。方法はいろいろありますが、今回は簡単にファイルを作成してコピペするなどして貼り付けます。

```
touch ~/.kaggle/kaggle.json
vimやemacsなどのファイル編集ソフトでファイルにコピペする
```

kaggle.jsonのパーミッションを600にする。以上で、kaggleコマンドが使えるようになります。

```
chmod 600 ~/.kaggle/kaggle.json
```

# 3 Kaggle データセットダウンロード

## kaggle コマンド

まずは簡単にKaggelコマンドの使い方について

`kaggle -h`と後ろに-hをつけてやると、次のようにhelpが表示されるので、helpを見ながら使えばそんなに困らない感じです。

| コマンド例| 結果 | 
|:-----------|:----------- |
| kaggle competitions list| コンペの一覧を取得 | 
| kaggle competitions files -c titanic | タイタニックコンペのデータサイズ等を表示 | 
| kaggle competitions download -c titanic | タイタニックコンペのデータをダウンロード | 
| kaggle competitions <br> submit -c titanic -f pred.csv -m test | タイタニックコンペにpred.csvをサブミット。 <br> メッセージはtest |
| kaggle competitions submissions -c titanic | タイタニックコンペの自分のサブミット一覧を表示 | 


実際にkaggleのデータセットをダウンロードします。（早い）

```
kaggle competitions download -c titanic
```

このような感じてKaggleのデータをダウンロードすることができます。
しかし、毎回環境構築するのは面倒なので下の記事を参考に、環境構築を自動化するなど工夫するといいです。

[GCPとDockerでKaggle用計算環境構築]
 (https://qiita.com/lain21/items/a33a39d465cd08b662f1)