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
ノートブックをキレイにするための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
570
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
Press start. Python's next generation.
willingc
PRO
3
260
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
400
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
120
FastAPI の並行処理モデルを完全に理解する
hoto17296
8
3.2k
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
510
仕様駆動開発の消費期限
watany
20
9.1k
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
730
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
120
freeeにおけるEvalsの実践例の紹介
freee
PRO
0
160
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
170
高専キャリア LT 発表内容
crysta1221
4
4.3k
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
240
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
WCS-LA-2024
lcolladotor
0
810
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
400
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Thoughts on Productivity
jonyablonski
76
5.3k
Design in an AI World
tapps
1
290
Building an army of robots
kneath
306
46k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
30 Presentation Tips
portentint
PRO
1
380
Paper Plane (Part 1)
katiecoart
PRO
1
10k
Visualization
eitanlees
152
17k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
450
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 # 冪等