Google Colab上でKaggle-apiを用いて、データの読み込みから提出の流れを説明します。
勉強中のため、間違いを含んでいる可能性をご留意してください。
Google Colabの導入
Google Colabを導入していない方は下記を参考にGoogle Colabを導入してください。
Google ColabでKaggleのデータを使用する準備
まずは、Google ColabでKaggleのデータをダウンロードしたり、結果を提出するための準備を行います。
具体的には以下の流れです。
- Kaggle APIをインストール
- Kaggle.jsonをGoogle Colab上にアップロード
- Google Colabratory上にKaggle.jsonをダウンロード
Kaggle APIをインストール
下記を入力してGoogle ColabにKaggle APIをインストールしてください。
!pip install kaggle
Kaggle.jsonを取得
Kaggle.jsonを取得するためには、まずKaggleアカウントページを開いてください。
次に、『Account』タブに行き、『Create API Token』を選択します。
これにより、kaggle.jsonをダウンロードすることができます。
ダウンロードが完了したらGoogleドライブにアップロードしてください(特に場所の指定はありません)
または下記のコードを入力して、kaggle.jsonファイルをアップロードすることができます(参考 : How to use the Kaggle API from Colab)
from google.colab import files
uploaded = files.upload()
for fn in uploaded.keys():
print('User uploaded file "{name}" with length {length} bytes'.format(
name=fn, length=len(uploaded[fn])))
!mkdir -p ~/.kaggle/ && mv kaggle.json ~/.kaggle/ && chmod 600 ~/.kaggle/kaggle.json
Google Colab上にkaggle.jsonをダウンロード
下記を入力し、Googleドライブ上からGoogle Colab上にkaggle.jsonをダウンロードしましょう。
from googleapiclient.discovery import build
import io, os
from googleapiclient.http import MediaIoBaseDownload
from google.colab import auth
auth.authenticate_user()
drive_service = build('drive', 'v3')
results = drive_service.files().list(
q="name = 'kaggle.json'", fields="files(id)").execute()
kaggle_api_key = results.get('files', [])
filename = "/content/.kaggle/kaggle.json"
os.makedirs(os.path.dirname(filename), exist_ok=True)
request = drive_service.files().get_media(fileId=kaggle_api_key[0]['id'])
fh = io.FileIO(filename, 'wb')
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print("Download %d%%." % int(status.progress() * 100))
os.chmod(filename, 600)
実行するとGoogleアカウント認証ページが表示されるので、認証作業を完了させましょう。
認証されると『Download 100%』と表示されます!
これでGoogle Colab上でKaggleを行う準備ができます。
kaggle APIの使用方法
ここからは、具体的にKaggle APIの使用方法を紹介していきます。
コンペティションの情報を確認
下記を入力することで現在開催されているコンペティションの内容を確認することができます。
!kaggle competitions list
データの読み込み
まずは、Kaggleにアクセスしコンペティションのdataに移動し下記のコマンドをコピーしてください。
コピーしたコマンドをGoogle Colab上に貼り付けましょう。
貼り付ける際は、以下のように『!』を忘れずに入力するようにしましょう。
!kaggle competitions download -c house-prices-advanced-regression-techniques
zipファイルのデータはcsvデータに変換するため以下を入力しunzipしましょう。
# unzip
!unzip /content/house-prices-advanced-regression-techniques.zip
これでcsv形式のデータを得ることができます。
結果をsubmit
下記を入力することでGoogle Colabから結果をsubmitすることができます。
今回も具体例として『house prices advanced regression techniques』の『sample_submission.csv』を提出してみます。
# submit
!kaggle competitions submit -c house-prices-advanced-regression-techniques -f /content/sample_submission.csv -m "Message"
<output>
100% 31.2k/31.2k [00:00<00:00, 88.1kB/s]
Successfully submitted to House Prices - Advanced Regression Techniques
これが表示されれば無事提出できています。
Kaggle Datasetにファイルをアップロード
最近は、制約のあるKaggleコンペも増えてきて、学習をGoogle Colab(または別の環境)で行い、推論のみKaggle notebookで行うコンペも増えてきました。
そのため、Google Colabで学習した重みのファイル等をKaggle Datasetにアップロードする方法を紹介します。
まずは、アップロードしたいファイルを含むフォルダを自分の環境に作成してください。
そして、そのフォルダ上に以下を入力して、dataset-metadata.json
というファイルを生成してください。
!kaggle datasets init -p [datasetにアップロードしたいフォルダPATH]
フォルダPATHを設定しないと、デフォルトでカレントディレクトリが選択されます。
dataset-metadata.json
というファイルは以下のような内容が書かれています。
{
"title": "INSERT_TITLE_HERE",
"id": "<user name>/INSERT_SLUG_HERE",
"licenses": [
{
"name": "CC0-1.0"
}
]
}
title
は、新たに作成するKaggle Datasetの名前になります。
dataset-metadata.json
上のtitle
とid
は、自分の好きな文字列に書き換えることができます(*title
は6〜50字の範囲で書き換えるという制約はあります)
最後に、以下を実行するとアップロードしたいファイルがアップロードされます。
kaggle datasets create -p [アップロードしたいフォルダPATH]
これでファイルのアップロードが完了です。
自分のKaggleアカウントのDatasetから確認してみましょう。
参考資料
- Kaggle API : Kaggle API GithubはKaggle APIの便利な機能が詳しく載っています。
まとめ
今回は、Kaggle APIを使用してGoogle Colab上でKaggleデータセットを使用したり、コンペ内容を確認する方法を紹介しました。
Google Colabプロを使用してコンペに出場してみたいという方は参考にしてください。
Pythonを学習するのに効率的なサービスを紹介していきます。
まず最初におすすめするのは、Udemyです。
Udemyは、Pythonに特化した授業がたくさんあり、どの授業も良質です。
また、セール中は1500円定義で利用することができ、コスパも最強です。
下記の記事では、実際に私が15個以上の講義を受講して特におすすめだった講義を紹介しています。
他のPythonに特化したオンライン・オフラインスクールも下記の記事でまとめています。
自分の学習スタイルに合わせて最適なものを選びましょう。
また、私がPythonを学ぶ際に使用した本を全て暴露しているので参考にしてください。