はじめに
Kaggle(読み方は「ケグル」??、どうも「カグル」らしい)は、世界中のデータサイエンティストや統計分析者がその最適モデルを競い合う、予測モデリング及び分析手法関連プラットフォームである*1。
この記事では、Terminalを使わずに、R上からすべてのKaggleコマンドを実行するやり方を解説する*2。
以下記載のTerminalコマンドはすべて、Rのsystem関数で実行している。
Pythonの設定・configについて
まずは、Pythonの設定・configを確認してみる。今回も、Mac HomeBrewでインストールしたPythonを使用する。
# RでのPython設定 require(reticulate) reticulate::use_python(python="/usr/local/bin/python", required = T) reticulate::py_config() #python: /usr/local/bin/python #libpython: /usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/config-3.8-darwin/libpython3.8.dylib #pythonhome: /usr/local/Cellar/python@3.8/3.8.8_1/Frameworks/Python.framework/Versions/3.8:/usr/local/Cellar/python@3.8/3.8.8_1/Frameworks/Python.framework/Versions/3.8 #version: 3.8.8 (default, Feb 26 2021, 23:59:43) [Clang 12.0.0 (clang-1200.0.32.29)] #numpy: /usr/local/lib/python3.8/site-packages/numpy #numpy_version: 1.16.3 #NOTE: Python version was forced by use_python function
次に、Terminal側のPythonパスを確認しておく。
system("which python; python -V") #/usr/local/bin/python #Python 3.8.8 system("which pip; pip -V") #/usr/local/bin/pip #pip 21.0.1 from /usr/local/lib/python3.8/site-packages/pip (python 3.8)
ちゃんと、/usr/local/bin/
のパスとなっている。
それでは、pipでKaggle APIをインストールする。
#Kaggleのインストール system("pip install kaggle") system("which kaggle") #/usr/local/bin/kaggle
ここまで出来たら、Kaggle HPにいって、Your Profile内 >> Account >> API で、Create New API Token
をクリックする*3。
そうすると、APIキーである kaggle.json
がダウンロードされる。
次に、Rに戻って、ホームディレクトリ配下に.kaggle
ディレクトリを作成して、そこにAPIキーを移動させる。そして、chmod
でAPIキーに読み書き制限を与える。
#フォルダ作成 system("mkdir ~/.kaggle") #APIキーの移動: [Your name]はホスト名に入れ替え system("mv /Users/[Your name]/Downloads/kaggle.json ~/.kaggle/") #所有者のみのファイル読み書きに制限 system("chmod 600 ~/.kaggle/kaggle.json")
これで、Kaggle APIのセットアップは完了である。
実際に、kaggleコマンドをR上で実行してみる。
Kaggleコマンドの使い方
基本的な文法
大まかなKaggleコマンドの文法は、以下の通りである
使用方法: kaggle [-h] [-v] {competitions, c, datasets, d, kernels, k, config} ... オプションの引数。 h, --help このヘルプメッセージを表示する。 -v, --version プログラムのバージョン番号を表示する。 コマンド: kaggle competitions, 略: c kaggle datasets, 略: d kaggle kernels, 略: k, kaggle config 次のいずれかを使用すること #コンペティション: Kaggle competitions に関連するコマンド kaggle competitions {list, files, download, submit, submission, submission, leaderboard} #データセット: Kaggle データセットに関連するコマンド kaggle datasets {list, files, download, create, version, init, metadata, status} # config: コンフィギュレーション設定 kaggle config {view, set, unset}. # kernels: Kaggle カーネルに関連するコマンド kaggle kernels
次に、実際に使用する順番で、コマンド実行の挙動を確認してみる。
【1】コンペ一覧の表示①: 全一覧の表示
system("kaggle competitions list") #ref deadline category reward teamCount userHasEntered #--------------------------------------------- ------------------- --------------- --------- --------- -------------- #contradictory-my-dear-watson 2030-07-01 23:59:00 Getting Started Prizes 80 False #gan-getting-started 2030-07-01 23:59:00 Getting Started Prizes 170 False #tpu-getting-started 2030-06-03 23:59:00 Getting Started Knowledge 392 False #digit-recognizer 2030-01-01 00:00:00 Getting Started Knowledge 2587 True #titanic 2030-01-01 00:00:00 Getting Started Knowledge 20578 True #house-prices-advanced-regression-techniques 2030-01-01 00:00:00 Getting Started Knowledge 5210 False #connectx 2030-01-01 00:00:00 Getting Started Knowledge 465 False #nlp-getting-started 2030-01-01 00:00:00 Getting Started Knowledge 1341 False #competitive-data-science-predict-future-sales 2022-12-31 23:59:00 Playground Kudos 10515 True #jane-street-market-prediction 2021-08-23 23:59:00 Featured $100,000 4245 False #hungry-geese 2021-07-26 23:59:00 Playground Prizes 334 False #bms-molecular-translation 2021-06-02 23:59:00 Featured $50,000 86 False #hashcode-2021-oqr-extension 2021-05-25 23:59:00 Playground Knowledge 60 False #indoor-location-navigation 2021-05-17 23:59:00 Research $10,000 458 False #hpa-single-cell-image-classification 2021-05-11 23:59:00 Featured $25,000 270 False #tabular-playground-series-mar-2021 2021-03-31 23:59:00 Playground Swag 335 False #vinbigdata-chest-xray-abnormalities-detection 2021-03-30 23:59:00 Featured $50,000 866 False #hubmap-kidney-segmentation 2021-03-25 23:59:00 Research $60,000 1171 False #ncaaw-march-mania-2021 2021-03-15 23:59:00 Playground Prizes 161 False #ncaaw-march-mania-2021-spread 2021-03-15 23:59:00 Playground Knowledge 17 False
【2】コンペ一覧の表示②: titanicで検索した一覧の表示
system("kaggle competitions list -s titanic") #ref deadline category reward teamCount userHasEntered #------- ------------------- --------------- --------- --------- -------------- #titanic 2030-01-01 00:00:00 Getting Started Knowledge 20578 True
【3】コンペ・ランキングの表示: titanic
system("kaggle competitions leaderboard titanic --show") # teamId teamName submissionDate score #------- ------------------------- ------------------- ------- #6015697 Jizhou Wei 2020-12-16 03:13:08 1.00000 #6023788 JaesikYang 2020-12-17 00:11:13 1.00000 #4364147 Börkapanda 2021-02-12 19:23:04 1.00000 #6027704 Eleven_Wang 2020-12-17 04:07:35 1.00000 #6030190 Ease Gao 2020-12-17 13:16:29 1.00000 #5322915 Marcel Reis 2020-12-17 15:57:42 1.00000 #5919487 Test 1 2020-12-17 17:09:30 1.00000 #5705094 Zeeshan Patel 2021-02-15 04:04:10 1.00000
【4】コンペ・データセットの表示: titanic
system("kaggle competitions files titanic") #name size creationDate #--------------------- ---- ------------------- #train.csv 60KB 2018-04-09 05:33:22 #test.csv 28KB 2018-04-09 05:33:22 #gender_submission.csv 3KB 2018-04-09 05:33:22
【5】コンペ・データセットのダウンロード・解凍・head表示: titanic
#データ・ダウンロード system("kaggle competitions download titanic") dir() #[1] "R.Rproj" "titanic.zip" #unzip解凍 system("unzip titanic.zip") #表示 system("head train.csv") #PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked #1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S #2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C #3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S #4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,S #5,0,3,"Allen, Mr. William Henry",male,35,0,0,373450,8.05,,S #6,0,3,"Moran, Mr. James",male,,0,0,330877,8.4583,,Q #7,0,1,"McCarthy, Mr. Timothy J",male,54,0,0,17463,51.8625,E46,S #8,0,3,"Palsson, Master. Gosta Leonard",male,2,3,1,349909,21.075,,S #9,1,3,"Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)",female,27,0,2,347742,11.1333,,S system("head test.csv") #PassengerId,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked #892,3,"Kelly, Mr. James",male,34.5,0,0,330911,7.8292,,Q #893,3,"Wilkes, Mrs. James (Ellen Needs)",female,47,1,0,363272,7,,S #894,2,"Myles, Mr. Thomas Francis",male,62,0,0,240276,9.6875,,Q #895,3,"Wirz, Mr. Albert",male,27,0,0,315154,8.6625,,S #896,3,"Hirvonen, Mrs. Alexander (Helga E Lindqvist)",female,22,1,1,3101298,12.2875,,S #897,3,"Svensson, Mr. Johan Cervin",male,14,0,0,7538,9.225,,S #898,3,"Connolly, Miss. Kate",female,30,0,0,330972,7.6292,,Q #899,2,"Caldwell, Mr. Albert Francis",male,26,1,1,248738,29,,S #900,3,"Abrahim, Mrs. Joseph (Sophie Halaut Easu)",female,18,0,0,2657,7.2292,,C system("head gender_submission.csv") #PassengerId,Survived #892,0 #893,1 #894,0 #895,0 #896,1 #897,0 #898,1 #899,0 #900,1
【6】submitの履歴確認
system("kaggle competitions submissions titanic")
【7】submitの実行
試しに、サンプルデータであるgender_submission.csv
で、一度submitしてみる。
system("kaggle competitions submit -f gender_submission.csv -m ok titanic") #100%|██████████| 3.18k/3.18k [00:03<00:00, 911B/s] Successfully submitted to Titanic - Machine Learning from Disaster #引数 #-f: アップロードするファイル名/ファイルパス #-m: 投稿ごとにメッセージを入れる
【8】submitの履歴を確認して、結果スコアを表示させる
system("kaggle competitions submissions titanic") #fileName date description status publicScore privateScore #--------------------- ------------------- ----------- -------- ----------- ------------ #gender_submission.csv 2021-03-04 13:44:04 ok complete 0.76555 None
ここで、Kaggleのtestデータは、基本的に、public/privateデータに分かれていて、それぞれでスコアが算出されるらしい。
Kaggleの掲示板では、publicデータで計算された、publicScoreでランキングされている。一方、最終的な成績は、privateデータ部分で計算されたprivateScoreの結果で判定されるようだ。
まとめ
Kaggleコマンドについて、Rから実行例をまとめてみた。
この機会に、実際のコンペにも参加しようと思う。
補足
kaggleコマンドのヘルプ表示
system("kaggle -h") #usage: kaggle [-h] [-v] {competitions,c,datasets,d,kernels,k,config} ... # #optional arguments: # -h, --help show this help message and exit # -v, --version show program's version number and exit # #commands: # {competitions,c,datasets,d,kernels,k,config} # Use one of: # competitions {list, files, download, submit, submissions, leaderboard} # datasets {list, files, download, create, version, init, metadata, status} # config {view, set, unset} # competitions (c) Commands related to Kaggle competitions # datasets (d) Commands related to Kaggle datasets # kernels (k) Commands related to Kaggle kernels # config Configuration settings
その他コマンド
system("kaggle competitions list -h") system("kaggle competitions files -h") system("kaggle competitions download -h") system("kaggle competitions submit -h") system("kaggle competitions submissions -h") system("kaggle competitions leaderboard -h") #データセット一覧の取得 system("kaggle datasets list") #ref title size lastUpdated downloadCount voteCount usabilityRating #---------------------------------------------------------- ------------------------------------------------ ----- ------------------- ------------- --------- --------------- #dhruvildave/wikibooks-dataset Wikibooks Dataset 1GB 2021-02-18 10:08:27 105 24 1.0 #gpreda/reddit-vaccine-myths Reddit Vaccine Myths 215KB 2021-03-04 07:44:29 17 5 1.0 #nickuzmenkov/ranzcr-clip-kfold-tfrecords RANZCR CLiP KFold TFRecords 2GB 2021-02-21 13:29:51 7 8 0.8125 #crowww/a-large-scale-fish-dataset A Large Scale Fish Dataset 3GB 2021-02-17 16:10:44 47 8 0.75 #landrykezebou/lvzhdr-tone-mapping-benchmark-dataset-tmonet LVZ-HDR Tone Mapping Benchmark Dataset (TMO-Net) 24GB 2021-03-01 05:03:40 2 3 0.6875 #fatiimaezzahra/famous-iconic-women Famous Iconic Women 838MB 2021-02-28 14:56:00 10 5 0.75 #imsparsh/musicnet-dataset MusicNet Dataset 22GB 2021-02-18 14:12:19 26 3 1.0 #coloradokb/dandelionimages DandelionImages 4GB 2021-02-19 20:03:47 10 3 0.75 #stuartjames/lights LightS: Light Specularity Dataset 18GB 2021-02-18 14:32:26 5 2 0.6875 #nickuzmenkov/nih-chest-xrays-tfrecords NIH Chest X-rays TFRecords 6GB 2021-03-04 09:26:08 12 3 0.88235295 #mathurinache/the-lj-speech-dataset The LJ Speech Dataset 3GB 2021-02-15 09:19:54 8 6 0.88235295 #imsparsh/accentdb-core-extended AccentDB - Core & Extended 6GB 2021-02-17 14:22:54 8 4 0.8125 #shivamb/netflix-shows Netflix Movies and TV Shows 1MB 2021-01-18 16:20:26 102517 3841 1.0 #gpreda/covid-world-vaccination-progress COVID-19 World Vaccination Progress 111KB 2021-03-04 08:10:11 21297 945 1.0 #arashnic/hr-analytics-job-change-of-data-scientists HR Analytics: Job Change of Data Scientists 295KB 2020-12-07 00:25:10 11430 631 1.0 #michau96/restaurant-business-rankings-2020 Restaurant Business Rankings 2020 16KB 2021-01-30 14:20:45 5251 157 1.0 #jsphyg/weather-dataset-rattle-package Rain in Australia 4MB 2020-12-11 10:26:12 36028 764 1.0 #gpreda/reddit-wallstreetsbets-posts Reddit WallStreetBets Posts 9MB 2021-03-04 07:43:48 2242 291 1.0 #ayushggarg/all-trumps-twitter-insults-20152021 All Trump's Twitter insults (2015-2021) 581KB 2021-01-20 16:51:05 3768 362 1.0 #datasnaek/youtube-new Trending YouTube Video Statistics 201MB 2019-06-03 00:56:47 129524 3642 0.7941176 #データセット一覧をvotesでソートする system("kaggle datasets list --sort-by votes") #ref title size lastUpdated downloadCount voteCount usabilityRating #-------------------------------------------------------- -------------------------------------------------- ----- ------------------- ------------- --------- --------------- #allen-institute-for-ai/CORD-19-research-challenge COVID-19 Open Research Dataset Challenge (CORD-19) 8GB 2021-03-02 04:14:53 118569 9177 0.88235295 #mlg-ulb/creditcardfraud Credit Card Fraud Detection 66MB 2018-03-23 01:17:27 296222 7397 0.85294116 #sudalairajkumar/novel-corona-virus-2019-dataset Novel Corona Virus 2019 Dataset 7MB 2021-02-28 10:05:39 307164 5270 0.9705882 #ronitf/heart-disease-uci Heart Disease UCI 3KB 2018-06-25 11:33:56 195378 4576 0.7647059 #Configの確認 system("kaggle config view") #Configuration values from /Users/[Your path]/.kaggle #- username: [Your ID] #- path: None #- proxy: None #- competition: None
参考資料
*1:https://ja.wikipedia.org/wiki/Kaggle
*2:個人的には、すでにTerminalを起動することすら、面倒になっている。。。
*3:事前に、アカウント登録をする必要がある。