Python基礎

【保存版】Jupyter Notebookの基本:環境構築・使い方・再現性・“読みやすいノート”設計まで完全ガイド

Jupyter Notebook は 学習・検証・共有 に最強のツールです。ただし設計を誤ると、

  • 何をしているか読み取りづらい といった“あるある事故”が起きます。
  • 上から実行しないと動かない
  • 人によって結果が再現できない

本ガイドは、未経験〜初学者でも 週10時間×1〜2週 で、 環境構築 → 基本操作 → マジックコマンド → データ可視化 → 再現性(環境・乱数・パス) → 品質保証(セル構成・チェック) → 配布(HTML/PDF/スライド) → ノートからスクリプト化 までを一気に学べるように再構成しました。コピペOKの雛形チェックリスト 付きです。

この記事で身に付く力

  • 仮想環境+カーネル運用:プロジェクトごとに環境を分離し衝突を防ぐ

  • “上から実行して通る”セル構成:読みやすさと再現性を両立

  • Plotly / Matplotlib の使い分け:探索とレポートの住み分け

  • 乱数・パス・バージョンの固定:翌月・他PCでも同じ結果

  • 配布(HTML/PDF/スライド)とスクリプト化:納品・運用に耐える

Notebookの“あるある”落とし穴と対策

落とし穴

  1. 順番に依存(グローバル状態まみれ)
  2. 再現性なし(環境・乱数・パスがバラバラ)
  3. 読みづらい(セルが長い/出力が多い/意図不明)

対策の型

  • 冒頭に ヘッダー → 設定 → 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:品質保証(セル構成テンプレ+簡易テスト)

推奨セル構成

  1. ヘッダー(目的/データ/指標/環境)
  2. 設定(乱数/表示/パス/バージョン)
  3. I/O(読み込み+assert)
  4. 前処理(関数化+pipe)
  5. 検証(基本統計・穴の有無)
  6. 可視化(根拠図+注釈)
  7. まとめ(結論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円~ ※更に割引あり)

TechAcademy 無料相談

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

キカガク 無料相談

読者タイプ別の重点(3タイプ)

  • 社会人(転職):再現性を最優先(ヘッダー/設定/検証/まとめ)。HTML/PDFを添え、10分LTの台本を準備。
  • 副業(稼ぎたい):Excel納品を意識report.xlsxまで自動)。nbconvertでHTMLも一緒に納品。
  • 主婦/夫(在宅):短いセル×関数化中断→再開が簡単な構成に。

行動:ノート作成ミニプロジェクト(提出推奨)

課題:sales.csvから月次売上の推移上位店舗Top-10をNotebook1本で作成。HTML出力結論3行を添付。」

手順

  1. ヘッダー設定セルを作成(乱数/パス/バージョン印字)。
  2. I/O→前処理(amount=qty*price, ym)→検証(行数/欠損/負値)。
  3. 可視化(折れ線/横棒)、注釈を1個置く。
  4. まとめセルに結論3行と次アクションを記載。
  5. jupyter nbconvert --to html --executeHTML出力

付録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の差分はnbdimeJupyter拡張の差分ビューで確認。

付録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の最短 ...

最近のコメント

    • この記事を書いた人
    • 最新記事

    ふみと

    このブログでは、データサイエンティストとして市場価値を上げる方法を独自にまとめて発信しています。

    【プロフィール】
    ・大手企業データサイエンティスト/マーケティングサイエンティスト(10年、年収900万円台)/案件100件以上
    ・資格:JDLA E資格(日本ディープラーニング協会主催)/JDLA Community(CDLE会員)/Advanced Marketer/ビジネス統計スペシャリスト/統計検定2級/TOEIC 805
    ・スキル:Python/Tableau/SQL/機械学習/Deep Learning/RPA

    -Python基礎