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.5k
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.2k
Django のセキュリティリリースを見る
nyk510
0
70
3分でMLアプリを作る 〜推論コードにちょっとのStreamlitを添えて〜
nyk510
1
1.1k
硬派で真面目なグラフを描く
nyk510
0
490
CORSをちゃんと理解する atmaバックエンド勉強会#4
nyk510
0
370
RestAPIのページネーション atma バックエンド勉強会 #3
nyk510
1
890
AWS CPU Credit を完全に理解する
nyk510
0
430
atmaCup#8 Opening
nyk510
0
240
オンサイトデータコンペの魅力: 関わる全員が楽しいコンペ設計のための取り組み
nyk510
3
5.3k
Other Decks in Technology
See All in Technology
eBPF-based Process Lifecycle Monitoring
yukinakanaka
1
110
どうすると生き残れないのか/how-not-to-survive
hanhan1978
13
11k
技術を育てる組織・組織を育てる技術 / technology and organization
motemen
10
3.9k
Oracle Cloud Infrastructure IaaS 新機能アップデート 2024/12 - 2025/02
oracle4engineer
PRO
0
160
貧民的プログラミングのすすめ
kakehashi
PRO
2
390
20250307_エンジニアじゃないけどAzureはじめてみた
ponponmikankan
2
300
# Azure Cosmos DB パフォーマンス最適化入門 - 設計・開発・運用の実践テクニック
shibayan
0
170
StotybookからはじめるVRT -個人開発編-
arrow2nd
1
940
Platform Engineering for Private Cloud
cote
PRO
0
110
テクスチャ画像付きのメッシュモデルを3次元点群へ変換する
kentaitakura
1
400
x86-64 Assembly Essentials
latte72
4
1.2k
セキュリティグループの”タイプ”を改めて考えてみる
masakiokuda
0
140
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
32
6.4k
How to train your dragon (web standard)
notwaldorf
91
5.9k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
590
We Have a Design System, Now What?
morganepeng
51
7.5k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.3k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
410
YesSQL, Process and Tooling at Scale
rocio
172
14k
Testing 201, or: Great Expectations
jmmastey
42
7.3k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
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