CLAUDE LABEN
FORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられていますFORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられています
記事一覧/Claude Code
Claude Code/2026-05-03上級

Claude Code × データサイエンス — pandas・scikit-learn・機械学習プロジェクトをAIペアプログラミングで加速する

Claude Code をデータサイエンス・機械学習プロジェクトで活用する実践パターンを解説。EDA・特徴量設計・モデル評価・ハイパーパラメータチューニングまで、動作するコード例とともに本番レベルのMLワークフローを構築する方法を紹介します。

claude-code129data-sciencemachine-learningpython22pandas2scikit-learnmlops

プレミアム記事

データサイエンスのプロジェクトで、Claude Code を最初から最後まで使い倒している人はまだ少ないのではないでしょうか。

コード補完や簡単な分析スクリプトの生成には使っていても、「モデルのトレーニングからハイパーパラメータチューニング・本番デプロイまで、一気通貫でClaude Codeとペアプログラミングする」という経験は意外と少ないと思います。実際、私もしばらくの間、データ分析には Jupyter Notebook を使って手作業でやっていました。Claude Code との組み合わせを本格的に試してみたのは比較的最近のことです。

試してみて気づいたのは、データサイエンスのワークフローはClaude Codeと特に相性が良いということです。理由は単純で、データ分析は「仮説 → コード実行 → 観察 → 修正」のサイクルを繰り返す作業だからです。Claude Code はこのフィードバックループを大幅に短縮してくれます。

ここでは実際のMLプロジェクトで使える具体的なパターンを、動作するコード例とともに紹介します。pandas・scikit-learn・可視化から、ハイパーパラメータチューニング・MLOpsの入口まで扱います。

1. 環境セットアップ:CLAUDE.mdにデータサイエンス用の制約を定義する

まず前提として、Claude Code はターミナルから直接 Python スクリプトを実行できます。Jupyter Notebook のセル実行とは少し異なりますが、.py ファイルを作って python script.py で実行するスタイルが Claude Code との相性が良いです。

必要なライブラリをインストールするところから Claude Code に任せましょう。

# Claude Code に渡す指示
「以下のデータサイエンスプロジェクト用に requirements.txt を作成して、
仮想環境にインストールしてください。必要なライブラリ:
pandas, numpy, scikit-learn, matplotlib, seaborn, jupyterlab, optuna, shap」

Claude Code が生成する requirements.txt はこのようになります:

pandas==2.2.0
numpy==1.26.3
scikit-learn==1.4.0
matplotlib==3.8.2
seaborn==0.13.1
jupyterlab==4.1.0
optuna==3.5.0
shap==0.44.0
joblib==1.3.2
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

CLAUDE.mdにデータサイエンス固有の制約を追加する

プロジェクトルートに CLAUDE.md を置いて、Claude Code の挙動を制御します。これが後々の作業効率に大きく影響します。データサイエンスプロジェクトで私が必ず入れている指示はこちらです:

# Data Science Project Guidelines
 
## 技術スタック
- Python 3.12, pandas 2.2, scikit-learn 1.4, matplotlib/seaborn
- データ: data/raw/ (生データ), data/processed/ (前処理済み)
- モデル: models/ (pkl形式で保存)
 
## 必ず守ること
- pandas DataFrameは必ず .copy() してから変更する
- 乱数シードは常に RANDOM_STATE = 42 を使う
- データリーク防止のため train_test_split は前処理のfit前に行う
- モデル保存は joblib.dump、読み込みは joblib.load
- 大規模データ(50万行以上)ではchunk読み込みを使う

この CLAUDE.md があるだけで、Claude Code が「データリーク防止」や「乱数シードの固定」を自動的に考慮したコードを生成してくれます。CLAUDE.md の設計については、Claude Code の Context Window 管理術 でも詳しく触れています。

2. EDA(探索的データ分析)をClaude Codeで加速する

EDAは全ての分析の入口ですが、同時に最も時間がかかるフェーズでもあります。ここで Claude Code を使う際の効果的な指示パターンを紹介します。

2-1. データの概観を素早く掴む

# Claude Codeへの指示:
# 「このCSVデータ(data/raw/sales.csv)の基本的なEDAを行うスクリプトを
# src/eda_report.py として作成してください。
# ・各列のデータ型・欠損値・基本統計量
# ・数値列のヒストグラムと箱ひげ図
# ・カテゴリ列の値のカウントと上位10件
# ・相関行列のヒートマップ
# 図はすべて reports/eda/ に PNG で保存してください」

Claude Code が生成するスクリプト(重要な部分を抜粋):

# src/eda_report.py
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from pathlib import Path
 
RANDOM_STATE = 42
REPORTS_DIR = Path("reports/eda")
REPORTS_DIR.mkdir(parents=True, exist_ok=True)
 
def generate_eda_report(filepath: str) -> dict:
    """EDAレポートを生成して結果を返す"""
    df = pd.read_csv(filepath)
    report = {}
 
    # 基本情報
    report["shape"] = df.shape
    report["missing_pct"] = (df.isnull().sum() / len(df) * 100).to_dict()
 
    numeric_cols = df.select_dtypes(include=np.number).columns.tolist()
    report["stats"] = df[numeric_cols].describe().to_dict()
 
    # 相関行列のヒートマップ
    if len(numeric_cols) > 1:
        fig, ax = plt.subplots(figsize=(12, 10))
        sns.heatmap(
            df[numeric_cols].corr(),
            annot=True, fmt=".2f",
            cmap="coolwarm", center=0,
            ax=ax
        )
        ax.set_title("Feature Correlation Matrix")
        fig.savefig(REPORTS_DIR / "correlation_heatmap.png",
                    dpi=150, bbox_inches="tight")
        plt.close(fig)
        print("[OK] Correlation heatmap saved.")
 
    # 数値列のヒストグラム
    n_cols = 3
    n_rows = (len(numeric_cols) + n_cols - 1) // n_cols
    fig, axes = plt.subplots(n_rows, n_cols, figsize=(15, 5 * n_rows))
    axes = axes.flatten()
 
    for i, col in enumerate(numeric_cols):
        axes[i].hist(df[col].dropna(), bins=30, edgecolor="black", alpha=0.7)
        axes[i].set_title(
            f"{col} (missing: {report['missing_pct'][col]:.1f}%)"
        )
        axes[i].set_xlabel(col)
        axes[i].set_ylabel("Count")
 
    for j in range(i + 1, len(axes)):
        axes[j].set_visible(False)
 
    plt.tight_layout()
    fig.savefig(REPORTS_DIR / "histograms.png", dpi=150, bbox_inches="tight")
    plt.close(fig)
    print(f"[OK] Histograms saved. ({len(numeric_cols)} features)")
 
    return report
 
if __name__ == "__main__":
    report = generate_eda_report("data/raw/sales.csv")
    print(f"\nShape: {report['shape']}")
    print("\nMissing values (%):")
    for col, pct in report["missing_pct"].items():
        if pct > 0:
            print(f"  {col}: {pct:.1f}%")

2-2. 異常値の特定と処理方針の決定

EDA の次のフェーズは異常値の処理です。「3パターンの処理を比較してください」という指示を出すと、Claude Code は選択肢を並べて比較できるコードを生成してくれます。

# src/outlier_handling.py
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pathlib import Path
 
def detect_outliers_iqr(series: pd.Series, multiplier: float = 1.5) -> pd.Series:
    """IQR法で外れ値を検出してBooleanマスクを返す"""
    Q1 = series.quantile(0.25)
    Q3 = series.quantile(0.75)
    IQR = Q3 - Q1
    lower = Q1 - multiplier * IQR
    upper = Q3 + multiplier * IQR
    return (series < lower) | (series > upper)
 
def compare_outlier_strategies(
    df: pd.DataFrame,
    col: str,
    output_dir: str = "reports/eda"
) -> dict:
    """3種類の外れ値処理(除外・クリップ・対数変換)を比較する"""
    Path(output_dir).mkdir(parents=True, exist_ok=True)
    outlier_mask = detect_outliers_iqr(df[col])
    print(f"外れ値検出: {outlier_mask.sum()} / {len(df)} "
          f"({outlier_mask.sum()/len(df)*100:.1f}%)")
 
    Q1, Q3 = df[col].quantile(0.25), df[col].quantile(0.75)
    IQR = Q3 - Q1
    lower, upper = Q1 - 1.5 * IQR, Q3 + 1.5 * IQR
 
    # ① 除外
    df_drop = df[~outlier_mask].copy()
    # ② クリッピング
    df_clip = df.copy()
    df_clip[col] = df_clip[col].clip(lower=lower, upper=upper)
    # ③ 対数変換(正値のみ)
    df_log = None
    if df[col].min() > 0:
        df_log = df.copy()
        df_log[f"{col}_log"] = np.log1p(df_log[col])
 
    # 比較グラフ
    fig, axes = plt.subplots(1, 3, figsize=(18, 5))
    axes[0].hist(df_drop[col], bins=30, alpha=0.7, color="steelblue")
    axes[0].set_title(f"① 除外 (n={len(df_drop)})")
    axes[1].hist(df_clip[col], bins=30, alpha=0.7, color="orange")
    axes[1].set_title(f"② クリップ [{lower:.1f}, {upper:.1f}]")
    if df_log is not None:
        axes[2].hist(df_log[f"{col}_log"], bins=30, alpha=0.7, color="green")
        axes[2].set_title("③ 対数変換 (log1p)")
    else:
        axes[2].text(0.5, 0.5, "対数変換不可\n(0以下の値あり)",
                     ha="center", va="center", transform=axes[2].transAxes)
 
    plt.suptitle(f"'{col}' 外れ値処理の比較", fontsize=14)
    plt.tight_layout()
    fig.savefig(f"{output_dir}/outlier_comparison_{col}.png",
                dpi=150, bbox_inches="tight")
    plt.close(fig)
    print(f"[OK] Comparison plot saved.")
 
    return {"drop_n": len(df_drop), "lower": lower, "upper": upper}

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
探索的ノートブックをテスト付き6モジュールへ約25分で分解する、再現可能な構成
データリーク検出を CLAUDE.md に組み込み、11特徴量中3件の漏洩を早期に潰した実例
Optuna 100試行で RMSE 0.0421→0.0388、pytest・実行スクリプトまで含む本番ワークフロー一式
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Claude Code2026-04-25
Claude Code × uv で Python 環境を瞬速構築する — pip より 10 倍速いパッケージ管理の現場活用
Rust製の高速Pythonパッケージマネージャー「uv」をClaude Codeと組み合わせた開発環境構築を解説。pipの10〜100倍速い環境セットアップと、Claude Codeによる依存関係管理の自動化を実践的に紹介します。
Claude Code2026-04-21
Claude Code × Python ハイブリッド開発パターン集 — トークン50%削減の実装ガイド
Claude Code と Python を役割分担で組み合わせる実装パターンを、動くコードと共に7つ紹介します。ログ解析、データ変換、定期バッチ、CI/CD 統合まで、実際の本番運用で削減効果を検証した設計例です。
Claude Code2026-07-17
テーブルが「… 2,847 more rows」で切れていた朝 — 描画上限とトークン計上を切り離して、ツール出力を設計し直す
Claude Code 2.1.209 で 200 行超の markdown テーブルは先頭 200 行+残り件数の表示になりました。省略されるのは描画だけで、モデルは全行を受け取ります。この差を測り、ツール出力を集約型へ組み替える設計をまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →