Python基礎

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

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:品質保証(セル構成テンプレ+簡易テスト)

推奨セル構成

  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/スライド)と共有

# 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円~ ※更に割引あり)

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出力

レビュー観点チェックリスト(コピペ可)

  • [ ] 上から実行して通る
  • [ ] 乱数/パス/バージョンが固定・印字されている
  • [ ] 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の差分は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週で、要件定義→データ受領→ET ...

ポートフォリオ
【保存版】データ職のポートフォリオ完全ガイド|再現性・評価・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基礎