xonshを使ってkaggle APIでkernelにpushする
はじめに
- kaggle APIはローカルPCのターミナル(コマンドプロンプト)からshellコマンドでkaggleの環境を操作することができる呪文.Pythonで実装されている
- xonshはPythonで実装されている(?)shell
- kaggle APIをxonshで動かせばxonsh人口もkaggle API人口も増えて幸せなのではないか?
というわけでkaggle APIをxonshから使ってみましょう. ただ,1から書いていくとアレなので主に
の部分を記録します.kaggle APIやxonshの導入については以下を参照してください. また,installationには日本語の記事もありますので参照してください*1
xonsh
日本語による紹介記事
kaggle API
日本語による紹介記事
前提
つかkernelって何?
kernelはブラウザ上でkaggleのコンペティションに使っているコードを実行できる環境です. 実行だけじゃなくて編集もできます.すごいね! ローカルPCのスペックに不安のあるキミも,買ったばっかりのPCのファンが悲鳴を上げ始めたキミも, マシンスペックをkernelに頼ればあとは好きにCodingしてCommitしよう!
kaggle APIを導入する
詳細は上の記事を参考にしていただきつつ,簡単に導入プロセスを確認します.
- Pythonで
pip install kaggle
- kaggleのページでAPIトークンを取得
- 特定のフォルダ(win:
C:\Users\<UserName>\.kaggle
)に保存 - cmdで
kaggle -h
これでエラーなくヘルプっぽい文章がでれば成功です.
xonshを導入する
詳細はry
conda config --add channels conda-forge conda install xonsh
私はこっちで実装しました.環境に応じて適宜.
- cmdに
xonsh
と打つ.
これでそれっぽい画面が出たらxonsh成功です!
xonshからkaggle APIを叩く
基本的にxonshはPythonが動くShellなので,上記のInstallationが滞りなく進めば,xonsh上でkaggle -h
コマンドを打つとちゃんと動いているはずです.
xonshからkaggle APIを使ってkernelにコードをpushする
とりあえず何が必要なのか,公式ドキュメントとヘルプを見てみましょう.
どうやらAPIとしてはkernels
でカーネルを操作できるらしいですね!
xonshでkaggle kernel -h
を打つとこんな感じの画面が!
イケてんな.
しかも過去に実行したことのあるコマンドと似ていると「お前コレ打とうとしてない?」ってやってくれます.
イケてんな.
……それはともあれ,ちょっとkernelをプッシュしてみましょう.
今回はいつもどおりTitanic
データダウンロード
せっかくだしこっからはじめましょう.TitanicのページにあるDataタブをクリックすると, ご丁寧にkaggle APIコマンドがあります.しかもコピーできる. xonsh上で
kaggle competitions download -c titanic
を打つか,xonshのターミナル上で右クリックするとペーストされます*3. こうするとxonshの動いているディレクトリ上にデータがDLされていると思います.*4
メタデータファイルを生成
kaggleをpushするためには,どうやらメタデータが必要な様子です.
kaggle kernels init
コマンドを実行するとメタデータのjsonファイルが生成されます.
jsonファイルをエディタか何かで開いて,このドキュメントをベースに逐次情報を書き込み,保存ましょう.
pushしたいスクリプトを生成
今回はとりあえずcsvを読み込んでみましょう. ついでに挨拶もしときましょう.
import pandas as pd import numpy as np train_df = pd.read_csv("../input/train.csv") test_df = pd.read_csv("../input/test.csv") train_df.describe() print("hello, kaggler!")
push準備
コードを書いたらさっき作ったjsonファイルを編集します.一部は事前でも編集できますが,まあ順序はお好みで.味は変わりません.
- id: kernelのアドレス
通常UserName/おすきなkernelの名前
を入れるといいと思います.必須.記号はハイフンのみ有効?(未検証)
- title: kernelのタイトル
idで指定した名前と同じようにするといいでしょう. - code_file: kernelにpushしたいファイル
コードのファイル名を指定します.メタデータのあるフォルダからの相対パスでいけますが不安なら絶対パスぶっこんでも問題ないです.
- language: kernelの言語
pushしたいファイルが何で書かれているかを指定します.python
,r
,rmarkdown
が選べます.
- kernel_type
script
かnotebook
かを選べます.
- is_private
kernelの公開情報を指定できます.デフォルトはtrue
です
- enable_gpu
kernelのGPUを使うかどうかを指定できます.
おそらくpushコマンド実行後,インターネット接続を確立し続けるかみたいなことだと思います.
デフォルトはfalse
です.
- enable_internet
インターネット接続云々情報ですが,謎です.デフォルトはfalse
- dataset_sources
データセットの出処がkaggleで公開されたデータセットの場合,ここにデータセット名を書き込みます.
- competition_sources
データセットの出処ががkaggleのコンペティションの場合,ここにコンペティション名を書きます.
- kernel_sources
多分他の人のkernelをpullしたときに,kernel名を指定します.
という感じです.公式ドキュメントに丁寧に書いてるのでそちらも参考に. 今回の場合はこんな感じになります
{ "id": "UserName/my-first-kernel", "title": "My First Kernel", "code_file": "hoge.py", "language": "python", "kernel_type": "script", "is_private": "true", "enable_gpu": "false", "enable_internet": "false", "dataset_sources": [], "competition_sources": ["titanic"], "kernel_sources": [] }
push
ここまでできたら簡単です.jsonファイルが保存されている場所でxonshを立ち上げて,kaggle kernels push
と打ってEnterを音高く鳴らします.
そうすると
Kernel version 1 successfully pushed. Please check progress at https://www.kaggle.com/jsonのidで指定したアレ
というメッセージが!これでpush成功です.kaggleのページに行くとkernelの環境下で実行もできています
おわりに
ながくなりましたが,こんな感じでxonshからローカルで組んだコードをkernel環境で実行することができそうです. jsonファイルがちょっと面倒ですが多分そのへんも自動化する術はあるでしょう.
せっかくのAPI,使い倒してやりましょう.