Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ノートブックをキレイにするためのTips
Search
Daiki Katsuragawa
October 28, 2023
Programming
2.6k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ノートブックをキレイにするためのTips
https://2023-apac.pycon.jp/poster
Daiki Katsuragawa
October 28, 2023
More Decks by Daiki Katsuragawa
See All by Daiki Katsuragawa
データフレームライブラリ徹底比較
daikikatsuragawa
2
2.2k
Polarsの現状
daikikatsuragawa
3
3.3k
Polars入門
daikikatsuragawa
2
2.4k
一歩先の未来を見据えたアウトプットのすゝめ
daikikatsuragawa
1
580
mypy駆動リファクタリング
daikikatsuragawa
1
1.4k
反実仮想説明法を活用したウェブアプリケーションのMVP開発
daikikatsuragawa
0
820
データに関する堅牢性と可読性を向上させるpydanticとpanderaの活用方法の提案
daikikatsuragawa
3
12k
Pythonによる開発をアップデートするライブラリの紹介
daikikatsuragawa
3
5k
モデルの定義に基づくバリデーションを実現するためのpydantic入門
daikikatsuragawa
1
1.8k
Other Decks in Programming
See All in Programming
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
250
Intent as Code
shoppingjaws
6
1.1k
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
370
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
450
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
740
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
120
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
580
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1k
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
110
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
3.1k
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
290
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
310
Featured
See All Featured
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
430
Navigating Weather and Climate Data
rabernat
0
540
Between Models and Reality
mayunak
4
480
Fireside Chat
paigeccino
43
4k
We Are The Robots
honzajavorek
0
380
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
750
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
390
Automating Front-end Workflow
addyosmani
1369
210k
Transcript
ノートブックをキレイにするためのTips 桂川大輝 セル内の冪等性を担保した変数の扱い方 後続処理への影響を避けるバリデーション その他 特定のセルを複数回実行した場合であっても、後続処理に意図した値を伝えるため に、セル内の冪等性を担保した変数の扱い方をすると良いです。例えば、変数を使い まわさない(変数の再代入をしない)ことが挙げられます。 後続処理が期待していない値を検知するために、可能な限り早期にバリデーションを すると良いです。また、データのバリデーションを実現するライブラリであるpydanticを
活用することで、パラメータや変数(定数)を容易かつ早期に検知することが可能で す。 • テキスト(Markdown)のセルによる説明の追加 • 適度なセルの分割 • 適度なファイルへの分割 • フォーマッターの導入 • リンターの導入 • Gitの導入 • 「すべてのセルを実行」で問題なく実行されることを確認 • CI(継続的インテグレーション)の導入 • コードレビューの実施(意図が伝えられていない箇所の洗い出し) • 「出力をすべて消去」した上で管理(オプション) 変数を使いまわさない(変数の再代入をしない) 早期のバリデーション 早期のバリデーション(pydantic) # year = year + 1 next_year = year + 1 # 冪等 year = 2023 FIRST_YEAR = 2010 assert conference_year > FIRST_YEAR from pydantic.dataclasses import dataclass, Field FIRST_YEAR = 2010 @dataclass class Conference: name: str year: int = Field(ge=FIRST_YEAR) conference = Conference(name="PyCon APAC", year=2023) 関数の振る舞いを伝える簡易なテスト doctestを使うことで、関数の振る舞い伝える簡易なテストの実現ができます。それに 加えて、テストであることによって関数が意図した振る舞いであることを担保できま す。 doctestを使った簡易なテスト def add_year(year): ''' >>> add_year(2023) 2024 ''' return year + 1 import doctest doctest.run_docstring_examples(add_year, globals()) 管理コストの低いパラメータの扱い方 コードに残さないセキュアな情報の扱い方 マジックナンバーの防止 意図を伝えるための変数と定数の定義 調整の可能性があるパラメータは、様々なセルに記述するのではなく、可能な限り少 ないセルに集約すると、見通しが良く、管理コストが低くなります。そして、ノートブック の冒頭にあると、さらに見通しが良いです。実行毎に指定する値は、実行者が入力す る仕組みにすると、その旨を伝えられます。 他者への共有が望ましくないパスワードなどのセキュアな情報は、漏洩するリスクか ら、コードでの管理が望ましくありません。実行者に入力させる仕組みにするか、環境 変数として管理をすると、その旨を伝えられます。 変数や定数を定義する際は、型ヒントやデータクラスにより、どんな内容を意図してい るのかを示すことができます。 マジックナンバーになり得る値は列挙型で定義をしておくことで、以降のコードにおい てマジックナンバーを防止することができます。 from getpass import getpass password = getpass("パスワードを入力してください: ") パスワードを入力してください: import os password = os.environ.get("PASSWORD") 実行者が入力する仕組み(入力内容をマスク) 環境変数として管理 パラメータの集約 実行者が入力する仕組み email_address = input("Eメールアドレスを入力してください: ") Eメールアドレスを入力してください: # 乱数の種 RANDOM_SEED = 2023 # PyCon APAC 2023のセッション数 NUMBER_OF_SESSIONS = 5 from enum import Enum, unique @unique # 重複を防止 class Prefecture(Enum): # ※一部省略 TOKYO = 13 OSAKA = 27 型ヒントによる意図の表現 データクラスによる意図の表現 conference_name: str = "PyCon APAC" conference_year: int = 2023 from dataclasses import dataclass @dataclass class Conference: name: str year: int print(f"PyCon APAC 2023の開催地:{Prefecture(13).name}") conference = Conference(name="PyCon APAC", year=2023) 列挙型によるマジックナンバーになり得る値の定義 Jupyter NotebookやGoogle Colaboratoryなどのノートブックは、データ分析などの目的で使用されるインタラクティブにコードの記述や実行が可能な開発環境です。作成した ノードブックを他者や未来の自分が改めて閲覧や実行をする可能性がある場合、実装の意図を伝えるために可読性を高く、意図した振る舞いを担保するために堅牢性を高くす ることが大事です。ただし、ノートブックはそれ自体がソフトウェアとして実装されるものではないことから、可読性や堅牢性を向上させるメリットとコストのトレードオフを特に注意 する必要があります。本発表では、ノートブックの可読性や堅牢性を向上させる(キレイにする)ために、可能な限りコストをかけずにメリットを得る方法(Tips)を紹介します。ご自 身の管理されているノートブックの状況に合わせて、採用を検討してください。 # print(year) print(next_year) = year + 1 # 冪等