Kaggle APIが動かない。Pytorchとfastaiで始めるディープラーニング9章でサンプルコードのエラーがでたのでまとめる。


はじめに

今回は「Pytorchとfastaiではじめるディープラーニング」という本のデータセットの取得で普段とは違った方法でKaggle APIを利用したのですが、そこでエラーがでたり挙動が不安定だったためデータ取得の方法についてまとめました。

この本をやっている方でつまずく方が恐らくいると思ってます。参考になればうれしいです。

環境

  • Google Colab

問題

9章のデータセットの取得で以下のコードでエラーが発生しました。

09_tabular.ipynb
#hide
from fastbook import *
# ここでエラーがおきる
from kaggle import api
(省略)

発生したエラーは以下です。

OSError: Could not find kaggle.json. Make sure it's located in /root/.kaggle. Or use the environment method.

kaggle.jsonがないです。と言われます。もちろんないので、本通りにコードを実行するのあればfrom kaggle impport apiを削除して、kaggle.jsonを追加してから実行します。

削除したコードを実行します。

09_tabuler.ipynb
# 2つ目のセル
#hide
from fastbook import *
from pandas.api.types import is_string_dtype, is_numeric_dtype, is_categorical_dtype
from fastai.tabular.all import *
from sklearn.ensemble import RandomForestRegressor
from sklearn.tree import DecisionTreeRegressor
from dtreeviz.trees import *
from IPython.display import Image, display_svg, SVG

pd.options.display.max_rows = 20
pd.options.display.max_columns = 8

続けて、以下のセルも実行します。

# 3つ目のセル
# kaggleに登録してAccountからAPIキー(kaggle.json)をダウンロードする
creds = 'kaggle.jsonの内容をここにはりつける'

# 4つ目のセル
cred_path = Path('~/.kaggle/kaggle.json').expanduser()
if not cred_path.exists():
    cred_path.parent.mkdir(exist_ok=True)
    cred_path.write_text(creds)
    cred_path.chmod(0o600)

# 5つ目のセル
path = URLs.path('bluebook')
path

# 6つ目のセル
#hide
Path.BASE_PATH = path

# 新たにセルを追加
from kaggle import api

そのあと、ダウンロードを行うため以下のセルを実行します。

if not path.exists():
    path.mkdir(parents=true)
    api.competition_download_cli('bluebook-for-bulldozers', path=path)
    file_extract(path/'bluebook-for-bulldozers.zip')

path.ls(file_type='text')

すると、ここでもエラーがでます。
今回は、このエラーの対処法を中心に記事にします。

解決方法

ここで発生するエラーを解決するには以下の操作が必要です。
本には記載がありませんでした。

1. Kaggleからコンペのサイトにアクセスする

こちらにアクセスします。
このデータセットが使われるコンペBlue Book for Bulldozersのページとなります。

そこから、Rulesに移動し、I Understand and Acceptをクリックすることで利用が可能になります。

クリックした後はこのようになります。

また、

if not path.exists():
    path.mkdir(parents=true)
    api.competition_download_cli('bluebook-for-bulldozers', path=path)
    file_extract(path/'bluebook-for-bulldozers.zip')

path.ls(file_type='text')

は1度ダウンロードに失敗するとキャッシュの影響でダウンロードができなくなるため、ランタイムの再起動を行う必要があります

すると、うまくダウンロードができるようになります。

さいごに

本を勉強していると、いつ本通りにできなくなるかひやひやします。
しかし、さすがオライリー。コードもすべてColabで用意されているので大体のものは本通りに動かせます。(本が間違っており動かないものもありますが、サンプルコードは動きます)

そのような中で動かないコードは珍しいですがなんとか動くようになってよかったです。

参考