1. グーグルコラボラトリー

1.1. グーグルドライブの設定

1.1.1. ドライブのマウント

グーグルドライブをグーグルコラボラトリーと連携する方法を紹介します.最初に,このグーグルコラボラトリーが動いている計算機にどのようなファイルが置かれているかを確認します.以下のように Linux のコマンドを打ちます.

! ls

Note

先頭に ! をつけてコマンドを打つと,それは Python でなくてこの計算機のシェルのコマンドとして認識されます.

上のコマンドを実行した結果 sample_data とだけ表示されました.これは Google が最初からこの計算機に置いてくれている機械学習のサンプルデータが入ったフォルダです.使うことはありません.次に,以下のようなプログラムを実行することで,自身のグーグルドライブをこのグーグルコラボラトリーが動いている計算機にマウント(この計算機から自身のグーグルドライブにアクセスできるようにする行為)します.

#!/usr/bin/env python3
from google.colab import drive

def main():
    drive.mount("/content/drive", force_remount=True)

if __name__ == "__main__":
    main()

このプログラムを実行すると以下のようなメッセージが出てきます.「Google ドライブに接続」を選択します. https://drive.google.com/uc?id=1XdZsYif1uxU8EkXrz0wWEkNTBDN7F1Li

その後もアクセスを許可するための選択肢を選ぶとマウントが完了します.マウントが完了したら以下のコマンドを打って,グーグルドライブにアクセスが可能になったかを確認します.

! ls

drive というフォルダが追加されています.以下のように打つと,MyDrive というフォルダを確認できます.これが自身のグーグルドライブのフォルダです.

! ls drive

すなわち,drive/MyDrive がマウントしたグーグルドライブの場所です.

Note

この / は,その左に書かれている名前のフォルダの中に,その右に書かれている名前のフォルダが存在していることを示しています.つまり,drive/MyDrivedrive というフォルダの中に存在している MyDrive を意味します.

1.1.2. フォルダの作成

Kaggle に参加するためにグーグルドライブ内に「kaggle」という名前のフォルダを作成すると便利なので以下のコマンドで作っておきます.(以下のコマンドでは「kaggle」というフォルダの中にさらに「token」というフォルダを作成しています.)

! mkdir -p drive/MyDrive/kaggle/token

グーグルのメニューからグーグルドライブにアクセスすると「kaggle」という名前のフォルダが生成されているはずです.また,上で確認した方法と同様に以下のコマンドを打ってもそのフォルダの存在を確認できます.

! ls drive/MyDrive

1.2. Kaggle の設定

1.2.1. Kaggle へのサインイン

以下の URL から Kaggle にアクセスし,サインインします.新たに Kaggle のアカウントを作成する必要はありません.グーグルアカウントでサインインできます.

https://www.kaggle.com/

https://github.com/yamada-kd/dxi-kaggle/blob/main/image/kaggle-1.png?raw=1

以下のようなユーザー名を決める画面等が出るので指示に従って進めます.

https://github.com/yamada-kd/dxi-kaggle/blob/main/image/kaggle-2.png?raw=1

1.2.2. Kaggle API Token

グーグルコラボラトリーから Kaggle へは Kaggle API というものを使ってアクセスするのですが,そのために必要な Kaggle API Token というものを Kaggle の公式ページからダウンロードします.そのために,公式ページの「Account」にアクセスし,その後,「Create New API Token」をクリックしてファイルをダウンロードします.Kaggle のトップページに表示されている自身のユーザー名をクリックすると「Account」にアクセスするページに到達できます.

https://github.com/yamada-kd/dxi-kaggle/blob/main/image/kaggle-3.png?raw=1

この操作によって「kaggle.json」という名前のファイルをダウンロードできましたが,今度はこのファイルをグーグルドライブ内の,上の操作で作成した kaggle/token にアップロードします.以下のコマンドを打って「kaggle.json」が確認出来たら成功しています.

! ls drive/MyDrive/kaggle/token

この Kaggle API Token をこのグーグルコラボラトリーで利用するために以下のプログラムを実行します.

#!/usr/bin/env python3
import os
import json

def main():
    fin = open("/content/drive/MyDrive/kaggle/token/kaggle.json", "r")
    json_data = json.load(fin)
    fin.close()
    os.environ["KAGGLE_USERNAME"] = json_data["username"]
    os.environ["KAGGLE_KEY"] = json_data["key"]

if __name__ == "__main__":
    main()

Hint

公式ページの「Account」には「setting」→「API」→「create New Token」で到達できます.

1.2.3. API のインストール

Kaggle を利用するための API である Kaggle API をインストールする必要があります.以下のコマンドでインストールできます.

! pip3 install kaggle

Kaggle API を使えばコマンドラインから様々なことができるようになります.例えば,以下のようなコマンドを打つことで Kaggle で開催しているコンテストのリストを確認することができます.

! kaggle competitions list

1.3. Kaggle の実行

1.3.1. 例題

ここでは,以下の URL からアクセスできる問題に取り組みます.「Allstate Claims Severity」と題されています.Allstate は保険会社です.顧客が保険金を請求する際にその保険金を請求するための主張がどれほど深刻なのか,重大なのかを判断するための指標である重大度を予測する問題です.構造化されたデータが提供されており,機械学習の初学者用のデータセットです.トレーニングデータセットのサイズが程よく大きく,過去の参加者の成績が散らばっているためこれを選びました.

https://www.kaggle.com/c/allstate-claims-severity

Hint

この問題に取り組むために Rules というタブをクリックして確認できる,この問題のルールを理解して承諾することを確認する部分をクリックしてください.

https://github.com/yamada-kd/dxi-kaggle/blob/main/image/kaggle-4.png?raw=1

Kaggle を初めて利用する場合,以下のような電話番号の確認画面が出ます.

https://github.com/yamada-kd/dxi-kaggle/blob/main/image/kaggle-5.png?raw=1

送られてきたコードを入力すると以降の操作が可能になります.

https://github.com/yamada-kd/dxi-kaggle/blob/main/image/kaggle-6.png?raw=1

1.3.2. 作業用フォルダの作成

これから Kaggle よりデータセットをダウンロードしますが,データをカレントディレクトリにダウンロードすると,他の問題に取り組みたいときにデータセットをダウンロードした場合に名前が重複してしまったり,また,グーグルコラボラトリーが初期化されてしまったときにファイルを残せなかったりと不便なので,グーグルドライブ内に新たなフォルダを作ります.最初に,以下のようなプロジェクトフォルダを作ります.

! mkdir -p /content/drive/MyDrive/kaggle/project

作成した project フォルダ内に allstate というフォルダを作成します.

! mkdir -p /content/drive/MyDrive/kaggle/project/allstate

1.3.3. ダウンロード

データセットのダウンロードの方法は以下のページに書かれている通りです.Kaggle API を使ったダウンロード法が示されています.

https://www.kaggle.com/c/allstate-claims-severity/data

ここではこのコマンドを少し変えて,以下のコマンドでダウンロードします.オプション -p を加えることで,ダウンロード先を指定しているのです.

! kaggle competitions download -c allstate-claims-severity -p /content/drive/MyDrive/kaggle/project/allstate

データがダウンロードできたことは以下のコマンドで確認できます.

! ls /content/drive/MyDrive/kaggle/project/allstate

以下のように ! ではなくて % を加えて使った Linux のコマンドは永続的に実行されます.このようにすることで現在のディレクトリを /content/drive/MyDrive/kaggle/project/allstate に変更できます.

%cd /content/drive/MyDrive/kaggle/project/allstate

Hint

このようにカレントディレクトリをプロジェクトのフォルダに設定しておくのが便利だと思います.

以下のようにして,ダウンロードしたファイル allstate-claims-severity.zip を解凍します.

! unzip allstate-claims-severity.zip

回答の結果,sample_submission.csv,test.csv,train.csv というファイルが得られたと思います.train.csv は学習データセット,test.csv はテストデータセットです.

Hint

圧縮されているファイルを解凍する必要はありません.大きなファイルサイズのデータは解凍してはいけません.そのまま Python で読み込んで処理します.

中身は以下のような感じで見ることができます.

! head -n 15 sample_submission.csv

1.3.4. 解析の手順

ここから先の解析についてはこのコンテンツではお教えしません.色々な解析ができると思いますので色々とやってみてください.

  • データセットの中身を確認する

  • データを可視化する

  • データを整形する

  • 機械学習する

データはグーグルトライブ内にダウンロードしたのでウェブブラウザからグーグルドライブにアクセスすると中身を GUI で確認することもできます.

Kaggle に取り組む際のコツがあります.以下の「Discussion」というページには参加者らが自分たちの疑問や知識をディスカッションした結果が残されています.これを読むと問題に対する理解が深まります.

https://www.kaggle.com/c/allstate-claims-severity/discussion

また,以下の「Code」というページを読むこともとても有用です.

https://www.kaggle.com/c/allstate-claims-severity/code

まずはこれらを読んで全体を把握するのが良いのだと思います.

1.3.5. 結果の投稿

テストデータセットに対して行った結果は sample_submission.csv と同じフォーマットに整えます.これを Kaggle に投稿しますが,この操作も API を利用して行うことができます.投稿に必要なコマンドは以下のページに示されています.

https://www.kaggle.com/c/allstate-claims-severity/submit

ここでは,sample_submission.csv をそのまま投稿してみます.-f によってファイルの場所を指定します.以下のように打ちます.-m のところには何かしらのメモを書くことができます.カレントディレクトリを変更していない場合は -f に指定する値はそのファイルの場所を正確に記述してください.

! kaggle competitions submit -c allstate-claims-severity -f sample_submission.csv -m "Message"

成功すると以下のようなメッセージが表示されるはずです.

Successfully submitted to Allstate Claims Severity

以下のページ,My Submissions というページですが,ここにアクセスすると投稿した結果の評価値を得ることができます.

https://www.kaggle.com/c/allstate-claims-severity/submissions

以下のページ,Leaderborad の結果を超えられるように頑張ってください.

https://www.kaggle.com/c/allstate-claims-severity/leaderboard

Note

終わりです.頑張ってください!