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

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

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

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

Yamaguchi Takahiro

June 18, 2021
Tweet

More Decks by Yamaguchi Takahiro

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  9. つらいですね…
    9

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  16. ふむふむ、
    2

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. さいごにおしらせ
    12

    View Slide

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

    View Slide

  28. EOC
    14

    View Slide