kaggle slackの過去ログ閲覧アプリをGAEで構築した話
こんにちは、tkmです。
今日は、kaggle slackの過去ログ閲覧アプリをGAEで構築したときのハマった点とかの話を書いていこうと思います。
kaggle slack過去ログ閲覧アプリ on GAE
Kaggle slack過去ログビューワは、
— Takami Sato (@tkm2261) 2018年7月2日
過去ログ保存もそうですが、slackに加入せずに議論を見れるので、
参加を躊躇ってる方は覗いて見るとよいですよ!
特に#beginners-help は知見が色々転がってますhttps://t.co/Ng3lkCN5m6 pic.twitter.com/Ef4cyMho3v
https://kaggler-ja-slack-archive.appspot.com/
手前味噌だけど結構良いアプリになっていると思う。
チャンネル創立当初のログにまた逢えると思ってなかったので感慨深いですね。
Slackの無料枠では1万メッセージしか見れない
https://kaggler-ja.slack.com/intl/ja-jp/plans
1万件というのは多いようでかなり少ないです。Kaggle slackの場合6月末時点で5月までのログしか保存されていませんでした。
このままだと、kaggle slackではコンペ解法や質問回答という貴重な知見がロストしていってしまうので対策が急務でした。
Slack APIも過去1万件しか見れない
当たり前のようですが、APIで叩いても1万件しか取れません。また、誰がどのチャネルに入ったとかもメッセージとしてカウントされているようで、1万件が体感より少ない理由にも納得しました。
またAPIを使って、Google Spread Sheetにログを継続保存するのはかなり簡単で、
こちらのブログのコードをコピペするだけでOKです。
とりあえずここにkaggle slackのログを保存するようにしました!https://t.co/xF5Tv3ojEg
— Takami Sato (@tkm2261) 2018年6月29日
googleスプレッドシートで見やすさは微妙ですが、生JSONもあるので、誰かビューワーとか開発してくれないかなー(チラッチラッ
一応現在でも、Kaggler slackのコードはここに保存され続けています。
https://drive.google.com/drive/u/4/folders/17HBT50oa-Kow4127xhCwU0uEKrr33X90
Slack APIで見るべきデータ
SlackのAPIのページには様々なAPIがあり、一見メッセージログ収集に必要なデータがわかりずらいです。
一応私が使ったAPIを列挙しておきます
何故かGUIでダウンロードすると、過去全てのメッセージが見れた!
ここに従ってエクスポートすると、publicチャネルに限った話ですが、過去のメッセージを全て見ることが出来ました!
もともとKaggler slackはパブリックチャネルなのでこれで十分
最初はこれに気づかず意気消沈してましたが、結果全てのログを閲覧できるようになりました!
ただしUIでダウンロードしたログのタイムスタンプはintでmsecまで入ってません。
メッセージの差分管理をタイムスタンプでやってると、APIで来たメッセージはmsecまで入っているため、二重保存されるので注意してください。
なんかslackはGUIからログをダウンロードすると、過去全てのログが得られる超親切設計だったため、過去ログが全て復活しました!
— Takami Sato (@tkm2261) 2018年7月3日
昔は#generalと#beginners-helpぐらいしかなかったので、この辺眺めていると懐かしいですね。。。
画像はリクルートコンペのときのものですhttps://t.co/UWQRapsYWs pic.twitter.com/DxVcdSLVt9
お金もかけず運用も頑張りたくないのでGAEを選択
スプレッドシートでも最低限ログは見れましたが、やはり見づらい事この上ないためアプリを構築することに
次々来るログの差分管理が必要なためDBを導入したいが、
色々調べてもDB立てると高額になるし、運用手間的にインスタンス内に自分で立てたくない。。。
ということで、完全無料に組めるGAE+Datastoreで組むことに
Python2.7になるけどGAE Standardを選択
flexibleだと色々やりやすいが、大したことやらないので無料枠の多いStandardを選択
今回は開発しやすさよりも、運用負荷を優先
工数の9割はdatastoreに吸われた
GCPではCloud SQLといった普通のDBに無料枠はないが、datastoreには無料枠があり、
昔からGAE使ってる人にはお馴染みだと思います。
こいつはNoSQL的なDBで、インデックスをしっかり貼らないとクエリ自体が失敗する他、
ドキュメントも少なく仕様把握に時間がかかりました。
今回みたいな簡単なアプリにはいいですが、しっかりrelationをやるようなアプリでは大人しくCloud SQLとかを使ったほうが良さそうです。
WebフレームワークはFlaskを採用
個人的にはDjango派でしたが、ORマッパがdatastore独自になるので軽量かつGAEのサンプルコードが多いFlaskを採用しました。
コード見て頂ければわかりますが、ページ一個でGETだけ、パラメータもGETで渡すだけなのでかなり適当に書いてます。
UIを頑張ってslackに似せた
こういうアプリはUI悪いと敬遠されて使われないので、UIは可能な限りslackに似せて作りました。
https://kaggler-ja-slack-archive.appspot.com/
配色とかフォントはネットで「slack css」とかググって出てきた物を拝借して、
デザイン全体にはBootstrap4を採用しました。
昔みたいに「col-xs-3, col-md-3, ...」みたいに延々書く必要がなくなり、「col-3」だけで良いので大分書きやすくなっていました。
一応スマホでも見れるようにしてますが、専用の調整はしていません。
メッセージにリンクを付けた
実際に作ったアプリを使ってると、特定の発言を引用したいなーと思う事が多く
メッセージ上部に[link to this message]を追加した
元々datastoreの仕様上ページングの実装が面倒くさいことになっており、
ページの最初と最後のtimestampでページを表示していたので、表示したいメッセージのタイムスタンプをGETパラメータに渡すだけで実現できました。
便利な機能な割に、簡単に実装できてなにより
作成期間は2日
土日で作り上げましたが、元々Slackのログ仕様は目を通していたのと、
大体の設計が頭にあったので一回の週末だけで作れました。
ただこれは自分で全て決められたからなので、お仕事で受けるなら2~3ヶ月は取ると思います。
企業で開発を内製化したほうが良いのは、この辺りからも見えますね。
プルリク待ってます!
一番必要なのは検索機能で、GAEのsearch APIで実現しようと思ってます。
もしやってみたい方はプルリクお待ちしております!
BigQueryにデータをインポートする解説動画つくった
こんにちはtkmです。
今日はKaggleのデータをBigQueryに入れるまでを解説しました。
某所でBigQuery周りの解説をする必要があったので、どうせならと動画にしてしまいました。
— Takami Sato (@tkm2261) May 24, 2018
Kaggle Home CreditコンペのデータをBQに入れる解説動画です。今回テーブルが多い為とりあえずDBに入れたかったのと、『DBに入ってればデータを触れる』企業分析勢がターゲットですhttps://t.co/clTxuwiI15
https://www.youtube.com/watch?v=LpLAKuQGRn8
題材は2018年5月時点で開催中のHome Credit Default Riskコンペです。
https://www.kaggle.com/c/home-credit-default-risk/
TalkingDataコンペでBigQuery周りの質問受けるのが多かったのと、他の所で解説する必要があったので動画にしてしまいました。
Kaggle Tokyo Meetup #4 開催レポート
こんにちは。tkm2261です。
今日は2018/5/12に開催したKaggle Tokyo Meetup #4の模様をレポートします。
このmeetupも4回目となり、今回はGoogle様からサポートを頂いた事もあり、かなり大規模なmeetupになりました。
今回からMaster枠とExpert枠を設けたり、Youtube Liveをしたり、人数を増やしたりと色々新しいことを試しています。
さらに自分で言うのもアレですが超豪華なスピーカーになっています。
本日の見どころは
— Takami Sato (@tkm2261) 2018年5月12日
競プロ界の神tourist wataさん
金メダル2個のnovice pocketさん
苦労人masterのterekaさん
scikit-learn生みの親davidCさん
LTなのに一ヶ月前から資料作ってたjackさん
2 stage制の鬼osciiartさん
talkingdata覇者flowlightさん
などと自分で言ってても超豪華。。。#kaggle_tokyo
最終的には参加者は70名程でYoutube Liveは1072回視聴されて、常時100人位以上が視聴していました。
ここまで来るとmeetup開催も責任が増してくるので、初めての方でも参加しやすいように内輪ネタを排除してなるべくpublicな開催を心がけて行きたいです。
開始前
今回はフード・ドリンク・会場・発表者交通費などをGoogle様にサポート頂きました。ありがとうございました!
会場は普段食堂として使われているところで、広々しており卓球や色んなモノがありました。
本日の会場はこんな感じです!
— Takami Sato (@tkm2261) 2018年5月12日
到着お待ちしています#kaggle_tokyo pic.twitter.com/iupaVM20P9
会場に電車でGOがあったので、ガチ勢の来場お待ちしています!#kaggle_tokyo pic.twitter.com/DJHXpMYsVM
— Takami Sato (@tkm2261) 2018年5月12日
またYoutube Liveでの配信もサポート頂き、smly氏がスイッチャーを務めるという珍しい絵も撮れました。
私としては今回の配信でノウハウを盗もうとしてましたが、ガチすぎる機材に断念しました。
もちろん配信品質はとても安定していたのでとても助かりました。
Youtube Liveはこんな感じhttps://t.co/Oni2c19Gph#kaggle_tokyo pic.twitter.com/ENnJELgNKQ
— Takami Sato (@tkm2261) 2018年5月12日
Opening Talk
毎回おなじみのthreecourseさんによるopening talk
配信付きでのopening talkは初めてらしく少し緊張気味でしたw
今回は人数が70名ほど多かったため、いつもやっていた自己紹介はしませんでした。
これについては今後運営で議論して存続を決めたい感じです。
発表① wataさん『サンタコンペで二度全完した話』
資料はこちら https://speakerdeck.com/wata_orz/santakonpedeer-du-quan-wan-sitahua
Kagglerが競プロ勢に恐れおののく年1イベントのサンタコンペに関する話でした。
開催後1日で全完した話とかは、会場をざわつかせるなど圧倒的な実力をいかんなく見せて頂きました。
会場はKagglerが多いことから最小費用流の話をわかりやすく話して頂いて助かりました。
会場でアンケートを取った所、大体会場の半分ぐらいが最小費用流を当日初めて聞いたという事でKagglerにも良い刺激になったようでした。
wataさんもあとsilver一つでKaggle Masterなので引き続きKaggleに参加してほしいです。
発表② pocketさん『猫でも取れる金メダル & 猫しか取れない金メダル』
資料はこちら https://www.slideshare.net/ShotaOkubo/neko-kin-96769953
pocketさんからは、RecruitコンペでGoldを取った時の話とKaggle初心者がどう始めれば良いかのお話でした。
やはり手元評価を確立することと、discussionを追うことの重要性を強調していました。
pocketさんは文系出身で2016年から初めてGoldメダルなので、Kaggleを初めたい方は動画を閲覧してみることをオススメします。
発表③ terekaさん『IEEE's Signal Processing Society 10th Solutionと得られた学び』
資料はこちら https://www.slideshare.net/ssuser21af5b/ieees-signal-processing-society-10th-solution
terekaさんは今回見事Gold獲得でMasterとなりました。
発表は画像コンペのモデルの話と、国際チームを組んだ時の苦労点や、ods.aiがクローリングしてデータを集めていたという闇コンペっぷりを共有頂きました。
やはりディープラーニングの人気からか、質問がかなり多かったです。
発表④ Davidさん『Using NumPy efficiently』
※動画は公開可否を確認中
今回のメインスピーカーであるscikit-learnの生みの親であるDavidさんの発表です。
私がnumpyのマニアックな話を聞きたいという依頼もあり、かなり突っ込んだNumpy arrayの話をして頂きました。
DavidCさんと内容の打合せで
— Takami Sato (@tkm2261) 2018年3月29日
「機械学習プロジェクトのマネジメント的な話と、今積極的に開発に参加してるNumpyの話どっちがよい?」
私「Numpyのマニアックな話でお願いします。」
この決断は間違ってなかったと信じている#kagglenight#kaggletokyo
個人的にはnumpy.arrayがstrideという属性を持っている事は知りませんでしたが、strideでviewや多次元配列に対応できたりと素晴らしいideaで、C++で行列演算書いた事ある人なら誰もがうなずく内容だったと思います。
broadcasting ruleも直感的に理解するのは難しかったですが、3つのシンプルなルールであのnumpyの演算が実現できてるのは美しいと言わざるを得ない内容でした。
今回、Davidさんは英語の発表でしたが、聴衆があまり英語得意でないということで、資料にかなり書き込んだそうです。普段はやらないとのことなので、彼には感謝しかありません。
LT
もはやLTの概念とは何かというほど、議論が活発なのもありLTも普通の発表並の時間となりました。
Jackさん
https://speakerdeck.com/rsakata/kaggle-meetup-number-4-lightning-talks
catboostやGBDTのカテゴリカル変数の扱いやtarget encoding (Likelihood encoding)の話です。GBDTを使う人は一度は見ておくべき内容です。
OsciiArtさん
https://www.slideshare.net/ssuser20fb43/kaggle-tokyo-meetup-4-lightning-talk-2018-data-science-bowl
DSB2018コンペの手法や2 stage制の闇について語って頂きました。Instance SegmentationのコンペはKaggleでDSB2018が初めてだったらしく手法についても今後押さえておくべき内容でした。
flowlightさん
TalkingDataコンペの覇者。以上説明不要!
というのは冗談ですが、動画内でかなり丁寧に手法を説明されているので、ご視聴をオススメします。
データサイズに対してnegative downsamplingと効率的に全列挙の特徴を作って試したことが勝因のようです。
懇親会
そのまま会場で、ビールとピザで懇親会をしました。
ドリンクとフードの手配もGoogle様が手配して頂き、インターン生の手伝いもあり、今までで一番運営していて疲れないmeetupになりました。コレに慣れると後が怖い。。。
飲んでる写真は取りそこねましたが、皆さん積極的に歓談しており自己紹介はなくても大丈夫だったとホッとしました。
さらに卓球などもおいてあり、一部の方は楽しまれていました。
Googleさんのオフィスでおもむろに横にあった卓球をしだす前職の後輩たち#kaggle_tokyo pic.twitter.com/dSpLOKFvld
— Takami Sato (@tkm2261) 2018年5月12日
最後に
今回は参加頂きありがとうございました!
非常に活発な議論でKaggleや仕事にすぐ生きる知見ばかりで開催して本当に良かったです。
当日の皆さんのツイートはこちらでも確認できます。
また、ご支援頂いたGoogle様ありがとうございました。
私も今回は司会に集中できて、つつがなく進行することができました。
個人的にはKaggle meetupはとても運営しやすい勉強会なので、留学してしまう予定ですが、今後も運営に関わって行ければと思います。
勉強会とかってパブリック感と良い内輪感の両立が難しいけど、kaggleの場合master・expert枠で大体会いたい人に会えて、かつ公平感あってとても楽
— Takami Sato (@tkm2261) 2018年5月4日
発表者も上位取った人に声掛けるだけだしリクルーティングも超楽
ゆるく長くやっていけそう
何か質問等あればTwitterかKaggler slackで気軽にお声掛けお願いします。
TalkingDataコンペ11位でした
こんにちは、tkmです。
2018年5月に終わったTolkingDataコンペですが、11位でフィニッシュして一応ゴールドは取れました。
学費を稼ぐことを目指してやってましたが、入賞の壁は大きいですね。。。
talkingdataは学費には届かず、11位フィニッシュでした
— Takami Sato (@tkm2261) 2018年5月8日
とりあえずgoldなのでgrandmasterに一歩近づいた事を喜ぼう
(・∀・) pic.twitter.com/fGF5OHR8vV
一応KaggleのDiscussionにも解法を上げています。
https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/discussion/56250
さらに自分の解法を解説した動画も今回は作っています。なんか最近はブログ書くより動画作るほうが楽になってきてます。w
今回は私より日本人上位者が多いので動画を作るか迷いましたが、Kaggle Youtuberを名乗った以上作る事にしました。
— Takami Sato (@tkm2261) 2018年5月11日
大した事話してませんが、質問等あればなんでもhttps://t.co/ztUyjhmVzi
留学資金を貯めるの関係であとどれだけKaggleに参加できるか分かりませんが、引き続き頑張って行こうと思います(・∀・)
コネなし論文なし英語苦手なアラサーのおっさんだけど米国CS大学院入学に頑張ったので全てを晒す ー GPA編 -
こんにちは、tkmです。
今回は出願時結構混乱したGPA(Grade Point Average)について書いていきます。
米国ではGPAが超大事
米国では卒業するだけじゃなくてGPAを非常に重視します。大学院受験だけじゃなくて就活にも効いてくるので覚醒剤使ってでも勉強しているのはこれのためですね。
大学によってはminumum GPA を設定している場合があるので出願時に注意しましょう。
GPAが成績表に明示されていない大学は要注意
私が卒業した東工大は100点満点で60で単位が貰えるシステムでGPAは導入されていません。
私の学部のGPAは平均をとって84.2/100と記載します。分母がいくつかを右に書きます。
フォームで別に分母を書かせる場合もあるので指示にしたがってください。
GPAは色んな換算式がありますが、変な疑心暗鬼を起こさないために単純平均を使うのが無難です。
UC BerkeleyのようにGPA換算式のスプレッドシートを要求してくる大学もあります。
目次
コネなし論文なし英語苦手なアラサーのおっさんだけど米国CS大学院入学に頑張ったので全てを晒す ー お金編 -
こんにちは、tkmです。
今回は学費および出願にかかる費用について書いていきます。
出願費用
大体で見積もります。
項目 | 単価 | 回数 | 合計 |
---|---|---|---|
TOEFL iBT | $230 | 10回 | $2,300 |
GRE | $205 | 5回 | $1,025 |
出願費用 | $120 | 20校 | $2,400 |
TOEFLスコア送付費用 | $20 | 20校 | $400 |
GREスコア送付費用 | $27 | 20校 | $540 |
合計 | $6,665 |
1ドル107円換算で713,155円となるので。かなり高額ですね。。。
ただかなり多めに見積もっています。
TOEFLやGREは早めにスコアが取れれば受験回数が減らせます。出願校も10校ぐらいにすれば半額です。
お財布と相談して受験戦略を決めましょう。
学費
基本的にPh.D.はお金を貰えるので、学費の心配はありません。
そのため修士の学費について見ていきましょう。
- School of Computer Science (SCS) - Student Financial Services - Division of Enrollment Services - Carnegie Mellon University
- UCI University - Graduate/Credential Student Fees 2017-18
UC Irvineの場合、部屋代が入ってないので+$10,000ぐらいを考えると、440万円vs722万円
州立は安いものの、とても安いとは言えない値段ですね。
Research MasterにはTARAの口が結構あるみたいですが、最低1年ぐらいは学費を払う必要がありそうです。
国立大学の学費が年52万円の日本はホントに良い国ですね。