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.1k
Polarsの現状
daikikatsuragawa
3
3.3k
Polars入門
daikikatsuragawa
2
2.3k
一歩先の未来を見据えたアウトプットのすゝめ
daikikatsuragawa
1
560
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
Foundation Models frameworkで画像分析
ryodeveloper
1
600
VibeCodingからAgenticWorkflowへ
starfish719
0
330
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
180
AIが無かった頃の素敵な出会いの話
codmoninc
1
400
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
220
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.9k
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
4.1k
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
450
数百円から始めるRuby電子工作
tarosay
0
140
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
590
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
150
その節約、円になってますか?
isamumumu
1
710
Featured
See All Featured
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Practical Orchestrator
shlominoach
191
12k
Design in an AI World
tapps
1
280
Prompt Engineering for Job Search
mfonobong
0
400
A Soul's Torment
seathinner
6
3.4k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
400
How to train your dragon (web standard)
notwaldorf
97
6.7k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
630
The Cost Of JavaScript in 2023
addyosmani
55
10k
Ethics towards AI in product and experience design
skipperchong
2
340
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
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 # 冪等