2018年、たいへんお世話になりました。
大晦日なので実家に帰っています。あまり酒を嗜んだりはしない両親とシャンパンを飲み、話しているうちにこんな時間になってしまいました。
帰省する前は「親と話すことなんてそんなに多くはないよなぁ」と思っていましたが、24歳になって昔(中高時代など)を振り返っているうちに「あの頃自分はこう思っていたんだ。親のことをこう見ていたんだ」と伝えたくなりました。
父方、母方の祖母がともに今年亡くなったこともあり、残った人生を謳歌しようとしている両親を見ていると考えさせられるものがあります。
さて。本年を振り返ってみますと、良くも悪くも技術漬けの毎日であったように思います。
プログラミング言語としてはPython、C++、Golang、Rustあたりをちょいちょいと触っていましたし、要素技術としては機械学習、特にKaggleに多く触れた一年でした(研究をしろ)。
今年のKaggle戦績は銀2枚銅1枚で、それなりにコミットしたコンペでそれなりの結果を残したということに終止するかと思います。来年は金ピカのメダルとお金を狙っていきたいですね。DeNAは強い人ばかりなので、入社前にMasterになりたいという欲求が強いです。
競技プログラミングは結局水色でフィニッシュしてしまいました。特に終盤でRatedのコンテストに全然出られなかったのが足を引っ張ったかと思います。来年は予定の調整を頑張っていきたいです。
プログラミングまわりで少し頑張ったのは、9/21から毎日草を生やしたということでしょうか。もちろん途中にはすごくしょうもないコミットが挟まっていて、「手段の目的化」という言葉が頭をよぎらないわけではないですが、どんな日でも毎日PCを開いてコードを書くという習慣付けが行えたことは価値があることだと思っています。
ブログは自分としてはがんばって書きました。このブログは今年の4月に開設しましたが、現在読者数が47人になり、ちらほらと読んでいただけているようです。切りの良い数字を目指したいので、年末やることがなくてこの記事を読んでいる方は読者登録ボタンをぽちりと押して頂けると幸いです。来年は月1回以上書くという超低い目標を設定してやっていきたいと思います。金メダル取りました!って記事が書けるといいですね。
年末っぽいコンテンツとしては、Amazonの購入履歴などを見ながら今年買って(契約して)よかったものを挙げておきましょう。順番は思いついた順です。
- Google Home
- 声で指示するのが予想以上にストレスフリーだった。主に使用している機能はNature Remoと組み合わせた家電の制御と、目覚まし。あとは天気予報。今はAmazonで売ってないっぽいです。
- Netflix
- 月額1000円以下で無限にコンテンツがあってしまうので学生にはおすすめできない。
- アイリスオーヤマのふとん乾燥機
- 睡眠時のQOLが爆上がりする。知らない間に汗を吸って重たくなっていた布団が軽くなる。最高。
- ラムダッシュの5枚刃のやつ
- 今まで3枚刃を使っていたけど完全に時間の無駄だった。仕上がりのクオリティとかかる時間が格段に違う。クリスマスプレゼントでもらった。
- Dashlane
- パスワードを覚えたり、手入力したりという手間から開放された。1年契約した。
- Happy Hacking KeyBoard BT
- タイプ感がすごく良い。MBPと組み合わせた際の優雅さを犠牲に満足感を得る感じ。彼女にもプレゼントした。
- ダンボールをお手軽にゴミに出すやつ
- Kyash
- VISAカードとして使えるウォレットアプリ。手軽に送金が行えてユーザー体験が良いです。ユーザーが増えてくれると嬉しいです。
来年の目標の話をしましょう。
すでに上のほうでだいぶ書いてしまっていますが、まずは金メダルがほしいですね。修論をサクッと片付けてコミットしていきたいです。長期的な視野で行くと、キャリアについての考え方を固めていきたいです。自分の好みはユーザーの顔が想像できる所で施策を考えたり分析をしたりするところにあるのですが、それがどういう仕事になり、どういう場所で生きていくのかについて考えていきたいです。
4月から生活が大きく変わるので、早いうちに順応したいものです。いろいろな兼ね合いもあって修論時期と引っ越し先を探す時期と諸々がかぶってなかなか大変になりそうです。
いつもの通り、Amazon欲しいものリストがこちらです。新生活を控えた3月ごろになると生々しいリストになっているかと思いますが、今はかわいいもんです。
ついでにKyashのバーコードがこちらです。
手軽に投銭できるので、ぜひ僕で試してみてください。
それではみなさま、2018年は大変お世話になりました。2019年もどうぞよろしくお願いいたします。
間に合った!
コピペで使える。Kaggleでの実験を効率化する小技まとめ
この記事はKaggle Advent Calendar 2018の20日目の記事です。当初の予定ではPLAsTiCCコンペの振り返りをするはずだったのですが、時空の狭間に吸い込まれた結果0サブミットでフィニッシュしてしまいました。何ででしょうね。 そこで、代わりにKaggleで使える便利なスニペットまとめを書くことにします。
ちなみにもうひとネタあったのでいつか書きたいですが、修論があるのでいったん見送り……
- LINEに通知を送る
- 処理にかかる時間を計測する
- LightGBMの学習結果をログに出す
- Google Spreadsheetに結果を記録する
- Notebook上でライブラリを毎回再読込する
- DataFrameのメモリを節約する
- まとめ
LINEに通知を送る
「思考は止めてもサーバーは止めるな」とはkaggler-jaの管理者であるtkmさんの名言です。サーバーを止めないためには正常・異常問わず計算終了時に通知を送ることが重要です。
import requests def send_line_notification(message): line_token = 'YOUR_LINE_TOKEN' # 終わったら無効化する endpoint = 'https://notify-api.line.me/api/notify' message = "\n{}".format(message) payload = {'message': message} headers = {'Authorization': 'Bearer {}'.format(line_token)} requests.post(endpoint, data=payload, headers=headers)
- https://notify-bot.line.me/my/ からパーソナルアクセストークンを発行する
- 発行したアクセストークンを
YOUR_ACCESS_TOKEN
に入れる
これでLINE通知を送ることができます。アクセストークンはコンペが終わったら無効化すれば、GitHubにコードをそのままpushしても大丈夫です。
副作用として、計算が終了したことがわかってしまうというものがあります。
続きを読む2018年11月を振り返ってみる
先月に引き続き11月の振り返りをやっていきます。
やったこと
毎日GitHubに草を生やした
先月に引き続き毎日草を生やせました。
授業のTAの一環で簡単なコンペを開催するツールを作った(公開準備中)
授業のTAやる過程で小規模データ分析コンペを開催するWebアプリができた。ちょっと機能足したら勉強会用途とかには使えるんじゃないかな pic.twitter.com/d9eeK20yWM
— えじ|amaotone (@SakuEji) 2018年11月8日
KaggleのInClassコンペのように、限られた人だけが参加するデータ分析コンペを簡単に作れるソフトウェアを書きました。
取り回しに若干バギーなところ(サブミットがAPIを直に叩かないとできないとか)が残っているので、それを直して公開に持っていきたいです。
ロジックはFlaskで書いていて、フロントエンドはBulmaを使っています。
ちゃちゃっと作ったWebアプリでbulmaっていうWebフレームワーク使ったけど、すごくよかった。機能は必要最低限だけど欲しいと思ったものは大抵ある。レスポンシブ制御のために複雑な記法を強いられることもない。そして何よりドキュメントがきれい。次からの初手はこれだなぁhttps://t.co/6roYvO2HbP
— えじ|amaotone (@SakuEji) 2018年11月7日
HHKBデビューした
HHKBデビューします!
— えじ|amaotone (@SakuEji) 2018年11月9日
イキリ散らかした結果US無刻印だけど大丈夫だろうか…… pic.twitter.com/fHQst9RnB3
HHKB BTのUS配列無刻印バージョンを買いました。超かっこいいです。
研究室で使っているキーボードはRealforceで、あのぬるぬるした打鍵感も嫌いじゃないですが、HHKBのシュコシュコ感はなかなか癖になります。けっこうおすすめです。
JIS→USの移行は1週間ぐらい大変な苦痛を伴いましたが、今では慣れました。無刻印はそんなに違和感なく使うことができています。 そもそもキーボード見ながらタイピングしているわけじゃないし、他の人にキーボード貸すわけでもないので、違和感なく使えるのは当たり前といえば当たり前です。
キーボード買ったことによる副次的な効果として、他人のキーボードを観察するようになりました。HHKBユーザーを見つけると勝手に親近感を感じています。
PFU Happy Hacking Keyboard Professional BT 無刻印/墨 PD-KB600BN
- 出版社/メーカー: PFU
- 発売日: 2016/04/12
- メディア: Personal Computers
- この商品を含むブログ (1件) を見る
(ちなみに彼女へのクリスマスプレゼントもこれになりました)
統計検定
終わった
AppBrewでバイト
コスメの口コミアプリLIPSを開発している株式会社AppBrewで週2〜3くらいのペースで働いています。 データ分析周りのこまごました処理を主に行っています。
AppBrewはデータの民主化をがんばっていて、エンジニアじゃない人もSQLが叩けるのが好印象です。
面白かった記事
- 副業で作り始めたwebサービスの1年を振り返る - ニートの言葉
- 副業でWebサービスを完成させるのってすごく難しいと思っていて、その道筋が明らかにされているのはすごく価値のあることだと思います。
- 個人開発のモチベーションが続かない、作り終わらない。原因と対策を考えてみた。 - フロントエンドの地獄
- 耳が痛い……
- コンペアプリは11月中旬くらいに公開するはずだったけど、粗が気になって手直し中。一生手直しにならないようにがんばります
- デザイナーと働くなら知っておきたい4タイプのデザイナー像 | ベイジの社長ブログ
- これってデザイナーに限った話ではなくて、プログラマなど他の職業についても言えることですね
- 自分がどういう環境で生産性が上がるのか、どういう人と一緒に動くと良いのかが分かることは結構大事ですね
- 「国民性は小学校の教室から作られている」5カ国の小学校を渡り歩いた女性が語る日本の可能性とは? (1/5) 〈dot.〉|AERA dot. (アエラドット)
- この記事では教室の机の配置などからその国の文化が大切にしていることが読み取れると主張しています。
- こういう面白い切り口の文章が書けるようになりたい
- 6年勤めたNTTを退職しました - Software Transactional Memo
買った本
今月はあまり本を買っていないことにいま気がついた。
- 作者: 佐倉色
- 出版社/メーカー: 飛鳥新社
- 発売日: 2017/06/09
- メディア: Kindle版
- この商品を含むブログ (1件) を見る
イノベーション・オブ・ライフ ハーバード・ビジネススクールを巣立つ君たちへ
- 作者: クレイトン・M・クリステンセン,ジェームズ・アルワース,カレン・ディロン,櫻井祐子
- 出版社/メーカー: 翔泳社
- 発売日: 2012/12/07
- メディア: 単行本
- 購入: 9人 クリック: 51回
- この商品を含むブログ (21件) を見る
- 作者: 末次由紀
- 出版社/メーカー: 講談社
- 発売日: 2018/11/13
- メディア: コミック
- この商品を含むブログを見る
12月に向けて
修論をそろそろ書いていかないとまずいような気がしています。
LightGBMのcallbackを利用して学習履歴をロガー経由で出力する
KaggleなどでLightGBMを使っていて学習履歴を見たとき、ログファイルにも残してほしいと思うことがあります。
公式にはそのような機能は実装されていないようなので、LightGBMのコールバックで対応したいと思います。
LightGBMではfit
メソッドの引数としてコールバック関数を渡すことができ、内部的にはEarlyStoppingや学習履歴を標準出力に吐くのに使われています。
LightGBMのコールバックを実装
lightgbm/callback.pyを見ると、学習時に標準出力に履歴を表示する関数があります。
def print_evaluation(period=1, show_stdv=True): """Create a callback that prints the evaluation results. Parameters ---------- period : int, optional (default=1) The period to print the evaluation results. show_stdv : bool, optional (default=True) Whether to show stdv (if provided). Returns ------- callback : function The callback that prints the evaluation results every ``period`` iteration(s). """ def _callback(env): if period > 0 and env.evaluation_result_list and (env.iteration + 1) % period == 0: result = '\t'.join([_format_eval_result(x, show_stdv) for x in env.evaluation_result_list]) print('[%d]\t%s' % (env.iteration + 1, result)) _callback.order = 10 return _callback
これをベースにしてカスタマイズしてあげればよさそうです。
実装例は以下のとおりです。基本的にはprint_evaluation
と一緒で、logging.Logger
とログレベルを新たに受け取れるようにしてあります。
import logging from lightgbm.callback import _format_eval_result def log_evaluation(logger, period=1, show_stdv=True, level=logging.DEBUG): def _callback(env): if period > 0 and env.evaluation_result_list and (env.iteration + 1) % period == 0: result = '\t'.join([_format_eval_result(x, show_stdv) for x in env.evaluation_result_list]) logger.log(level, '[{}]\t{}'.format(env.iteration+1, result)) _callback.order = 10 return _callback
使い方
ロガーを予め作成しておいて log_evaluation
の引数に渡してあげれば動くはずです。
# ロガーの作成 logger = logging.getLogger('main') logger.setLevel(logging.DEBUG) sc = logging.StreamHandler() logger.addHandler(sc) fh = logging.FileHandler('hoge.log') logger.addHandler(fh) # データのロードなどは省略 # 訓練時にコールバックのリストを渡す clf = lgb.LGBMClassifier() callbacks = [log_evaluation(logger, period=10)] clf.fit(X_train, y_train, eval_set=[(X_val, y_val)], callbacks=callbacks)
LightGBMのコールバックの実装方法
コールバック関数のリストをfit()
時のcallbacks
引数に渡してあげるとコールバックが呼ばれます。
コールバック関数は引数をひとつ取る必要があります。その引数には以下のように学習状況などが入ったnamedtupleが渡されます。
namedtuple( "LightGBMCallbackEnv", ["model", "params", "iteration", "begin_iteration", "end_iteration", "evaluation_result_list"])
例えば env.iteration
のようにすれば現在のイテレーション数が取れます。(0始まりなので+1するのが良いと思います)
コールバック関数にパラメータを設定したい場合は今回のようにクロージャ(関数を返す関数)にしてあげると良いです。
まとめ
- LightGBMのコールバックを作成すると学習履歴をロガーに渡すことができる
- lightgbm/callback.pyはシンプルなので読んでみるとよい
お役立ちリンク
2018年10月を振り返ってみる
最近、Dynalistというサービスを使ってやったことをメモしていました。それを元に今月を振り返りをやっていきます。
やったこと
毎日GitHubに草をはやした
前半はGoのツールで、後半はPLAsTiCCコンペでコミットを稼いだ。 苦し紛れでAtCoderの適当な問題を埋めてたりするけど、個人的には結構がんばったつもり。
Goで簡単なCLIツールを書いた
まとまった単位でコードを書いていかないといつまで経っても書けるようにならないという知見を得た。
初めて勉強会でLTした
勉強会駆動開発というのをしてみた。だいたい1週間くらいで発表のネタを作って、ぱぱっとconnpassで登録した。何事も飛び込んでみるもんだ。
面白かった記事
- インターネットビジネスに欠かせない「広告ビジネスの本質」とは
- ビジネスモデルのメタ的な捉え方がおもしろい
- Web広告と同時に「実績を売る」という考え方が生まれた
- 現代は可処分時間の奪い合いと見ることができる
- 入社8ヵ月で管理職になった僕が半年かけて断行した会社改革を全部話す。 - Everything you've ever Dreamed
- 改革時に出てくる反論は数字で破壊する
- ひとりよがりなプロダクトじゃなくて、ユーザーが必要としているものを提供することが大事
- みんな日本語の学術言語としての重要性を軽く評価しすぎ
- 理系にいると、英語論文じゃないとかゴミだろ、みたいな価値観になりがち
- 自分の知らないフィールドについて、その文化と慣習を尊重する姿勢が大事
- 大炎上プロジェクトを立て直した話をする。(輝井永澄) - カクヨム
- ソシャゲの会社のプロジェクトが炎上してる話。妙にリアルで面白い
- https://mobile.twitter.com/fujitahajime/status/1035407785733763072/photo/4
- 研究の進捗などを人に説明するときに使うテンプレート
- 俳句や短歌、最近だとTwitterなんかがわかりやすいけど、制約をかけたほうがスムーズにアウトプットできるのは間違いない
買った本
結構本を買った。前半が技術書で、後半がその他。
今月のコンセプトは「わかったつもりになったものを、体系的に学び直す」みたいな感じ。 Webから仕入れた知識だとどうしても断片的になってしまう。わかったつもりになってる内容でも、書籍で体系的に学び直すと新たな気付きがあって良い。
技術書
- 作者: 山田明憲
- 出版社/メーカー: 技術評論社
- 発売日: 2018/08/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
- Kubernetesに入ったところまで読んだ
- 最近KaggleでDocker使っていて大変はかどっている
- ハンズオンのような進め方で、進み方自体にも違和感がなくて良い
- 作者: Steven Bird,Ewan Klein,Edward Loper,萩原正人,中山敬広,水野貴明
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/11/11
- メディア: 大型本
- 購入: 20人 クリック: 639回
- この商品を含むブログ (44件) を見る
- 前半を読み終わった時点で途中を飛ばし、日本語に対する自然言語処理について読んだ
- 作者: 川口和也,喜多啓介,野田陽平,手島拓也,片山真也
- 出版社/メーカー: 技術評論社
- 発売日: 2018/09/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
ゼロから作るDeep Learning ? ―自然言語処理編
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2018/07/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
- 積んでいる
技術同人誌を書こう! アウトプットのススメ (技術書典シリーズ(NextPublishing))
- 作者: 親方Project
- 出版社/メーカー: インプレスR&D
- 発売日: 2018/04/13
- メディア: オンデマンド (ペーパーバック)
- この商品を含むブログ (1件) を見る
- アウトプットの機運が高まって買った
- 技術書展出たい
- 予想以上に実践的な内容。同人誌の表紙はどうつくるか、サークルの登録はどうするか、締切の設定方法、とかが書いてあったりする。
その他
なんか研究室のノリで統計検定1級を受けることになったが、全然できなくて絶望している。
- 作者: 稲垣宣生
- 出版社/メーカー: 裳華房
- 発売日: 2003/02/25
- メディア: 単行本
- 購入: 2人 クリック: 14回
- この商品を含むブログ (10件) を見る
日本統計学会公式認定 統計検定 1級・準1級 公式問題集[2016〜2017年]
- 作者: 日本統計学会
- 出版社/メーカー: 実務教育出版
- 発売日: 2018/03/14
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
響~小説家になる方法~ (10) (BIG COMIC SUPERIOR)
- 作者: 柳本光晴
- 出版社/メーカー: 小学館
- 発売日: 2018/08/30
- メディア: コミック
- この商品を含むブログ (2件) を見る
- 作者: 猪ノ谷言葉
- 出版社/メーカー: 講談社
- 発売日: 2018/10/17
- メディア: Kindle版
- この商品を含むブログを見る
欲しい本
- 作者: Katherine Cox-Buday,山口能迪
- 出版社/メーカー: オライリージャパン
- 発売日: 2018/10/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
- 作者: Csaba Szepesvari,小山田創哲,前田新一,小山雅典,池田春之介,大渡勝己,芝慎太朗,関根嵩之,高山晃一,田中一樹,西村直樹,藤田康博,望月駿一
- 出版社/メーカー: 共立出版
- 発売日: 2017/09/21
- メディア: 単行本
- この商品を含むブログを見る
なんと、ここに私の欲しいものリストがあります。
使い始めたツール・サービス
- Kindle Unlimited
- かゆいところには全く手が届かないラインナップ
- 読みたい本はだいたい読んだので、しばらくしたら退会するつもり
- Dynalist
- アウトライナー
- 無料、デザインがきれい、取り回しに違和感がない、の三拍子
- ブログの下書きとか、思考の整理とかに使う。この記事の下書きもDynalist
- Boostnoteから乗り換え
- エクスポートが柔軟にできると嬉しいなー
最近意識していること
- ドキュメント駆動開発
- 闇雲にコードを書くのではなく、先にドキュメントを書いてそれに沿って開発をすすめる
- やるべきタスクがクリアになるので効率が上がる
- これに限らず、自分が今何をすべきかを意識することの大切さを知った
11月に向けて
あたりを頑張りたいと思います。
Goあんこ4kgでLTしました
知らない人にはGoあんこってなんだよって話だと思いますが。
GoあんことはGo(Un)Conferenceの略で、Go言語のゆるふわLT会のことです。4kgは4回目って意味です。かわいい。
発表資料はこちらです。
主催者は@deadcheatさんと@syossan27さんのおふたりで、株式会社アイスタイル(@cosmeを作ってる会社)で開催されました。 久しぶりにギロッポン行きましたけど、ギロッポンってなんか「ビジネスーーーーッ! オラオラオラーーーッ」みたいな雰囲気して近寄りがたくないですか?
他の登壇者はみなさん業務でバリバリGoを使ってらっしゃるようで、僕はハードル下げる枠でした。初心者歓迎ゆるふわLT会たらしめる役目は果たしたと思います。
発表の要点をかいつまんで書くと、
- 新しい言語を勉強した人は「本当になんでもいいから」アウトプットしよう
- Goを使うと最初のハードルがほんとに低いのでおすすめ
- LTの予定を入れて勉強会駆動開発しよう
の3点です。
プログラミング言語って本やチュートリアルで勉強しただけだと全く身につかなくて、何かに使って初めて身につくものですよね。 でも、初心者はこう考えてしまいます。 「作れるものはたかが知れてるし、ツールを実装しようにもアイディアがないし」 そんなことを言ってるうちにせっかく勉強した言語は忘れてしまうでしょう。
そこで「全く役に立たないツールを作ろう」と発想を転換すると、あら不思議。ツールのアイディアが湧いてきます。 ぱぱっと作ってぱぱっとLTしちゃいましょう。
みたいな話をしました。
僕みたいなにわかGopherが会場にも隠れキリシタンのようにいらっしゃったでしょうし、「Goあんこ行ってみたいけど……」みたいにslideshareを眺めてる方もいらっしゃると思います。そんな方々に届いてほしいLTでした。
聴衆のみなさまもあたたかく、とても良い勉強会でした。また参加したいと思います。
次回は「Goで始めるシステムトレード」みたいなタイトルで発表できたら良いな、なんて考えています。
以下は面白かった発表です。資料がアップロードされたら詳細を追記します。
- 「自宅サーバーを実現するためにwanpollをつくった話」 @kawasin73 さん
- 「複雑になってきたCLIコマンドをちゃんとテストする」@LightTiger2505 さん
- 「Wrap(err) in production」 @izumin5210 さん
もらったフェルトのGopherくん。
かわいい #gounco #golang pic.twitter.com/3J8qHy5ozY
— えじ|amaotone (@SakuEji) 2018年10月19日
Golangでどうでもいい知識を教えてくれるCLIツールを作った
最近ghqの作者@motemenさんのインタビューや pecoの作者@lestrratさんのインタビューを読んでいてCLIツールを作りたい欲がむらむらと湧いていました。
@motemenさんのインタビューによると、普段から「これ不便だな。ツールにならないかな」とアンテナを貼っていることがツール作成においては大事だそうです。これを読んで僕もアンテナ高くしようと思った次第なのですが、思ってすぐに役に立つツールのアイデアが湧いてきたら苦労しないわけでして。
今回はCLIツールを作る練習として、「そんなに役には立たないけど、面白い」みたいなツールを作ってみました。 成果物はこちらです。
trivia
コマンドを打つとWikipediaからランダムに単語を引っ張ってきて説明をしてくれます。日本語版Wikipediaを検索してるのにカウ高校とパハラ小学校(ハワイの学校)とか出てきて結構面白いです。
使う言語は勉強も兼ねてGolangを選択しました。
go get
で簡単にインストールできるので配布もしやすいですし、何より書いててちょっと楽しいです。
インストールは
$ go get -u github.com/amaotone/trivia
でOKです。デフォルトの言語設定が(ちょっとイキった結果)英語になっているので、
$ trivia set -l ja
で日本語に変えて
$ trivia
でどうでもいい知識を教えてくれます。
続きを読む