LoginSignup
27
19

More than 3 years have passed since last update.

Dockerコンテナ内でKaggle APIをつかう

Last updated at Posted at 2019-12-04

やること

  • Kaggle公式イメージ(kaggle/python)をつかってコンテナ起動
  • kaggle ~コマンドでcsvファイルをダウンロードする
  • kaggle ~コマンドで公開notebookをダウンロードする

まずはまとめ

  1. kaggle.jsonをDL (kaggle.com > My Account > Create New API Tokenボタン)
  2. $ docker run -it --rm --mount type=bind,src=pwd,dst=/root/dev kaggle/python
  3. $ pip install kaggle
  4. $ mkdir ~/.kaggle
  5. $ cp /root/dev/kaggle.json ~/.kaggle
  6. $ chmod 600 ~/.kaggle/kaggle.json
  7. $ kaggle competitions download -c titanic -p input/titanic
  8. $ unzip input/titanic/titanic.zip input/titanic
  9. $ kaggle kernels pull arthurtok/introduction-to-ensembling-stacking-in-python -p ./

データセットはタイタニックコンペのものをダウンロードしてます
問題なく動いた方はここで閉じでもらって大丈夫です:relaxed:

環境

macOS 10.14.6 (Mojave)
Docker 19.03.4

なんでDockerつかうの?

  • notebook不安定
  • VSCodeでコード書きたい
  • グローバル環境を汚したくない
  • pipとcondaの衝突コワイ
  • Kaggle公式イメージがあるので安心

Kaggle APIってなにさ?

Kaggleのサイト上でやってる操作をコマンドラインでできちゃうやつ

たとえば?

  • データセットのダウンロード
  • サブミット
  • 参加可能コンペを一覧表示
  • リーダーボードをダウンロード

などなど…

詳しくは公式リポジトリ

コマンド一覧
kaggle competitions {list, files, download, submit, submissions, leaderboard}
kaggle datasets {list, files, download, create, version, init}
kaggle kernels {list, init, push, pull, output, status}
kaggle config {view, set, unset}

こんな構成をつくっておきます

kaggle_titanic
├── input
│    └── titanic  <- ここにcsvファイルをダウンロードできれば勝ち
└── working  <- ここにipynbファイルをダウンロードできれば優勝

Kaggle API Tokenを取得

右上のMy Accountから
スクリーンショット 2019-11-27 9.25.02.png

真ん中くらいにあるこれをポチ
スクリーンショット 2019-11-27 9.28.42.png

kaggle.jsonがダウンロードされるので kaggle_titanic ディレクトリに保存しておく
中身はこんなかんじ

kaggle.json
{"username":"anata_no_namae","key":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}

ちなみに

こっちでトークンを無効化できます
「まちがえてGitHubにkaggle.jsonもプッシュしちまった!」みたいな時が押し時
スクリーンショット 2019-11-27 9.41.17.png

コンテナ起動

Kaggleの公式イメージ kaggle/python をつかう
kaggle_titanicディレクトリで以下のコマンド

docker run -it --rm --mount type=bind,src=`pwd`,dst=/root/dev kaggle/python

オプションの説明なんかはココに書いているのでもしよろしければ
-> 【画像で説明】DockerでAnaconda環境をつくり、コンテナの中でVSCodeを使う

ここからはコンテナ側のシェルで

マウントしたディレクトリに移動

cd /root/dev

中身が同期されてればOK

ls

input  kaggle.json  working

kaggleパッケージをインストール

pip install kaggle

ちゃんと動くかバージョン確認してみる

kaggle -v

Traceback (most recent call last):
  File "/opt/conda/bin/kaggle", line 7, in <module>
    from kaggle.cli import main
  File "/opt/conda/lib/python3.6/site-packages/kaggle/__init__.py", line 23, in <module>
    api.authenticate()
  File "/opt/conda/lib/python3.6/site-packages/kaggle/api/kaggle_api_extended.py", line 149, in authenticate
    self.config_file, self.config_dir))
OSError: Could not find kaggle.json. Make sure it's located in /root/.kaggle. Or use the environment method.

めっちゃ怒ってきよる
kaggle.jsonが見当たらんみたいなこと言ってますね

kaggle.jsonを配置

~/.kaggle/ディレクトリをつくってその中にkaggle.jsonをコピーします
$ kaggle -vのタイミングで~/.kaggle/ディレクトリが作られている場合がありますが問題ないです

mkdir ~/.kaggle # <- すでにディレクトリあるよーっていわれるかもしれないけど気にせず
cp /root/dev/kaggle.json ~/.kaggle

今度こそ

kaggle -v

Warning: Your Kaggle API key is readable by other users on this system! To fix this, you can run 'chmod 600 /root/.kaggle/kaggle.json'
Kaggle API 1.5.6

一応つかえるけど、まだ怒ってるな
他のユーザーにもAPI Keyが読めちゃうから権限変えなさいって

権限変更

chmod 600 ~/.kaggle/kaggle.json 

次こそは

kaggle -v
Kaggle API 1.5.6

ふぅ

毎回やるのめんどい

ここの一連の処理はまとめてセルで実行してもいいかもです
ファイル化して使い回すって作戦もあります

kaggle_settings.ipynb
!pip install kaggle
!mkdir ~/.kaggle
!cp /root/dev/kaggle.json ~/.kaggle
!chmod 600 ~/.kaggle/kaggle.json

それではデータのダウンロード

-cでコンペ名指定
-p保存先パス指定

kaggle competitions download -c titanic -p input/titanic
ls input/titanic

titanic.zip

titanic.zipがダウンロードされました

コンペ名はURL上の表記をつかう

例えば Severstal: Steel Defect Detection コンペであればコレ
スクリーンショット 2019-11-27 16.38.51.png

解凍

ダウンロードしたtitanic.zipを解凍

unzip input/titanic/titanic.zip -d input/titanic
ls input/titanic

gender_submission.csv  test.csv  titanic.zip  train.csv

gender_submission.csv, test.csv, train.csvの3つが入ってました
これでデータセットのダウンロードはOK

次はnotebookをpullしてみる

notebookの表記はここ
スクリーンショット 2019-11-27 16.41.52.png

kaggle kernels pull arthurtok/introduction-to-ensembling-stacking-in-python -p ./working
ls ./working

introduction-to-ensembling-stacking-in-python.ipynb

ちゃんとpullされているので優勝

VSCodeをあわせてつかうと便利かも

インテリセンスや自分キーバインドなどでコード書けるのがいい

【画像で説明】DockerでAnaconda環境をつくり、コンテナの中でVSCodeを使う

【画像で説明】VSCodeをJupyter化する

jupyterつかいたい人はこう

コンテナ起動時に-p 8888:8888オプションを追加 (ホスト側とコンテナ側のポートを紐付ける)

docker run -p 8888:8888 -it --rm --mount type=bind,src=`pwd`,dst=/root/dev kaggle/python



そしてこんなかんじでjupyterを立ち上げる ※オプションの説明はこちら

jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root --NotebookApp.token=''

ブラウザのアドレスバーからlocalhost:8888をひらけばOK

おしまい

最後まで読んで頂いてありがとうございました

27
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
19