euphonictechnologies’s diary

Haskell超初心者の日記です。OCamlが好きです。

follow us in feedly

Google Cloud Datalabを使って未経験からKaggleのTitanicサブミットまで - その1 データラボを使えるようにする

Kaggleが、やりたいです

もうプログラマーである以上はいい加減Kaggleから逃げられないご時世になってきました。諦めてデータサイエンス覚えましょう。さもなくばクビです。

この記事はこんな人向けです

  • プログラミングはできる
  • Pythonは触ったことあるけどpythonのelse-if文の書き方忘れたなあ
  • Google Cloud Platformは触ったことねえ
  • Kaggleのアカウントだけ作った

なんでGoogle Cloud Platform?

セットアップが超簡単です。30分もあれば導入完了です。そのうち叩くコマンドは4つくらいです。簡単だね!

そして、BigQueryが使えます。今回は使わなかったけど。BigQuery使えるようになりたいですよね、deathよね。

あとAWS飽きた。

Kaggleのアカウント作りましょう

メールアドレスで登録するだけです。

Google Cloud Platformのアカウント有効にしましょう。

しましょう。

KaggleのTitanic問題に登録しましょう

f:id:euphonictechnologies:20180917121410p:plain

これです。

Google Cloud Platformで作業しましょう

プロジェクトを選ぶ

Google Cloud Platformのダッシュボードに移動して、プロジェクトを新規作成しましょう。

f:id:euphonictechnologies:20180917153924p:plain

左上に書いてあるやつが今ダッシュボードで作業中のプロジェクトです。名前をわかりやすくつけましょう。

ビリングを設定する

GCEは金かかりまっせ。支払い方法を設定しておきましょう。

支払い方法の追加、削除、更新  |  Cloud Billing のドキュメント  |  Google Cloud

APIをイネーブルする

APIをイネーブルします。APIを管理する画面を開いて、

f:id:euphonictechnologies:20180917154049p:plain

そこから追加画面を開きます。

f:id:euphonictechnologies:20180917154337p:plain

そこからAPIを選択できます。こんな感じ。

f:id:euphonictechnologies:20180917154443p:plain

最低限必要なのは

  • Compute Engine API

です。名前の通り必須です。他にも後々使いそうなのはBigQueryとかBigTableとか。いつでもこの画面で追加できます。必要な操作をやるとAPIが必要な場合はそういう風に怒ってくれるので必要になり次第API追加していきましょう。

GCE準備できたのでDatalabをはじめる。

f:id:euphonictechnologies:20180917154753p:plain

ここからコンソールを開きます。多分開いているページの下半分がコンソールになります。

f:id:euphonictechnologies:20180917155130p:plain

こんな感じ。

Datalabインスタンスを作成する。

簡単です。こんだけ。

datalab create --disk-size-gb 10 --machine-type f1-micro datascience-01a
  • --disk-size-gb : このVMインスタンスにくっつけるディスクのサイズです。20GBのディスクが自動でくっつくのでデータを保管する作業場所のサイズです。30GBまでならAlways Freeなはずなので、差し引き10GBを割り当てています。本当に無料になるかどうかは知りません。
  • --machine-type : f1-microを指定しています。これもAlways Free Eligibleなはず。本当に無料になるかどうかは(略)

datascience-01aはVMインスタンスの名前です。適当につけましょう。

途中でインスタンスをデプロイする場所を聞かれます。お金持ちは近い場所asiaとか、で、私のような貧乏人はus-のどこかAlways Free Eligibleな場所にしましょう。本当に(略)

最後に作ったDatalabを保護するためのSSHトンネリング用のパスワードを聞かれます。忘れないやつをつけましょう。

そんだけ!

Datalabでの作業を始める

開く

まずは開かないと話になりません。開きましょう。 2つ方法があって

  1. 表示されたURLをコピーしてブラウザにぶち込む
  2. ウェブプレビューボタンを活用する

私は最初1でやりました。それでいいと思いますが、2を覚えておくと便利です。

f:id:euphonictechnologies:20180917155830p:plain

このボタンを押して、開くと

f:id:euphonictechnologies:20180917155854p:plain

モーダルが出るので、8081に変更して開く。

f:id:euphonictechnologies:20180917155927p:plain

すると

f:id:euphonictechnologies:20180917160013p:plain

データラボじゃー!

フォルダとノートブックを作る

f:id:euphonictechnologies:20180917160259p:plain

この二つのボタンを使って作業場をこしらえます。私は既存のnotebooksフォルダの下にKaggleフォルダを作って、さらに問題フォルダを掘ってそこにノートブックを置きました。

f:id:euphonictechnologies:20180917160358p:plain

フォルダ構成は自由です。憲法にも保障されている基本的人権の一つです。適当にやりましょう。

フォルダはボタンを押したあとしばらくしてできあがります。反応無いからつって連打するとたくさんできます。我慢しましょう。フォルダは無名で作成されるのでRenameしましょう。

ノートブックを作ると空っぽのノートができるはずです。開きましょう。

ノートブックを開く

まあ、開けますよね。

問題を取り込む

kaggleツールをインストール

いろいろなやり方があると思いますが、私はクソめんどくさがりなのでノートブックから取り込みました。kaggleは専用ツールを公開していて、そいつを使うと問題データを簡単に取り込めます。kaggleの問題ページにこんな感じに表示されていると思います。

f:id:euphonictechnologies:20180917160738p:plain

これを使います。まずはツールをインストールしましょう。

f:id:euphonictechnologies:20180917160835p:plain

こんな感じでノート上でシェルコマンドが実行できます。

%%bash
pip install kaggle

実行しましょう。普通のpipコマンドが使えるので使いたいライブラリはこんな感じでどんどん足せます。

んで、このツールを使うにはツールが認証を突破できるようにしなければいけないので、kaggleのAPIトークンを発行しましょう。

kaggle APIトークンの取得

kaggleのページの右上に表示されているあなたのアバターの

f:id:euphonictechnologies:20180917161152p:plain

でアカウントページを開いて、

f:id:euphonictechnologies:20180917161253p:plain

ここからAPIトークンを取得します。トークンはユーザー名と暗号化トークンのふたつからなる辞書です。それをコピペしてDatalab上にファイルとしておいときます。

%%bash
echo '{"username":"oreno_user_name","key":"cdac546cacd78dc9ac7897dc....."}' > ~/.kaggle/kaggle.json

こんな感じ。

ファイルをダウンロード!

するとkaggleコマンドが使えるようになっているので、問題ページのやつをコピペしてシェルコマンドとして実行しましょう。

%%bash
kaggle competitions download -c titanic

これでノートブックと同じフォルダにファイルが置かれているはずです。

f:id:euphonictechnologies:20180917161549p:plain

こんな感じ!

中身を確認

少し中身をのぞいてみましょう。実際にこれから作業していくのはトレーニングデータtrain.csvです。

from google.datalab import Context
import google.datalab.bigquery as bq
import google.datalab.storage as storage
import pandas as pd
try:
  from StringIO import StringIO
except ImportError:
  from io import BytesIO as StringIO

train_data = pd.read_csv('train.csv')
train_data.head(4)

こんな感じでデータ、見えました?

f:id:euphonictechnologies:20180917161856p:plain

今回はここまで

長くなってきたのでここら辺で。次回は実際に読み込んだデータで問題に取り組みます。