collect, analyze, and visualize data
/ produced by Hiroyuki Shinoda
collect, analyze, and visualize data
Article
2022.8.1
KaggleのSubmit一覧データを取得する。


・Kaggleやデータ分析初学者向けのチュートリアル解説本を執筆しました。本記事とあわせてご参照くださいませ。

『Pythonで動かして学ぶ!Kaggleデータ分析入門』


・その他のKaggle参戦記事一覧はメニューのKaggle挑戦記事からご参照くださいませ。


はじめに
今回はKaggleのSubmit一覧を取得する方法について記載します。 Kaggleコンペの振り返りをする際などにあとから自分のSubmit一覧を取得したいことがあると思います。例えば3か月のコンペ期間中、自分がどのような取り組みをして、それによってどのようなScore推移をしたのか、Public Scoreの上昇に伴いPrivate Scoreは上昇していっていたのかをコンペ終了後に振り返ることは有用だと思います。 そこで今回は2つの方法での任意の参加コンペにおける自分のSubmit履歴を取得する方法を解説していきます。




| (1) Kaggle APIを用いた方法

Kaggleには公式APIがあります。 こちらのAPIを用いることでコンペデータのダウンロードやSubmit、そしてSubmit履歴一覧取得などを行うことができます。  
 
ここからはPythonを用いたKaggle APIの利用手順について見ていきます。 まずはターミナルからKaggle APIをインストールします。

次にKaggle公式サイトにアクセスし、 自分のKaggle accountページ(https://www.kaggle.com/(ユーザ名)/account)を開きます。

アカウントページのAPIの欄から「Create New API Token」をクリックします。 すると「kaggle.json」というファイルがダウンロードされます。 このファイルをmacなら「~/.kaggle/kaggle.json」、 Windowsなら「C:\Users\\.kaggle\kaggle.json」に移動します。 Macでターミナルを開いている場合、下記でファイルを移動できます。 次にファイルのアクセス権限を変更しておきます。 これでKaggle APIを使う準備は完了です。 試しに現在開催中のコンペ一覧を表示してみます。
上記のような一覧が表示されたら無事APIが正常にインストールできています。 もしエラーが表示される場合は、kaggle.jsonのファイルのフォルダが正しいか、 アクセス権限を変更したかを確認してみてください。   Kaggle APIは下記4つのコマンドがあります。
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}
  よく使われるのはデータのダウンロードやsubmitかと思いますが、 今回の記事では自分のsubmission一覧を取得したいため、 「kaggle competitions」コマンドの「submissions」を利用します。 たとえば私が過去参加したindoorコンペのsubmit一覧を取得してみます。 コンペの正式名称はコンペページのURLなどから取得するか、 先程のコンペ一覧コマンドから取得しておきます。
submit結果一覧を「filename/date/description/status/publicScore/privateScore」の項目で取得できます。 ただし、Kaggle APIコマンドを用いた方法は各コンペ最新の30submitのみしか取得できないようです。 そのためコンペ開始時からの全てのsubmit一覧の結果を取得するには別の方法を用いる必要があります。  
 
 

| (2) BeautifulSoupでスクレイピングする方法
※2023/12/09 kaggleの更新に伴い追記修正

次にpythonのBeautifulSoupパッケージを用いてブラウザから直接スクレイピングする方法を記載します。 BeautifulSoupはスクレイピング用のパッケージです。 まだインストールしていない場合は事前にインストールしておきます。

まずsubmit一覧を取得したいコンペのページデータを取得します。 Kaggleはログインすることで自分のsubmit一覧が表示できるようになるため、 seleniumでログインページにアクセスする方法を用いてもよいのですが、 今回はローカルにhtmlデータを保存してスクレイピングする方法を紹介します。 まずはsubmit一覧を取得したいページにブラウザからアクセスします。 デフォルトでは全てのsubmitが表示されていないため、 一番下の最初のsubmitが表示されるまでスクロールした後、 htmlファイルを保存します。 ※なお、Chromeなどで「別名で保存」で保存すると、  htmlファイルのほか、各種画像ファイルなどもダウンロードされますが、  htmlファイル以外は不要ですので削除します。

ダウンロードしたhtmlファイルと同じフォルダにてjupyter notebookファイルを作成し、 スクレイピングしていきます。 まずは必要なパッケージをimportします。 次にhtmlファイルをbeautifulsoupに読み込みます。 ※下記はダウンロードしたファイルを「sub.html」という名前で保存した場合 これで準備が完了したため、htmlファイルの中から取得したい項目を スクレイピングしていきます。 今回はsubmitしたときの時間、スコアを取得します。 ※code コンペなどの場合はステータス(subが成功したかerrorかなど)項目もありますので  そちらも取得するとあとから振り返りやすいです。 下記がsubmitのリストになります。 上記のリストから各値を格納していきます。 時間は文字列からのちほどdatetimeに変換するために、下記のようなdictを用意しておきます。 最後に取得したデータを分析や可視化がしやすいように、 DataFrameに変換します。※これは任意です。 上記を実行すると例えば下記のようなDataFrameが生成されます。
 
 
 

| (3) 余談

取得したデータを用いてたとえば自分のSubmitのScoreがどのように変化したかを 可視化することができます。 下記はindoorコンペにおいて私の各時点での最良スコアがどのように推移したかを示しております。 ※上記DataFrameから各時点での最良スコアを算出した上でプロット

縦軸のlossがpublic/privateともにsubの時間経過とともに 順調に減少しているようです。(下がり幅が十分かはさておき。)  
以上、KaggleのSubmit一覧を取得する方法の紹介でした。  
 
 

人気記事: