📌 内容摘要

  • Jupyter Notebook 是数据分析的主战场,Claude 可以在每个分析环节提供代码生成、结果解读、错误调试三类支持。
  • 本文覆盖数据分析完整工作流:数据摸底→清洗→探索性分析→可视化→统计建模→报告输出。
  • 重点提供每个环节的高质量 Prompt 模板——把数据描述清楚,Claude 就能生成可直接运行的分析代码。
  • 附 Jupyter Magic Command 集成方案:在 Notebook 内直接调用 Claude API,无需切换窗口。

一、Claude 在数据分析中能做什么?

数据分析师在 Jupyter Notebook 里的时间大致分三类:写分析代码、解读结果、调试报错。Claude 在这三类任务上都能显著提速,但使用方式不同:

任务类型 Claude 的价值 最佳使用方式
代码生成 把分析思路翻译成可运行的 pandas/matplotlib/sklearn 代码 描述数据结构 + 分析目标
结果解读 把统计数字、图表、模型输出翻译成业务语言 粘贴输出结果 + 业务背景
调试报错 快速定位错误原因,给出修复方案 粘贴完整错误信息 + 相关代码
💡 关键习惯:先告诉 Claude 你的数据长什么样
数据分析的 Prompt 质量高度依赖数据描述的质量。每次请求前,先把数据的基本信息给 Claude——字段名、数据类型、大致规模、业务含义。这个15秒的准备工作,能让生成的代码准确率从60%提升到90%+。

二、快速数据摸底

拿到一份新数据集,第一步是快速了解它的全貌。以下是标准的数据摸底 Prompt:

【数据摸底 Prompt 模板】

我有一个数据集,基本信息如下:
- 文件格式:[CSV / Excel / JSON 等]
- 大致规模:[行数 × 列数,如 "50000行 × 23列"]
- 字段说明:
  - user_id: 用户唯一标识
  - order_date: 订单日期(YYYY-MM-DD 格式)
  - product_id: 商品ID
  - amount: 订单金额(元)
  - status: 订单状态(completed/cancelled/refunded)
  [继续列出其他字段...]
- 业务背景:[这份数据来自哪里,用于什么分析]

请生成一份完整的数据探索代码,包含:
1. 基础信息(shape、dtypes、内存占用)
2. 缺失值统计(各列缺失比例、可视化)
3. 数值列的描述性统计(均值/中位数/标准差/分位数)
4. 类别列的值分布(各类别占比)
5. 时间列的时间范围和分布
6. 异常值初步检测(IQR 方法)
7. 字段间的相关性热力图

代码风格:每个分析块加注释说明目的,
输出要有足够的可读性(用 display() 而不是 print())。

生成摸底代码后,运行结果粘贴给 Claude 解读:

【结果解读 Prompt】

以下是数据摸底的结果输出:
[粘贴 Notebook 输出]

这是一个电商订单数据集,我要做用户购买行为分析。

请告诉我:
1. 数据质量方面有哪些需要关注的问题?
2. 有哪些异常或值得深挖的发现?
3. 基于这些基础信息,你建议我优先分析哪些方向?
4. 在正式分析之前,有哪些数据清洗工作是必须做的?

三、数据清洗代码生成

【数据清洗 Prompt 模板】

基于数据摸底的结果,我需要做以下数据清洗:
[从摸底结果里列出发现的问题,如:]
- order_date 列有约3%的空值
- amount 列有负数(可能是退款记录或数据错误)
- user_id 有重复(同一用户多次购买,属于正常)
- product_id 有约200个格式不一致(大小写混用)
- status 列有"COMPLETED"和"completed"混用

数据框名称:df
请生成完整的清洗代码,要求:
- 每个清洗步骤单独一个代码块,加注释说明操作原因
- 清洗前后打印对比(如空值数量变化)
- 保留原始数据的备份(df_raw = df.copy())
- 记录清洗操作日志(方便以后复现)
- 最后输出清洗后数据集的基本信息确认

对于模糊情况(如负数金额)提供两种处理方案,
说明各自的适用条件,我来决定用哪种。

四、探索性数据分析(EDA)

单变量分析

分析 df 中的 amount 列(订单金额,单位:元)。

数据背景:
- 这是一个 B2C 电商平台
- 商品价格范围大约在 10-5000 元
- 数据时间范围:2025年全年

请生成以下分析代码:
1. 基础统计量(含偏度、峰度)
2. 分布直方图(合理的 bin 数,标注均值和中位数)
3. 箱线图(识别离群值)
4. Q-Q 图(检验正态性)
5. 按金额分段的订单数量占比(如 0-100/100-500/500-2000/2000+)

使用 matplotlib + seaborn,图表尺寸合理,
每张图有标题、轴标签、数据来源注释。
图表风格用 seaborn 的 "whitegrid"。

多变量关系分析

分析以下变量之间的关系:
- amount(订单金额)vs order_date(下单时间)
- amount 按 status 分组的分布差异
- user_id 的购买频次分布(RFM 分析前置)

数据框:df,已完成清洗
时间列已转为 datetime 格式

请生成:
1. 订单金额的月度趋势折线图(含置信区间)
2. 不同订单状态的金额箱线图对比
3. 用户购买次数的分布图(长尾分布,用 log scale)
4. 热力图:星期几 × 小时 的订单数量密度

每张图之后加一行注释,说明图表的关键信息
是什么,引导阅读者注意最重要的发现。

五、统计检验和建模

假设检验

我想检验:不同用户来源(source 列:organic/paid/referral)
的平均订单金额是否存在显著差异。

数据框:df
相关列:amount(数值型)、source(类别型,3个类别)

请:
1. 先检验前提条件(正态性检验、方差齐性检验)
2. 根据检验结果选择合适的统计方法:
   - 如果满足前提:单因素方差分析(ANOVA)
   - 如果不满足:Kruskal-Wallis 检验
3. 如果有显著差异,做事后检验(Post-hoc test)找出哪两组之间有差异
4. 计算效应量(Effect size)
5. 用可视化展示各组分布和检验结果

对每个统计结果,用非统计学语言解释其业务含义,
比如"p=0.003 意味着……"

结果解读 Prompt(通用版)

以下是统计检验的输出结果:
[粘贴统计输出]

业务背景:我们在评估不同渠道获取的用户质量差异,
用于指导下季度的营销预算分配。

请用非统计学语言解释:
1. 这个结果说明了什么(结论是什么)
2. 这个结论的置信程度如何
3. 对营销预算分配有什么具体建议
4. 这个分析有什么局限性(结论不能过度泛化的原因)

六、机器学习建模辅助

【建模 Prompt 模板】

任务类型:[分类 / 回归 / 聚类]
目标变量:[列名和含义]
特征变量:[列出可用特征]
数据规模:[行数 × 特征数]
业务约束:[如"模型需要可解释性""预测时间 <100ms"等]

示例——用户流失预测:
任务类型:二分类(预测用户30天内是否流失)
目标变量:churned(0=未流失,1=流失),正负样本比例约 1:9
特征变量:
  - recency: 最近一次购买距今天数
  - frequency: 过去90天购买次数
  - monetary: 过去90天消费总额
  - avg_order_value: 平均订单金额
  - category_diversity: 购买品类数量
业务约束:需要可解释性(便于客服人员理解为何预测流失)

请生成完整的建模代码:
1. 特征工程(标准化/归一化,处理类别变量)
2. 处理类别不平衡(SMOTE 或 class_weight)
3. 模型选择(考虑可解释性要求,推荐梯度提升树)
4. 交叉验证(分层 K-fold,报告 AUC / Precision / Recall)
5. 特征重要性分析
6. 混淆矩阵和 ROC 曲线
7. 一个简单的预测函数,输入用户特征返回流失概率

代码要有完整注释,关键参数说明为什么这样选择。

七、在 Notebook 内直接调用 Claude API

以下代码让你在 Jupyter Notebook 内直接调用 Claude,无需切换到浏览器:

基础集成(推荐先用这个)

# Cell 1:安装和初始化(只需运行一次)
# !pip install anthropic

import anthropic
import pandas as pd
from IPython.display import display, Markdown

client = anthropic.Anthropic()  # 自动读取 ANTHROPIC_API_KEY 环境变量

def ask_claude(prompt: str, context: str = "", model: str = "claude-sonnet-4-6") -> str:
    """
    在 Notebook 里快速调用 Claude

    Args:
        prompt:  你的问题
        context: 可选,粘贴数据摸底结果或报错信息
    """
    full_prompt = f"{context}\n\n{prompt}" if context else prompt

    response = client.messages.create(
        model=model,
        max_tokens=4096,
        system="""你是一名资深数据分析师,擅长 Python 数据分析(pandas/numpy/matplotlib/seaborn/sklearn)。
生成的代码要:
- 可以直接在 Jupyter Notebook 中运行
- 有完整的注释
- 包含必要的错误处理
- 用 display() 展示 DataFrame,用 plt.show() 显示图表""",
        messages=[{"role": "user", "content": full_prompt}]
    )
    return response.content[0].text

def show_analysis(prompt: str, context: str = ""):
    """调用 Claude 并以 Markdown 格式渲染输出"""
    result = ask_claude(prompt, context)
    display(Markdown(result))


# ── 使用示例 ─────────────────────────────────────

# 示例1:生成数据摸底代码
show_analysis(
    prompt="生成一份完整的数据摸底代码",
    context=f"""数据集基本信息:
    Shape: {df.shape}
    列名和类型:
    {df.dtypes.to_string()}
    前5行样本:
    {df.head().to_string()}
    缺失值情况:
    {df.isnull().sum().to_string()}"""
)

# 示例2:解读分析结果
stats_output = df['amount'].describe().to_string()
show_analysis(
    prompt="解读以下统计结果,用业务语言说明关键发现,并建议下一步分析方向",
    context=f"订单金额的统计描述:\n{stats_output}\n\n业务背景:B2C电商平台,全年订单数据"
)

# 示例3:调试报错
error_code = """
df.groupby('user_id')['amount'].agg(['sum', 'count', 'mean'])
.rename(columns={'sum': 'total', 'count': 'freq', 'mean': 'avg'})
.sort_values('total', ascending=False)
"""
error_msg = "AttributeError: 'SeriesGroupBy' object has no attribute 'agg'"

show_analysis(
    prompt=f"这段代码报错了,帮我修复并解释原因:\n\n代码:\n{error_code}\n\n错误:{error_msg}"
)

自动数据摸底(一键生成)

def auto_eda_prompt(df: pd.DataFrame, business_context: str = "") -> str:
    """
    自动生成数据摸底 Prompt,把 df 的关键信息提取出来
    避免每次手动描述数据结构
    """
    # 提取数据基本信息
    info_lines = []
    for col in df.columns:
        dtype = str(df[col].dtype)
        null_pct = df[col].isnull().mean()
        n_unique = df[col].nunique()

        if df[col].dtype in ['int64', 'float64']:
            sample = f"范围 [{df[col].min():.2f}, {df[col].max():.2f}]"
        else:
            top_vals = df[col].value_counts().head(3).index.tolist()
            sample = f"常见值: {top_vals}"

        info_lines.append(
            f"  - {col} ({dtype}): 空值 {null_pct:.1%}, 唯一值 {n_unique}, {sample}"
        )

    data_info = "\n".join(info_lines)

    prompt = f"""数据集信息:
- 规模:{df.shape[0]:,} 行 × {df.shape[1]} 列
- 内存占用:{df.memory_usage(deep=True).sum() / 1024**2:.1f} MB

字段详情:
{data_info}

{f'业务背景:{business_context}' if business_context else ''}

请生成完整的探索性数据分析代码,
重点关注数据质量问题和值得深挖的分析方向。"""

    return prompt


# 使用:
prompt = auto_eda_prompt(df, business_context="电商平台用户行为分析")
show_analysis(prompt)

八、自动化分析报告生成

def generate_analysis_report(
    analysis_results: dict,
    business_question: str,
    audience: str = "业务管理层",
) -> str:
    """
    把分析结果转化为给非技术人员看的报告

    Args:
        analysis_results: 分析结果字典,如 {"月度趋势": "...", "用户分层": "..."}
        business_question: 这次分析要回答的核心业务问题
        audience:          报告的目标受众
    """
    results_text = "\n\n".join(
        f"【{key}】\n{value}" for key, value in analysis_results.items()
    )

    prompt = f"""基于以下数据分析结果,生成一份给{audience}看的分析报告。

核心业务问题:{business_question}

分析结果:
{results_text}

报告要求:
1. 执行摘要(3句话,说明最重要的发现和建议)
2. 关键发现(3-5条,每条有数据支撑)
3. 业务建议(2-3条具体可执行的建议)
4. 分析局限性(1-2条,避免过度解读)

语言风格:简洁、有说服力,用数字说话,
避免统计术语,面向非技术管理层。"""

    return ask_claude(prompt)


# 使用示例:
results = {
    "月度GMV趋势": "2025年GMV总计1.2亿元,Q4环比增长23%,但12月增速明显放缓",
    "用户分层": "高价值用户(消费>5000元)占用户总数的8%,贡献了43%的GMV",
    "渠道分析": "付费渠道获客成本是自然流量的3.2倍,但30天留存率相近(68% vs 71%)",
}

report = generate_analysis_report(
    analysis_results=results,
    business_question="如何优化2026年的用户获取和留存策略?",
    audience="CEO 和市场总监"
)
print(report)

九、常用分析场景 Prompt 速查

时间序列分析

对 df 中的日期列 order_date 和金额列 amount 做时间序列分析:
- 按天/周/月聚合,画趋势图(含7日移动平均线)
- 做季节性分解(STL 分解,分离趋势/季节/残差)
- 检测异常点(超过 3 倍标准差的日期)
- 预测未来30天的趋势(用 Prophet 或 ARIMA,根据数据特征选择)
用中文标注所有图表标题和轴标签。

用户分群(RFM 分析)

基于 df(含 user_id、order_date、amount 列)做 RFM 分析:
分析基准日期:2025-12-31
- 计算每个用户的 R(最近购买距今天数)、F(购买频次)、M(消费总额)
- 用分位数法对 RFM 分别打分(1-5分)
- 根据 RFM 组合定义用户标签(忠实客户/流失风险/新客等)
- 可视化各群体的规模和价值贡献
- 针对每个用户群给出运营策略建议

A/B 测试结果分析

分析 A/B 测试结果:
df 包含 group(control/treatment)、converted(0/1)、revenue(数值)列
实验持续时间:14天,总样本量约10万

请做:
1. 样本量和分组均衡性检验
2. 转化率的显著性检验(Z 检验),计算 p 值和置信区间
3. 收入的显著性检验(t 检验或 Mann-Whitney)
4. 效应量计算(Cohen's d 或相对提升比例)
5. 统计功效分析(这个样本量是否足够检测到预期效果)
6. 结论:是否应该全量上线实验组?

常见问题

Q:Claude 生成的 pandas 代码有时候 API 已经过期,怎么办?
Claude 的训练数据截止到 2025 年 8 月,对于 pandas 2.x 的某些新语法和废弃 API 可能有偏差。遇到 FutureWarning 或 DeprecationWarning 时,把警告信息粘贴给 Claude:"这段代码运行时出现以下警告,请用最新的 pandas 2.x 写法更新代码"——通常能快速修复。

Q:数据有隐私信息,能直接粘贴给 Claude 吗?
不建议粘贴真实的用户数据。描述数据结构时,可以用脱敏的示例数据(把真实 ID 换成"user_001"、真实金额换成示意数字)。更好的方式是只提供 df.dtypesdf.describe()df.head(3) 这类结构性信息,不包含真实的行级数据。

Q:Notebook 里的图表如何让 Claude 帮忙解读?
把图表另存为 PNG,在 claude.ai 网页端上传图片进行解读;或者把图表的数据(如 df.groupby('month')['amount'].mean().to_string())以文本形式粘贴给 Claude,让它根据数据描述图表的规律。通过 API 传图片也可以,参考本系列的 Vision API 文章。

总结

在 Jupyter Notebook 里用好 Claude 的关键只有一条:把数据描述清楚。字段名、数据类型、业务含义、分析目标——这四样信息给齐了,Claude 生成的代码基本可以直接运行,不需要反复修改。本文的所有 Prompt 模板都遵循这个原则,可以按照实际数据直接替换其中的变量描述来使用。对于需要频繁重复的数据集,把数据描述保存在一个 Markdown Cell 里,每次新建分析 Notebook 时直接复制,避免重复输入。