8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

kaggleAdvent Calendar 2018

Day 22

【Kaggle】Python + Heroku で新規投稿された Kernel を Slack に通知

Last updated at Posted at 2018-12-27

追記:2019/04/15
プログラムを修正し、コーディングフリーで Kernel 通知できるようになりました。
以下リポジトリの README をもとに通知設定してください。
Kaggle Kernel Notification

はじめに

Kaggle のコンペを戦う上で Kernel からの情報収集(Kernel 乞食)は必要不可欠です。
ただ、現状 Kernel が投稿されたら通知する機能は Kaggle にありません。

そこで自力で作って見ました。

概要

Kaggle API と Heroku を使って、新規投稿された Kernel を Slack に投稿します。

環境

  • mac os 10.13.6

  • git

  • Heroku CLI

  • anaconda3-5.2.0

    • Python 3.6.5
      • kaggle 1.5.0
      • pytz 2018.4
  • Kaggle API

  • Slack

  • Heroku account

  • クレジットカード

    • アプリの登録に必要
    • 今回の利用の範囲内であれば無料

手順

1. Slack の Webhook URL を取得

1.1 サイドバー下の App 横にある「+」を押します。

app.png

1.2 Incomig Webhook をインストールして設定を追加

スクリーンショット 2018-12-27 0.10.50.png

以下からブラウザでの操作になります。
スクリーンショット 2018-12-27 0.14.33.png

1.3 通知を送るチャンネルを選択(or 作成)

スクリーンショット 2018-12-27 0.14.46.png

Webhook URL をメモっときます。
スクリーンショット 2018-12-27 0.15.01.png

これで Slack での準備は完了です。

2. コードをダウンロード

$ git clone https://github.com/Doarakko/kaggle-kernel-notification
$ cd kaggle-kernel-notification

2.1 通知するコンペを設定

$ kaggle competitions list
ref                                            deadline             category            reward  teamCount  userHasEntered
---------------------------------------------  -------------------  ---------------  ---------  ---------  --------------
digit-recognizer                               2030-01-01 00:00:00  Getting Started  Knowledge       2750           False
titanic                                        2030-01-01 00:00:00  Getting Started  Knowledge      10701            True
house-prices-advanced-regression-techniques    2030-01-01 00:00:00  Getting Started  Knowledge       4681           False
imagenet-object-localization-challenge         2029-12-31 07:00:00  Research         Knowledge         31           False
competitive-data-science-predict-future-sales  2019-12-31 23:59:00  Playground           Kudos       2014            True
histopathologic-cancer-detection               2019-03-30 23:59:00  Playground       Knowledge        291           False
vsb-power-line-fault-detection                 2019-03-21 23:59:00  Featured           $25,000        109           False
microsoft-malware-prediction                   2019-03-13 23:59:00  Research           $25,000        591            True
humpback-whale-identification                  2019-02-28 23:59:00  Featured           $25,000        825           False
elo-merchant-category-recommendation           2019-02-26 23:59:00  Featured           $50,000       1826           False
ga-customer-revenue-prediction                 2019-02-15 23:59:00  Featured           $45,000       1104            True
reducing-commercial-aviation-fatalities        2019-02-12 23:59:00  Playground            Swag         16           False

通知したいコンペ名(refカラムの値)を、以下のリストに入れます。
何個でも OK です。

main.py
COMPETITIONS_LIST = ['elo-merchant-category-recommendation', 'vsb-power-line-fault-detection']

3. Heroku にデプロイ

$ heroku login
$ heroku create {適当なアプリ名}
$ git add --all
$ git commit -m 'Yeah!'
$ git push heroku master

4. Heroku の環境変数を設定

$ heroku create {適当なアプリ名}で作ったアプリが作成されています。
スクリーンショット 2018-12-27 0.31.32.png
作ったアプリをクリックして、「Settings」を開きます。
「Config Vars」に以下の環境変数を設定してください。

KAGGLE_USERNAME: kaggle.json の username
KAGGLE_KEY: kaggle.json の key
SLACK_WEBHOOK_URL: 1.3 で取得した Webhook URL です 

スクリーンショット 2018-12-27 0.29.54.png

5. 試しに実行

$ heroku run python main.py
Running python main.py on ⬢ {適当なアプリ名}... up, run.7384 (Free)

1.3 で選択したチャンネルに投稿されていれば OK です。
スクリーンショット 2018-12-27 0.42.13.png

6. 定期実行させる

6.1 Heroku のスケジューラーを入れる

おそらく、ここらへんで Heroku 上でクレジットカードを登録する必要があります。
結構前にやったので忘れました。

$ heroku addons:create scheduler:standard

Heroku 上で確認すると「Heroku Scheduler」がインストールされています。
スクリーンショット 2018-12-27 0.54.28.png

6.2 タスクを設定

スクリーンショット 2018-12-27 0.54.45.png

好きな時間(UTC)を設定します。
スクリーンショット 2018-12-27 0.54.55.png

「FREQUENCY」は Daily にしてください。
プログラムの仕様で、Kernel の最終実行日がプログラム実行日と同じ場合に通知するようにしています。
そのため、Hourly or Every 10 minutes にしても意味ないです。

おわりに

Enjoy Kaggle!

参考資料

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?