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.8k
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.4k
Django のセキュリティリリースを見る
nyk510
0
120
3分でMLアプリを作る 〜推論コードにちょっとのStreamlitを添えて〜
nyk510
1
1.2k
硬派で真面目なグラフを描く
nyk510
0
550
CORSをちゃんと理解する atmaバックエンド勉強会#4
nyk510
0
440
RestAPIのページネーション atma バックエンド勉強会 #3
nyk510
1
1k
AWS CPU Credit を完全に理解する
nyk510
0
490
atmaCup#8 Opening
nyk510
0
300
オンサイトデータコンペの魅力: 関わる全員が楽しいコンペ設計のための取り組み
nyk510
3
5.6k
Other Decks in Technology
See All in Technology
プロジェクトマネジメントをチームに宿す -ゼロからはじめるチームプロジェクトマネジメントは活動1年未満のチームの教科書です- / 20260304 Shigeki Morizane
shift_evolve
PRO
1
110
20260305_【白金鉱業】分析者が地理情報を武器にするための軽量なアドホック分析環境
yucho147
1
170
Evolution of Claude Code & How to use features
oikon48
1
210
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3k
開発組織の課題解決を加速するための権限委譲 -する側、される側としての向き合い方-
daitasu
4
240
Datadog Cloud Cost Management で実現するFinOps
taiponrock
PRO
0
140
オンプレとGoogle Cloudを安全に繋ぐための、セキュア通信の勘所
waiwai2111
3
1.1k
JAWS DAYS 2026 CDP道場 事前説明会 / JAWS DAYS 2026 CDP Dojo briefing document
naospon
0
140
Kaggleで鍛えたスキルの実務での活かし方 競技とプロダクト開発のリアル
recruitengineers
PRO
1
150
OCI Security サービス 概要
oracle4engineer
PRO
2
13k
Eight Engineering Unit 紹介資料
sansan33
PRO
1
6.9k
LINEアプリ開発のための Claude Code活用基盤の構築
lycorptech_jp
PRO
2
1.4k
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
A better future with KSS
kneath
240
18k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
80
Building Applications with DynamoDB
mza
96
6.9k
Odyssey Design
rkendrick25
PRO
2
530
Embracing the Ebb and Flow
colly
88
5k
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