📌 内容摘要
- Jupyter Notebook 是数据分析的主战场,Claude 可以在每个分析环节提供代码生成、结果解读、错误调试三类支持。
- 本文覆盖数据分析完整工作流:数据摸底→清洗→探索性分析→可视化→统计建模→报告输出。
- 重点提供每个环节的高质量 Prompt 模板——把数据描述清楚,Claude 就能生成可直接运行的分析代码。
- 附 Jupyter Magic Command 集成方案:在 Notebook 内直接调用 Claude API,无需切换窗口。
一、Claude 在数据分析中能做什么?
数据分析师在 Jupyter Notebook 里的时间大致分三类:写分析代码、解读结果、调试报错。Claude 在这三类任务上都能显著提速,但使用方式不同:
| 任务类型 | Claude 的价值 | 最佳使用方式 |
|---|---|---|
| 代码生成 | 把分析思路翻译成可运行的 pandas/matplotlib/sklearn 代码 | 描述数据结构 + 分析目标 |
| 结果解读 | 把统计数字、图表、模型输出翻译成业务语言 | 粘贴输出结果 + 业务背景 |
| 调试报错 | 快速定位错误原因,给出修复方案 | 粘贴完整错误信息 + 相关代码 |
数据分析的 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.dtypes、df.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 时直接复制,避免重复输入。