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
App Intentsのビルドプロセスを支える技術
kntkymt
0
490
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
570
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
250
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
240
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
200
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
450
FreeBSDでZabbixを動かす
kenkino
0
340
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
520
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
120
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
290
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
4
400
mrbgem 三角測量 開発
ogom
0
170
Featured
See All Featured
Visualization
eitanlees
153
17k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
550
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
250
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
410
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Building Applications with DynamoDB
mza
96
7.2k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
310
Building the Perfect Custom Keyboard
takai
2
890
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
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 # 冪等