Upgrade to Pro — share decks privately, control downloads, hide ads and more …

pythonで気軽にパッケージを作るのは良いという話。

 pythonで気軽にパッケージを作るのは良いという話。

2021/06/18 分析コンペLT会#2 での発表資料です。

C4c6c7b4fdf9285bcf12c5caa58c8d53?s=128

Yamaguchi Takahiro

June 18, 2021
Tweet

Transcript

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

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

    Kaggle Master kaggle.com/nyk510 2
  3. みなさんは、自分でパッケージを 作成したことがありますか? 3

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

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

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

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

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

  9. つらいですね… 9

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

  11. パッケージがあると嬉しいこと • つよくてニューゲーム ◦ 最初からつよい武器がある ◦ 特にスタートダッシュが大事な某atmaCupなどで便利 • 引き継がれること前提の行動を取りやすい ◦

    汎用的になりそうな部分を最初から切り分けて実装 → 可読性向上 ◦ ドキュメント記述など使いやすさを高めるモチベーションが湧きやすい • かっこいい ◦ pip install おシャイ (感じ方は個人差があります) 11
  12. 最小構成のパッケージは、意外と簡単 さっくり始めるパッケージ開発 • パッケージ用のリポジトリを作成 • setup.py を作成して各種のプロジェクト 情報を記入 ◦ setup.py

    の構成の例 → • おわり! 12
  13. 最小構成のパッケージは、意外と簡単 setup.py さえあれば pip install できるしバージョン管理も出来る! • pip install git+<repo-url>@tag

    ◦ gitのtagでinstallするversionを指定できる ◦ tagがないときは最新version(master)でinstallされる 例: pip install git+https://github.com/nyk510/my-awesome-package@v0.510 これをスタートにして、気が向けばいろいろ追加すればいい • CI / テストなどなど • 長ったらしいのは面倒な人は pypi に登録することも出来ます。 13
  14. 最小限の構成を作ってみました https://github.com/nyk510/my-awesome-package に作りました。 14

  15. 分析用パッケージは、結構作っている人がいます • 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
  16. ふむふむ、 2

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

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

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

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

    • 自分なりの答えを出して実装することで思考・実装力がつく • atmaCupで僕が多用する BaseBlock とかもその一つ 6
  21. 抽象化を失敗する体験ができる 抽象化は、失敗する。 • 直したい処理を直せず結局パッケージの該当部分全部コピペして修正する 失敗は成功の母 • 失敗すること自体はそんなに悪いことでもない(と思う) • どの構造の仮定がまずかったのかを考えて手直しする →

    論理構造を考える訓練になる • 人はどうやってるのか調べる → 人のコード・抽象化理解の訓練になる • 壊れてから初めてデザインパターン等の有り難みを知れる 7
  22. 一般的な開発周りの体験ができる / テスト 書き方がわからない? 最初から書けなくっても大丈夫! • 先人のリポジトリを参考にして、コピーしつつ。無理ないところから。 テストコードを書くようになると有り難みを感じられる • テストで確認されたコード群のみを持っていけるのはとても安心

    • 分析当日にバグ見つけた!が減る 残念ながらテストを書いたって、バグはある • テストの何がまずかったか、振り返ることができる • 自分の思考の何がまずかったのか考えるきっかけになる https://github.com/nyk510/vivid/pull/47/files: numpy.inf が None 扱いにならないこと起因のバグ 8
  23. 一般的な開発周りの体験ができる / CI 人は怠惰 • テスト手動でするのだるい: master merge するときに自動でテストしたい •

    pypi upload だるい: バージョンを作成したら自動的に pypi へ登録したい 自ずとCIが欲しくなる • CIツールの使い方を学習するきっかけになる • CIでのテストでバグが見つかるとえもいわれぬ快感がある(個人差があります) 書き方がわからない? 最初から書けなくっても大丈夫! • そもそも別になくても困りはしない(ちょっと面倒なだけ) • 必要だと思ったら先人のリポジトリを参考にして、無理ないところから。 9
  24. 機械学習以外でも使える 機械学習以外のプロジェクトでもパッケージをつかえると便利なことは多いです • web application の共通部分管理 ◦ 機械学習のツール ◦ Djangoでよく出てくる処理の管理

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

  26. さいごにおしらせ 12

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

  28. EOC 14