連載
» 2022年02月18日 05時00分 公開

番外編:VS CodeでKaggleしよう!僕たちのKaggle挑戦記

kaggleパッケージをインストールして、VS Codeの統合ターミナルからKaggle APIにkaggleコマンド を使ってアクセスし、ローカル環境でKaggleノートブックを実行してみましょう。

[かわさきしんじ,Deep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「僕たちのKaggle挑戦記」のインデックス

連載目次

 筆者は前回までKaggleのTitanicコンペティションに取り組みながら、EDAや特徴量エンジニアリング、ハイパーパラメーターチューニングがどんな感じかを体感してきました。が、今回はガラリと話を変えて、Kaggleのコンペティション(以下、コンペとします)にVisual Studio Code(以下、VS Code)で参加する方法を見てみます。


かわさき

 何かとVS Codeに話題を持っていくのは悪い癖かもしれません(笑)。[かわさき]



一色

 僕もほとんどVS CodeでKaggleしていますよ。VS CodeのJupyterノートブック機能がどんどん良くなってきていますからね。他の人がVS Codeをどう使っているのかは気になるので、お勧めの設定とか知りたいです。[一色]


Kaggle API

 Kaggleが提供するWebベースのノートブック環境はそれなりに使いやすいのですが、普段からコードはVS Codeで書いているのであれば、KaggleについてもVS Codeを使って挑戦したいと考えるかもしれません。


かわさき

 筆者は「WebならWebでそれなりに、VS CodeならVS Codeでそれなりに」派なのですが、VS Codeでノートブックを書き始めると、やはり手になじんでいるなぁという感覚はあります。


 KaggleはそのAPIにコマンドラインまたはPythonコードからアクセスすることを可能とするkaggleパッケージを提供しています。今回はこれを使って、VS Codeの統合ターミナル(というか、コマンドライン)からKaggleの機能にアクセスしてみることにしましょう。

 どういうことかというと、統合ターミナルを使ってKaggleからデータセットやノートブックをダウンロードして、それをVS Code内で実行し、その結果をサブミットしてみよう、ということです。

VS CodeからKaggleのノートブックを取得しているところ VS CodeからKaggleのノートブックを取得しているところ

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

 kaggleパッケージを使う前には、もちろん、これをインストールしておく必要があります。「pip install kaggle」などのコマンドを実行しておいてください。

 このとき、Windowsで「py」コマンドを使って、Python処理系を起動するようになっている場合(「C:\Users\<ユーザー名>\AppData\Local\Programs\Python\Python310」などのPython処理系が格納されているディレクトリにパスが通っていない場合)には、kaggleパッケージをインストールしても、コマンドラインからkaggleコマンドを実行できないことには注意してください。このときには、環境変数PATHに使用するPython処理系のディレクトリ(とその下にあるScriptsディレクトリ)を追加するか、Kaggleに取り組むプロジェクトを含むディレクトリ内にvenvモジュールなどを使って仮想環境を構築した上で、その仮想環境にkaggleパッケージをインストールします。

 本稿では、Windows上で仮想環境を構築して、そこにkaggleパッケージをインストールした状況を例として画面をキャプチャーすることにします。

仮想環境上にkaggleパッケージをインストールしたところ(Windows) 仮想環境上にkaggleパッケージをインストールしたところ(Windows)

クレデンシャルの取得

 kaggleパッケージをインストールしただけでは、kaggleパッケージを使うことはできません。KaggleのユーザーとしてAPIにアクセスするためのクレデンシャルが必要です。これを取得するには、まずKaggle公式サイトの右上にある自分のアカウントのアイコンをクリックし、そこから[Account]を選択します。

アカウントのアイコンをクリックして、[Account]を選択 アカウントのアイコンをクリックして、[Account]を選択

 そして、表示されたページを下にスクロールしていくと、[API]というセクションがあるので、そこで[Create New API Token]ボタンをクリックします。

クレデンシャルの作成には[Create New API Token]ボタンをクリックする クレデンシャルの作成には[Create New API Token]ボタンをクリックする

 これにより、kaggle.jsonファイルがダウンロードされます。このファイルに自分のユーザー名と、Kaggle APIにアクセスするためのキーが保存されているので、これをKaggleの構成ファイルを保存するディレクトリに保存してください。macOSを含むUNIX系統のOSでは「~/.kaggle/kaggle.json」として保存します。Windowsでは「C:\Users\<ユーザー名>\.kaggle\kaggle.json」となります。環境変数KAGGLE_CONFIG_DIRを使って、kaggle.jsonファイルを保存する位置を変更することも可能です。

 kaggle.jsonファイルには自分のユーザー名とKaggle APIにアクセスするためのキーが含まれているので、自分以外のユーザーに読み取られないようにしておく必要もあります。UNIX系統のOSでは「chmod 600 ~/.kaggle/kaggle.json」とします。Windowsではファイルのプロパティから適宜設定をしてください。

 あるいは環境変数KAGGLE_USERNAMEとKAGGLE_KEYに上記のファイルに含まれている情報を記述することも可能です。


かわさき

 準備完了! というわけで、試しに使ってみましょう。


kaggleパッケージの基本的な使い方

 本稿の冒頭でも述べましたが、kaggleパッケージにはコマンドラインツールとして使う方法と、「import kaggle」行を実行して、その後、PythonのコードからKaggle APIを呼び出す方法があります。以下ではコマンドラインツールとして、これを使ってみます。

 コマンドラインツールとしてのkaggleパッケージの基本的な構文は以下のようになります。

  • kaggle コマンド1 コマンド2 引数 オプション

 最初の「コマンド1」は、今からどのカテゴリの処理を行うかを以下の4つの中から指定します。

コマンド 説明
competitions/c コンペに関する処理を行う
datasets/d データセットに関する処理を行う
kernels/k カーネル(ノートブックやユーティリティースクリプトの実行環境)に関する処理を行う
config 構成に関する処理を行う
kaggleコマンドに与える最初の引数

 「config」以外は全て複数形になっていることに注意してください。


かわさき

 表にも書きましたが、competitions/datasets/kernelsの各コマンドにはそれぞれc/d/kという短縮形もあるので、慣れてきたら短縮形を使うことをお勧めします。


 「コマンド2」に指定できるのは「コマンド1」に応じて変わります。例えば、「competitions」であれば、コンペの一覧を取得する「list」、コンペで使用するデータセットをローカルにダウンロードする「download」、推測結果を提出する「submit」などを指定可能です。

 どんなコマンドを指定できるかは「kaggle コマンド1 --help」とすることで一覧できます。例えば、以下はコマンドパレットから[Python: Create Terminal]コマンドを実行して、仮想環境を有効化したターミナルをオープンして、「kaggle kernels --help」コマンドを実行したところです。

「kaggle kernels --help」コマンドを実行したところ 「kaggle kernels --help」コマンドを実行したところ

 「コマンド2」を指定した状態で「--help」オプションを指定して、kaggleコマンドを実行すると、さらに詳細なヘルプが表示されます。例えば、以下は「kaggle kernels pull --help」コマンドを実行したところです。

「kaggle kernels pull --help」コマンドを実行したところ 「kaggle kernels pull --help」コマンドを実行したところ

 このコマンドは、kernel引数に「ユーザー名/カーネル名」を指定することで、Kaggle上のカーネルからローカル環境にコード(ノートブック)をダウンロードするものです。このときには「-p」「--path」オプションにダウンロード先を指定できることが上の結果からは分かりますね。

 このように、特定のコマンドを初めて使うときや、使い方に不安があるときには「--help」を付加することでヘルプを表示できるので活用しましょう。

 というわけで、以下では幾つかのコマンドを実際に使いながら、ノートブックやデータセットのダウンロードなどを行ってみます。

コンペに関する処理

 「kaggle competitions」コマンドあるいはその短縮形である「kaggle c」コマンドを使うと、コンペに関する処理を行えます。まずはどんなコンペがあるかを調べてみましょう。これには「kaggle competitions list」コマンドを実行します。

「kaggle competitions list」コマンドを実行したところ 「kaggle competitions list」コマンドを実行したところ

 さまざまなコンペがあることが分かります。「ref」列にはコンペの識別子が表示されています。例えば、上から6行目にはTitanicコンペを表す「titanic」が表示されています。この後で実際に行いますが、Titanicコンペのデータセットをダウンロードするには「kaggle competitions download」コマンドで今述べた識別子「titanic」を指定することになります。

 「category」列にはコンペのカテゴリが表示されています。特定のカテゴリのコンペを一覧するなら、「kaggle c list --category カテゴリ」を実行できます(カテゴリにはall/featured/research/recruitment/gettingStarted/masters/playgroundを指定可能)。

 既に述べましたが、「kaggle competitions list」コマンドの詳細なヘルプについては「--help」オプションを付けて、このコマンドを実行してください。

 この操作でTitanicコンペの識別子が「titanic」であることが分かりました。次に、このコンペで使用するデータセットをダウンロードしてみましょう。これには「kaggle competitions download」コマンドを使います。このコマンドではcompetition引数にコンペを指定する識別子を指定しますが、これに加えて、以下のようなオプションがあります(一部)。

オプション 説明
-f FILE_NAME
--file FILE_NAME
FILE_NAMEに指定したファイルのみを取得。省略時は全てのファイルを取得
-p PATH
--path PATH
PATHで指定したディレクトリにファイルを保存。省略時はカレントディレクトリにファイルを保存
-o
--force
同名ファイルがあった場合に上書きする
kaggle competitions downloadコマンドで指定可能なオプション(一部)

 例えば、Titanicコンペのデータセットをカレントディレクトリにダウンロードするのであれば、「kaggle c download titanic」コマンドを実行すればよいということです。このコマンドを実行した結果を以下に示します。

「kaggle c download titanic」コマンドを実行したところ 「kaggle c download titanic」コマンドを実行したところ

 実行結果を見ると分かる通り、titanic.zipファイルがダウンロードされました。Titanicコンペにはtrain.csv/test.csv/gender_submission.csvの3つのファイルがあったので、titanic.zipを展開すれば、これらが得られます。それはよいのですが、気を付けたいのは、これら3つのファイルと以前に特徴量エンジニアリングによって得た2つのCSVファイル(今回、実際の学習に使うのはこちらです。次の「kaggle datasets」コマンドで取得します)、それから「kaggle kernels pull」コマンドで取得するノートブックをどこに配置すればよいかです。

 既にTitanicコンペに挑戦しているのであればお分かりでしょうが、CSVファイルが保存されているのは自分がノートブックを記述している作業ディレクトリの1つ上の階層にあるinputディレクトリでした。この階層構造をローカルの環境でも維持しないと、ノートブックにあるCSV読み込みコードを変更する必要が出てきます(そして、それをKaggleに書き戻すときには、Kaggle上で動くように元に戻す必要があります)。

 というわけで、ここではカレントディレクトリにinputディレクトリを作成して、CSVファイルはそこに保存し、ノートブックは何か適当な名前のディレクトリを作成して、そこに保存することにします。

 上の画面を見ると分かる通り、筆者のVS Codeでは統合ターミナルにはPowerShellを使っているので、「Expand-Archive」コマンドレットでZIPファイルを展開して、展開されたファイルを含むtitanicディレクトリをinputディレクトリに移動しました。macOSやLinuxならunzipコマンドなどを使って同様な操作を行えばよいでしょう。

データセットに関する処理

 次にデータセットに関する処理を行ってみます。といっても、ここでいうデータセットとは、Kaggleのユーザーが作成し、Kaggleにアップロードしたもののことです。ここでは、前々回に紹介したこちらのノートブックで作成して、Kaggleに自分用のデータセットとして追加してあるmytrain.csv/mytest.csvファイルをダウンロードしてみることにします。

 その前に「kaggle datasets」コマンドで実行できる操作を幾つか挙げておきましょう(一部)。表に挙げたもの以外に、データセットを作成したり、データセットの改訂を行ったり、データセットに付随するメタデータの初期化やダウンロードを行ったりするコマンドもありますが、ここでは省略します。また、「datasets」の代わりに省略形として「d」を使用できることも思い出してください。

コマンド 説明
list データセットの一覧を取得
files 指定したデータセットに含まれるファイルの一覧を取得
download 指定したデータセットをダウンロード
init データセットに関するメタデータを初期化
metadata データセットのメタデータをダウンロード
「kaggle datasets」コマンドで使用できるコマンド(一部)

 ここでは触れませんが、データセットをアップロードするときには、対応するメタデータ(dataset-metadata.jsonファイル)を、データセットが保存されているフォルダに置いておく必要があります。「kaggle d init」「kaggle d metadata」の2つのコマンドはこれに関連しています。詳細については「Dataset Metadata」などを参考にしてください。


かわさき

 「kaggle d version」というコマンドもあります。ということは、データセットもバージョン管理が可能ってことですね。



一色

 Kaggleサイトのデータセットページで、タイトルの下にある[(Version ○○)]という部分をクリックすると、バージョン履歴が表示されて過去バージョンのデータセットも取得できますよ。



かわさき

 知らなかった〜〜〜。orz


 例として、自分が作成したデータセットの一覧を「kaggle d list」コマンドで取得してみましょう。単純に「kaggle d list」コマンドを実行すると、以下のようにさまざまなユーザーが作成したデータセットが一覧されます。

「kaggle d list」コマンドでデータセットの一覧を表示したところ 「kaggle d list」コマンドでデータセットの一覧を表示したところ

 自分が作成したデータだけを取得するには「-m」「--mine」オプションを指定します。以下は、これを実行した結果です。他のオプションについてはヘルプを参照してください。

自分が作成したデータセットだけを表示 自分が作成したデータセットだけを表示

 これを見ると、試行錯誤している中で3つのデータセットを作っていたことが分かりますね(きっと、データセットのバージョン管理を知っていれば、1つだけで済んだのでしょう)。 ここでは一番上のデータセットをダウンロードします。これには「kaggle d download」コマンドを使います。上の画像にあるref列に表示されている「ユーザー名/データセット識別子」をこのコマンドに指定すると、データセットがデフォルトではカレントディレクトリにダウンロードされます。

自分が作成したデータセットをダウンロードしたところ 自分が作成したデータセットをダウンロードしたところ

 先ほど述べたように、ノートブックとデータセットの配置には気を使う必要があります。ここでは、先ほどと同様、ダウンロードしたZIPファイルを展開して、展開されたファイルを含むmy-titanic-dataディレクトリをinputディレクトリに移動しました。

カーネルに関する処理

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。