
Jupyter Notebookは学習・検証・共有に最強の道具ですが、設計を間違えると再現できない・読みにくい・遅いノートになってしまいます。本記事は、未経験〜初学者が週10時間×1〜2週で、環境構築→基本操作→マジックコマンド→データ可視化→再現性(環境固定/乱数/パス)→品質保証(セル構成/チェック)→配布(HTML/PDF/スライド)→ノートからスクリプト化までを、“現場10年”の事故らない型で身につける保存版。コピペOKの雛形とチェックリスト付きです。
この記事で身に付く力
- プロジェクト別の仮想環境とカーネル運用(環境の衝突を防ぐ)
- “上から実行して通る”セル構成テンプレ(読みやすさと再現性)
- Plotly/Matplotlibの使い分け(探索と納品を両立)
- 乱数・パス・バージョン固定(翌月も再現できる)
- HTML/PDF/スライド配布とスクリプト化(運用・納品対応)
Notebookの“あるある”落とし穴と対策
- 順番に依存:上から実行しないと動かない(グローバル状態に依存)。
- 再現性がない:環境/乱数/パスが人によって違う。
- 読みづらい:セルが長い・出力が多い・意図がわからない。
対策は、冒頭にヘッダー→設定→I/O→検証→可視化→結論のセル構成テンプレを置き、環境と乱数を固定し、短いセル×関数化で運用することです。
“読めるノート”が信頼される理由(ふみとの現場経験)
筆者(ふみと)は大手企業のデータ/マーケティングサイエンティスト歴10年。議論の土台も証跡も最初はノートです。レビューで評価されたのは「最初から最後まで上から実行できる」「1枚で結論が把握できる」「翌月も再現できる」ノート。本記事では、そのまま使える“型”を配布します。
実務で使えるJupyterの型:10ステップ(コピペOK)
前提:Python 3.10+ / pandas 2.x / JupyterLab or VS Code を想定。PlotlyやMatplotlibを適宜利用します。
ステップ0:環境構築(仮想環境+カーネル登録)
# 1) プロジェクト直下で仮想環境
python -m venv .venv
# 2) 有効化(Windows: .venv\Scripts\activate)
source .venv/bin/activate
# 3) 主要ライブラリ
pip install jupyterlab ipykernel pandas matplotlib plotly scikit-learn
# 4) カーネルとして登録
python -m ipykernel install --user --name project-venv --display-name "Python (project)"
ポイント:プロジェクト専用カーネルを作り、ノート右上で選べる状態に。
ステップ1:Notebookヘッダー雛形
# タイトル:●●分析(YYYY-MM)
- 目的:誰が何を決めるための分析か(1文)
- データ:ファイル/テーブル(粒度/期間/除外)
- 指標:定義(売上=qty*price 等)
- 実行手順:上から順に実行(Shift+Enter)
- 環境:Python3.10 / pandas2.x / jupyterlab
ステップ2:設定セル(乱数/表示/パス/バージョン)
# 基本設定
from pathlib import Path
import sys, platform, random, numpy as np, pandas as pd
# 再現性(乱数固定)
SEED = 42
random.seed(SEED); np.random.seed(SEED)
# 表示オプション
pd.set\_option('display.max\_rows', 50)
pd.set\_option('display.float\_format', lambda x: f"{x:,.2f}")
# パス設定
ROOT = Path.cwd()
DATA = ROOT / "data"; OUTPUT = ROOT / "reports"
DATA.mkdir(exist\_ok=True); OUTPUT.mkdir(exist\_ok=True)
# バージョン出力
print({ "python": sys.version.split()\[0], "pandas": pd.**version**, "platform": platform.platform() })
ポイント:冒頭で乱数・パス・表示を固定。実行環境を印字して再現容易に。
ステップ3:I/Oセル(読み込み→軽い検査)
# 読み込み(例)
df = pd.read_csv(DATA / "sales.csv", parse_dates=["date"])
# 速い健全性チェック
a = {
"rows": len(df),
"na\_rate": float(df.isna().mean().mean()),
"dups": int(df.duplicated().sum())
}
print(a)
assert (df\["qty"] >= 0).all() and (df\["price"] >= 0).all(), "負値が含まれています"
ポイント:assert
で壊れたら即落ち。以降の誤学習/誤可視化を防ぐ。
ステップ4:前処理セル(短い関数+メソッドチェーン)
# 小さい純関数に分割してpipeで繋ぐ
from typing import Any
def add\_amount(d: pd.DataFrame) -> pd.DataFrame:
return d.assign(amount=d\["qty"] \* d\["price"]) # type: ignore
def add\_month(d: pd.DataFrame) -> pd.DataFrame:
return d.assign(ym=d\["date"].dt.to\_period("M").astype(str))
clean = (df.query("qty > 0 and price > 0")
.pipe(add\_amount)
.pipe(add\_month))
clean.head()
ポイント:1セル=1目的。Notebook内でも関数化して次セル再利用を容易に。
ステップ5:可視化セル(Matplotlib/Plotlyの使い分け)
# Matplotlib(静的:レポート用)
import matplotlib.pyplot as plt
m = clean.groupby("ym", as_index=False)["amount"].sum()
plt.figure(); plt.plot(m["ym"], m["amount"], marker="o")
plt.title("月次売上の推移"); plt.xlabel("年月"); plt.ylabel("売上"); plt.xticks(rotation=45)
plt.tight_layout(); plt.show()
# Plotly(探索:ホバーで検証)
import plotly.express as px
fig = px.line(m, x="ym", y="amount", markers=True, title="月次売上の推移(Hoverで検証)")
fig.update_layout(xaxis_title="年月", yaxis_title="売上")
fig.show()
ポイント:探索はPlotly、納品図はMatplotlib。色は2〜3色+強調1色に抑える([内部リンク:可視化入門])。
ステップ6:マジックコマンド(速度/デバッグ/シェル)
# 実行時間
%time m = clean.groupby("ym", as_index=False)["amount"].sum()
%timeit clean.groupby("ym", as_index=False)["amount"].sum()
# 例外時に対話デバッグ
# raise ValueError("test")
# %debug # 例外直後に実行すると対話モードへ
# 自動リロード(外部関数の編集を反映)
%load\_ext autoreload
%autoreload 2
# シェル(小さなコマンドの呼び出し)
!ls -lh reports
ポイント:%timeit
でボトルネック検出、%autoreload
で関数修正を即反映、%debug
で事故復旧。
ステップ7:再現性の担保(乱数・環境・パス・実行順)
- 乱数:
random.seed/np.random.seed
で固定。 - 環境:
requirements.txt
にバージョン固定。例:pandas==2.2.*
。 - パス:
Path.cwd()
起点で相対化。絶対パス禁止。 - 実行順:上から下まで連続実行で通る。セルの依存を分断しない。
- 出力の掃除:コミット前に出力をクリア(JupyterLab: File→Save and Export→Clear Outputs)。
- 機密:
.env
や鍵はノート外へ。.gitignore
で除外。
[内部リンク:ポートフォリオ完全ガイド]
ステップ8:品質保証(セル構成テンプレ+簡易テスト)
推奨セル構成
- ヘッダー(目的/データ/指標/環境)
- 設定(乱数/表示/パス/バージョン)
- I/O(読み込み+assert)
- 前処理(関数化+pipe)
- 検証(基本統計・穴の有無)
- 可視化(根拠図+注釈)
- まとめ(結論3行+次アクション)
簡易テスト(最上流で“即落ち”)
assert clean["amount"].ge(0).all()
assert clean["ym"].str.len().eq(7).all() # YYYY-MM
ステップ9:配布(HTML/PDF/スライド)と共有
# HTMLに変換(実行しながら)
jupyter nbconvert --to html --execute notebook.ipynb
# PDF(環境によってLaTeX等の準備が必要)
jupyter nbconvert --to pdf notebook.ipynb
# スライド(Reveal.js)
jupyter nbconvert notebook.ipynb --to slides --post serve
ポイント:HTMLは手軽で再現性が高い。PDFは体裁が崩れにくい。slidesで10分LTにも。
ステップ10:ノート→スクリプト化(運用/納品へ)
# ノート内で使った小関数は src/ へ移動
def run_all() -> None:
import pandas as pd
from pathlib import Path
DATA = Path("data"); OUTPUT = Path("reports"); OUTPUT.mkdir(exist_ok=True)
df = pd.read_csv(DATA/"sales.csv", parse_dates=["date"])\
.assign(amount=lambda d: d["qty"]*d["price"],
ym=lambda d: d["date"].dt.to_period("M").astype(str))
monthly = df.groupby("ym", as_index=False)["amount"].sum()
monthly.to_excel(OUTPUT/"report.xlsx", index=False)
if **name** == "**main**":
run\_all()
ポイント:探索はNotebook、運用はスクリプトへ。README
に実行手順を明記([内部リンク:データレポート納品の型])。
学び方の提案:ノート設計〜レビューまで“伴走”で最短習得
独学でも習得できますが、ノート設計/再現性/発表のレビューが入ると説得力とスピードが段違い。6ヶ月ロードマップのポートフォリオへ直結させるなら、次の2校の無料カウンセリングから始めるのが近道です。
- 株式会社キカガク:業務再現型課題とレビューが強い。転職直結に◎。
- Tech Academy:質問の速さ×短時間運用で継続しやすい。副業/在宅に◎。
TechAcademy データサイエンスコース(受講料:174,600円~ ※更に割引あり)

株式会社キカガク AI人材長期育成コース(受講料:237,600円~)

読者タイプ別の重点(3タイプ)
- 社会人(転職):再現性を最優先(ヘッダー/設定/検証/まとめ)。HTML/PDFを添え、10分LTの台本を準備。
- 副業(稼ぎたい):Excel納品を意識(
report.xlsx
まで自動)。nbconvertでHTMLも一緒に納品。 - 主婦/夫(在宅):短いセル×関数化で中断→再開が簡単な構成に。
行動:ノート作成ミニプロジェクト(提出推奨)
課題:「sales.csv
から月次売上の推移と上位店舗Top-10をNotebook1本で作成。HTML出力と結論3行を添付。」
手順
- ヘッダーと設定セルを作成(乱数/パス/バージョン印字)。
- I/O→前処理(
amount=qty*price
,ym
)→検証(行数/欠損/負値)。 - 可視化(折れ線/横棒)、注釈を1個置く。
- まとめセルに結論3行と次アクションを記載。
jupyter nbconvert --to html --execute
でHTML出力。
レビュー観点チェックリスト(コピペ可)
- [ ] 上から実行して通る
- [ ] 乱数/パス/バージョンが固定・印字されている
- [ ] I/O直後に
assert
がある(壊れたら即落ち) - [ ] セルは短く、1セル1目的
- [ ] 図は2〜3色+強調1色、軸/単位/注釈が適切
- [ ] HTML/PDFが添付されている
付録A:便利スニペット集
# 1) 進捗表示(tqdm)
from tqdm.auto import tqdm
for i in tqdm(range(1000)): pass
# 2) ログ(notebook環境向け最短)
import logging; logging.basicConfig(level=logging.INFO)
logging.info("start")
# 3) 大きな出力を抑制
from contextlib import redirect\_stdout
import io
f = io.StringIO()
with redirect\_stdout(f):
print("これはログにだけ残す")
# 4) 警告の整理
import warnings; warnings.filterwarnings("ignore")
付録B:VS CodeでのNotebook運用
- 拡張機能「Jupyter」を入れると、セル実行/変数ビュー/プロファイルが快適。
- カーネル選択でプロジェクト仮想環境を指定。
.ipynb
の差分はnbdimeやJupyter拡張の差分ビューで確認。
付録C:よくある質問(FAQ)
Q1. 実行順が乱れて再現できない
A. コミット前にKernel Restart & Run All。出力をクリアして保存。
Q2. 画像やHTMLが重くてGitが遅い
A. 出力クリア、もしくはHTMLだけ配布。画像はreports/
に保存し、ノートにはパスだけ。
Q3. 共同編集でコンフリクトが多い
A. 短いセルに分割、粒度の大きな変更を避ける。差分はnbdimeで可視化。
Q4. 本番運用はNotebookで良い?
A. 基本はスクリプト/パイプライン。Notebookは探索/説明用([内部リンク:SQLite×Python] [内部リンク:データレポート納品の型])。
この記事から次に読むべきもの(内部リンク)
-
-
【実務で差がつく】pandas実践:欠損処理・結合・ウィンドウ関数・時系列・品質保証まで“読みやすく速い”型を習得
リード(結論)基礎を終えたら次は実務の現場で頻出する処理を“型”で覚える段階です。本記事は、pandas 2.x を前提に、欠損・外れ値・結合・ウィンドウ関数・時系列・カテゴリ処理・集計の自動化・大規 ...
-
-
【保存版】可視化入門:Matplotlib/Plotlyの使い分けと“伝わるグラフ設計”10ステップ
結論:可視化は「きれいに描く」ことではなく、意思決定を動かすための設計です。本稿では、未経験〜初学者が 週10時間×1〜2週 で、Matplotlib/Plotlyを軸に “伝わるグラフ”の設計と実装 ...
-
-
【保存版】データレポート納品の型:要件定義→ETL→検証→可視化→Excel/PDF→引き継ぎまで、失注しないワークフロー完全版
“いい分析”より“伝わる納品”。副業や実務で評価されるのは、意思決定に効く1枚と再現できるパッケージを期限通り出せること。 本記事は、未経験〜初学者が週10時間×2〜3週で、要件定義→データ受領→ET ...
-
-
【保存版】データ職のポートフォリオ完全ガイド|再現性・評価・LTまで
ポートフォリオって「作ったものの置き場」でしょ? いいえ。採用側が見たいのは「意思決定に効いた証拠」と「再現性」です。 本ガイドは、未経験〜初学者が週10時間×4〜6週で、テーマ選定→要件定義→データ ...
-
-
【保存版】scikit-learn基礎:回帰・分類・前処理・パイプライン・交差検証を“実務の型”で習得
機械学習で迷子になる最大の理由は、前処理→学習→評価→改善の順番が曖昧なまま個々のアルゴリズムに飛びつくこと。本記事は、未経験〜初学者が週10時間×2〜3週で到達できるscikit-learnの最短ル ...
最近のコメント