Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
pythonで気軽にパッケージを作るのは良いという話。
Search
Yamaguchi Takahiro
June 18, 2021
Technology
14
9.6k
pythonで気軽にパッケージを作るのは良いという話。
2021/06/18 分析コンペLT会#2 での発表資料です。
Yamaguchi Takahiro
June 18, 2021
Tweet
Share
More Decks by Yamaguchi Takahiro
See All by Yamaguchi Takahiro
コンペを気楽に開催しよーぜ!@関西Kaggler会
nyk510
0
1.3k
Django のセキュリティリリースを見る
nyk510
0
91
3分でMLアプリを作る 〜推論コードにちょっとのStreamlitを添えて〜
nyk510
1
1.1k
硬派で真面目なグラフを描く
nyk510
0
510
CORSをちゃんと理解する atmaバックエンド勉強会#4
nyk510
0
400
RestAPIのページネーション atma バックエンド勉強会 #3
nyk510
1
960
AWS CPU Credit を完全に理解する
nyk510
0
450
atmaCup#8 Opening
nyk510
0
260
オンサイトデータコンペの魅力: 関わる全員が楽しいコンペ設計のための取り組み
nyk510
3
5.4k
Other Decks in Technology
See All in Technology
無理しない AI 活用サービス / #jazug
koudaiii
0
110
三視点LLMによる複数観点レビュー
mhlyc
0
260
20250719_JAWS_kobe
takuyay0ne
1
140
ロールが細分化された組織でSREは何をするか?
tgidgd
1
470
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.2k
The Madness of Multiple Gemini CLIs Developing Simultaneously with Jujutsu
gunta
1
1.5k
P2P通信の標準化 WebRTCを知ろう
faithandbrave
6
1.9k
機械学習を「社会実装」するということ 2025年夏版 / Social Implementation of Machine Learning July 2025 Version
moepy_stats
1
220
セキュアなAI活用のためのLiteLLMの可能性
tk3fftk
1
540
PHPでResult型やってみよう
higaki_program
0
170
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
13k
データエンジニアリング 4年前と変わったこと、 4年前と変わらないこと
tanakarian
1
320
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
54
11k
A better future with KSS
kneath
238
17k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
How GitHub (no longer) Works
holman
314
140k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Side Projects
sachag
455
43k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.5k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Transcript
pythonで気軽にパッケージを 作るのは良いという話。 2021/06/18 分析コンペLT会 nyk510
Hello! 山口貴大 twitter @nyker_goto atma(アートマ)株式会社 取締役 atmaCupというデータコンペを開催している会社です。 京都大学大学院 最適化数理卒 SGDが好き😆
Kaggle Master kaggle.com/nyk510 2
みなさんは、自分でパッケージを 作成したことがありますか? 3
意外と無い人が多い? 気がします。 4
話は変わりますが… 複数コンペをやると 「前と似たこと、やりたいな」 ってなりますよね 5
それ毎回コピペで済ませていませんか? 6
そして、 こういう経験はありませんか? 7
• 前のプロジェクトの似たような部分をコピペ したけど依存部分があって動かない • One-Dayコンペで前のコードをコピペしたら バグがでて動かず時間をロスした • コピペを編集をコピペして…使った結果 なにやってるかよくわからなくなった 8
つらいですね… 9
悲しい事件をへらすため 自分のパッケージを作りましょう! 10
パッケージがあると嬉しいこと • つよくてニューゲーム ◦ 最初からつよい武器がある ◦ 特にスタートダッシュが大事な某atmaCupなどで便利 • 引き継がれること前提の行動を取りやすい ◦
汎用的になりそうな部分を最初から切り分けて実装 → 可読性向上 ◦ ドキュメント記述など使いやすさを高めるモチベーションが湧きやすい • かっこいい ◦ pip install おシャイ (感じ方は個人差があります) 11
最小構成のパッケージは、意外と簡単 さっくり始めるパッケージ開発 • パッケージ用のリポジトリを作成 • setup.py を作成して各種のプロジェクト 情報を記入 ◦ setup.py
の構成の例 → • おわり! 12
最小構成のパッケージは、意外と簡単 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/
[email protected]
これをスタートにして、気が向けばいろいろ追加すればいい • CI / テストなどなど • 長ったらしいのは面倒な人は pypi に登録することも出来ます。 13
最小限の構成を作ってみました https://github.com/nyk510/my-awesome-package に作りました。 14
分析用パッケージは、結構作っている人がいます • 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
ふむふむ、 2
あれ、もうあるなら なぜいまさら自分でパッケージを作るの? 3
すごい人が作ってる奴があるし、 自分で作らなくても十分じゃない? 車輪の再発明っていうやつだ! 4
再発明をやってみてわかった、よいこと 1. 機械学習を抽象化して考えられる 2. 抽象化の失敗の体験をできる 3. 一般的な開発に必要なものの必要性がわかる 4. 機械学習以外でも使える 5
機械学習を抽象化して考える 私のコードは何をしているのか、を改めて考えられる • ただ個別の事案をコピーするだけではパッケージには成り得ない • 共通部分は何か・個別の事案への対応性・拡張性はあるか etc… 全部0から考える必要はないし、答えはない • 人のパッケージ構造を読んでいいところを考えるのもコードを理解する力がつく
• 自分なりの答えを出して実装することで思考・実装力がつく • atmaCupで僕が多用する BaseBlock とかもその一つ 6
抽象化を失敗する体験ができる 抽象化は、失敗する。 • 直したい処理を直せず結局パッケージの該当部分全部コピペして修正する 失敗は成功の母 • 失敗すること自体はそんなに悪いことでもない(と思う) • どの構造の仮定がまずかったのかを考えて手直しする →
論理構造を考える訓練になる • 人はどうやってるのか調べる → 人のコード・抽象化理解の訓練になる • 壊れてから初めてデザインパターン等の有り難みを知れる 7
一般的な開発周りの体験ができる / テスト 書き方がわからない? 最初から書けなくっても大丈夫! • 先人のリポジトリを参考にして、コピーしつつ。無理ないところから。 テストコードを書くようになると有り難みを感じられる • テストで確認されたコード群のみを持っていけるのはとても安心
• 分析当日にバグ見つけた!が減る 残念ながらテストを書いたって、バグはある • テストの何がまずかったか、振り返ることができる • 自分の思考の何がまずかったのか考えるきっかけになる https://github.com/nyk510/vivid/pull/47/files: numpy.inf が None 扱いにならないこと起因のバグ 8
一般的な開発周りの体験ができる / CI 人は怠惰 • テスト手動でするのだるい: master merge するときに自動でテストしたい •
pypi upload だるい: バージョンを作成したら自動的に pypi へ登録したい 自ずとCIが欲しくなる • CIツールの使い方を学習するきっかけになる • CIでのテストでバグが見つかるとえもいわれぬ快感がある(個人差があります) 書き方がわからない? 最初から書けなくっても大丈夫! • そもそも別になくても困りはしない(ちょっと面倒なだけ) • 必要だと思ったら先人のリポジトリを参考にして、無理ないところから。 9
機械学習以外でも使える 機械学習以外のプロジェクトでもパッケージをつかえると便利なことは多いです • web application の共通部分管理 ◦ 機械学習のツール ◦ Djangoでよく出てくる処理の管理
• CLI ツールの作成 ◦ guruguru cli • などなど 10
まとめ! パッケージ開発は、共通部分の管理以外にも、良いことがいっぱいあります。 さっくり始めるのは、意外と簡単です。 みなさん、気軽に自分のパッケージを作ってみるのは如何でしょうか。 11
さいごにおしらせ 12
直近atmaCupやります! 詳細決まり次第connpassで告知します ;) 13
EOC 14