Slide 1

Slide 1 text

pythonで気軽にパッケージを 作るのは良いという話。 2021/06/18 分析コンペLT会 nyk510

Slide 2

Slide 2 text

Hello! 山口貴大 twitter @nyker_goto atma(アートマ)株式会社 取締役 atmaCupというデータコンペを開催している会社です。 京都大学大学院 最適化数理卒 SGDが好き😆 Kaggle Master kaggle.com/nyk510 2

Slide 3

Slide 3 text

みなさんは、自分でパッケージを 作成したことがありますか? 3

Slide 4

Slide 4 text

意外と無い人が多い? 気がします。 4

Slide 5

Slide 5 text

話は変わりますが… 複数コンペをやると 「前と似たこと、やりたいな」 ってなりますよね 5

Slide 6

Slide 6 text

それ毎回コピペで済ませていませんか? 6

Slide 7

Slide 7 text

そして、 こういう経験はありませんか? 7

Slide 8

Slide 8 text

● 前のプロジェクトの似たような部分をコピペ したけど依存部分があって動かない ● One-Dayコンペで前のコードをコピペしたら バグがでて動かず時間をロスした ● コピペを編集をコピペして…使った結果 なにやってるかよくわからなくなった 8

Slide 9

Slide 9 text

つらいですね… 9

Slide 10

Slide 10 text

悲しい事件をへらすため 自分のパッケージを作りましょう! 10

Slide 11

Slide 11 text

パッケージがあると嬉しいこと ● つよくてニューゲーム ○ 最初からつよい武器がある ○ 特にスタートダッシュが大事な某atmaCupなどで便利 ● 引き継がれること前提の行動を取りやすい ○ 汎用的になりそうな部分を最初から切り分けて実装 → 可読性向上 ○ ドキュメント記述など使いやすさを高めるモチベーションが湧きやすい ● かっこいい ○ pip install おシャイ (感じ方は個人差があります) 11

Slide 12

Slide 12 text

最小構成のパッケージは、意外と簡単 さっくり始めるパッケージ開発 ● パッケージ用のリポジトリを作成 ● setup.py を作成して各種のプロジェクト 情報を記入 ○ setup.py の構成の例 → ● おわり! 12

Slide 13

Slide 13 text

最小構成のパッケージは、意外と簡単 setup.py さえあれば pip install できるしバージョン管理も出来る! ● pip install git+@tag ○ gitのtagでinstallするversionを指定できる ○ tagがないときは最新version(master)でinstallされる 例: pip install git+https://github.com/nyk510/[email protected] これをスタートにして、気が向けばいろいろ追加すればいい ● CI / テストなどなど ● 長ったらしいのは面倒な人は pypi に登録することも出来ます。 13

Slide 14

Slide 14 text

最小限の構成を作ってみました https://github.com/nyk510/my-awesome-package に作りました。 14

Slide 15

Slide 15 text

分析用パッケージは、結構作っている人がいます ● nyanpさん: nyaggle (Code for Kaggle and Offline Competitions) ○ https://github.com/nyanp/nyaggle ● u++さん: ayniy (Ayniy, All You Need is YAML) ○ https://github.com/upura/ayniy ● Ynakatsukaさん: kaggle_utils (My utility scripts for Kaggle Competitions) ○ https://github.com/Ynakatsuka/kaggle_utils 僕も前の分析コンペLT会では自分の分析パッケージのお話をしました。 1

Slide 16

Slide 16 text

ふむふむ、 2

Slide 17

Slide 17 text

あれ、もうあるなら なぜいまさら自分でパッケージを作るの? 3

Slide 18

Slide 18 text

すごい人が作ってる奴があるし、 自分で作らなくても十分じゃない? 車輪の再発明っていうやつだ! 4

Slide 19

Slide 19 text

再発明をやってみてわかった、よいこと 1. 機械学習を抽象化して考えられる 2. 抽象化の失敗の体験をできる 3. 一般的な開発に必要なものの必要性がわかる 4. 機械学習以外でも使える 5

Slide 20

Slide 20 text

機械学習を抽象化して考える 私のコードは何をしているのか、を改めて考えられる ● ただ個別の事案をコピーするだけではパッケージには成り得ない ● 共通部分は何か・個別の事案への対応性・拡張性はあるか etc… 全部0から考える必要はないし、答えはない ● 人のパッケージ構造を読んでいいところを考えるのもコードを理解する力がつく ● 自分なりの答えを出して実装することで思考・実装力がつく ● atmaCupで僕が多用する BaseBlock とかもその一つ 6

Slide 21

Slide 21 text

抽象化を失敗する体験ができる 抽象化は、失敗する。 ● 直したい処理を直せず結局パッケージの該当部分全部コピペして修正する 失敗は成功の母 ● 失敗すること自体はそんなに悪いことでもない(と思う) ● どの構造の仮定がまずかったのかを考えて手直しする → 論理構造を考える訓練になる ● 人はどうやってるのか調べる → 人のコード・抽象化理解の訓練になる ● 壊れてから初めてデザインパターン等の有り難みを知れる 7

Slide 22

Slide 22 text

一般的な開発周りの体験ができる / テスト 書き方がわからない? 最初から書けなくっても大丈夫! ● 先人のリポジトリを参考にして、コピーしつつ。無理ないところから。 テストコードを書くようになると有り難みを感じられる ● テストで確認されたコード群のみを持っていけるのはとても安心 ● 分析当日にバグ見つけた!が減る 残念ながらテストを書いたって、バグはある ● テストの何がまずかったか、振り返ることができる ● 自分の思考の何がまずかったのか考えるきっかけになる https://github.com/nyk510/vivid/pull/47/files: numpy.inf が None 扱いにならないこと起因のバグ 8

Slide 23

Slide 23 text

一般的な開発周りの体験ができる / CI 人は怠惰 ● テスト手動でするのだるい: master merge するときに自動でテストしたい ● pypi upload だるい: バージョンを作成したら自動的に pypi へ登録したい 自ずとCIが欲しくなる ● CIツールの使い方を学習するきっかけになる ● CIでのテストでバグが見つかるとえもいわれぬ快感がある(個人差があります) 書き方がわからない? 最初から書けなくっても大丈夫! ● そもそも別になくても困りはしない(ちょっと面倒なだけ) ● 必要だと思ったら先人のリポジトリを参考にして、無理ないところから。 9

Slide 24

Slide 24 text

機械学習以外でも使える 機械学習以外のプロジェクトでもパッケージをつかえると便利なことは多いです ● web application の共通部分管理 ○ 機械学習のツール ○ Djangoでよく出てくる処理の管理 ● CLI ツールの作成 ○ guruguru cli ● などなど 10

Slide 25

Slide 25 text

まとめ! パッケージ開発は、共通部分の管理以外にも、良いことがいっぱいあります。 さっくり始めるのは、意外と簡単です。 みなさん、気軽に自分のパッケージを作ってみるのは如何でしょうか。 11

Slide 26

Slide 26 text

さいごにおしらせ 12

Slide 27

Slide 27 text

直近atmaCupやります! 詳細決まり次第connpassで告知します ;) 13

Slide 28

Slide 28 text

EOC 14