
Jupyter Notebook は 学習・検証・共有 に最強のツールです。ただし設計を誤ると、
- 何をしているか読み取りづらい といった“あるある事故”が起きます。
- 上から実行しないと動かない
- 人によって結果が再現できない
本ガイドは、未経験〜初学者でも 週10時間×1〜2週 で、 環境構築 → 基本操作 → マジックコマンド → データ可視化 → 再現性(環境・乱数・パス) → 品質保証(セル構成・チェック) → 配布(HTML/PDF/スライド) → ノートからスクリプト化 までを一気に学べるように再構成しました。コピペOKの雛形 と チェックリスト 付きです。
この記事で身に付く力
-
仮想環境+カーネル運用:プロジェクトごとに環境を分離し衝突を防ぐ
-
“上から実行して通る”セル構成:読みやすさと再現性を両立
-
Plotly / Matplotlib の使い分け:探索とレポートの住み分け
-
乱数・パス・バージョンの固定:翌月・他PCでも同じ結果
-
配布(HTML/PDF/スライド)とスクリプト化:納品・運用に耐える
Notebookの“あるある”落とし穴と対策
落とし穴
- 順番に依存(グローバル状態まみれ)
- 再現性なし(環境・乱数・パスがバラバラ)
- 読みづらい(セルが長い/出力が多い/意図不明)
対策の型
- 冒頭に ヘッダー → 設定 → I/O → 前処理 → 検証 → 可視化 → まとめ のテンプレを置く
- 環境と乱数を固定、短いセル×関数化 を徹底
- 出力は必要最小限、グラフは 2〜3色+強調1色
“読めるノート”が信頼される理由(ふみとの現場経験)
レビューで評価されるノートは共通して、
翌月も再現できる(環境・乱数・パスの固定) という特徴があります。以下は、そのまま使える“型”です。
最初から最後まで Run All で通る
1枚で結論が把握できる(冒頭のヘッダー+末尾のまとめ)
実務で使えるJupyterの型:10ステップ(コピペOK)
前提:Python 3.10+ / pandas 2.x / JupyterLab or VS Code を想定。PlotlyやMatplotlibを適宜利用します。
ステップ0:環境構築(仮想環境+カーネル登録)
ねらい: プロジェクト専用のPython環境を作り、Notebook から選べるカーネルとして登録します。
# 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)"
ポイント:右上の Kernel(カーネル) から "Python (project)" を選べるようにしておく。
ステップ1:Notebookヘッダー雛形
ねらい: 何のためのノートかを1セルで把握できるようにします。
# タイトル:●●分析(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:前処理セル(短い関数+メソッドチェーン)
ねらい: 1セル=1目的。小さな“純関数”に分けて pipe でつなぎます。
# 小さい純関数に分割して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()
ポイント:Notebook 内でも 関数化 しておくと、後続セルから再利用しやすい。
ステップ5:可視化セル(Matplotlib/Plotlyの使い分け)
ねらい: 探索にはインタラクティブな Plotly、納品には静的な Matplotlib を使い分けます。
# 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()
ポイント:色は 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 で “編集→すぐ試す” を回す。
ステップ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/スライド)と共有
ねらい: 受け手が Jupyter を持っていなくても読める形で配布します。
# 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 は体裁が崩れにくい。社内LTなら slides も便利。
ステップ10:ノート→スクリプト化(運用/納品へ)
ねらい: 探索は Notebook、運用はスクリプトへ分離。再実行可能な入口を用意します。
# ノート内で使った小関数は 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()
ポイント:リポジトリの 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出力。
付録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週 で、要件定義 → データ受 ...
-
-
【保存版】データ職のポートフォリオ完全ガイド|再現性・評価・LTまで
ポートフォリオって「作ったものの置き場」でしょ? いいえ。採用側が見たいのは「意思決定に効いた証拠」と「再現性」です。 本ガイドは、未経験〜初学者が週10時間×4〜6週で、テーマ選定→要件定義→データ ...
-
-
【保存版】scikit-learn基礎:回帰・分類・前処理・パイプライン・交差検証を“実務の型”で習得
機械学習で迷子になる最大の理由は、前処理→学習→評価→改善の順番が曖昧なまま個々のアルゴリズムに飛びつくこと。 本記事は、未経験〜初学者が週10時間×2〜3週で到達できるscikit-learnの最短 ...
最近のコメント