京橋のバイオインフォマティシャンの日常

まずは、データ分析、コマンドラインのメモとして

RからのKaggleコマンド実行のTips 〜コンペ一覧・データセット取得・submitなどを一通りやってみた。Predictionはまた今度で編〜

Kaggle(読み方は「ケグル」??、どうも「カグル」らしい)は、世界中のデータサイエンティストや統計分析者がその最適モデルを競い合う、予測モデリング及び分析手法関連プラットフォームである*1

この記事では、Terminalを使わずに、R上からすべてのKaggleコマンドを実行するやり方を解説する*2

以下記載のTerminalコマンドはすべて、Rのsystem関数で実行している。

まずは、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

f:id:skume:20210305022042p:plain:w500

そうすると、APIキーである kaggle.json がダウンロードされる。

f:id:skume:20210305022046p:plain:w500

次に、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

参考資料

qiita.com

github.com

pypi.org

*1:https://ja.wikipedia.org/wiki/Kaggle

*2:個人的には、すでにTerminalを起動することすら、面倒になっている。。。

*3:事前に、アカウント登録をする必要がある。