AI 辅助数据分析:让模型写 Notebook 与查数据
数据分析的工作大量发生在 Notebook 里:读取数据、做探索性分析、训练模型、画图、写结论。这个过程里有很多重复劳动,也很依赖经验。AI 编码助手现在可以直接在 Jupyter、Colab 这类环境中帮你生成代码、解释输出、定位报错。本文梳理 AI 在数据分析中的角色、主流 Notebook AI 能力、一条可落地的工作流、可直接套用的提示词模板,以及一个完整示例,最后给出常见陷阱与避坑要点。
AI 在数据分析中的角色
把 AI 放在「协作者」而不是「替身」的位置上,效果最好。在数据分析场景里,AI 主要承担四类任务:
- 生成样板代码。读取 CSV、做分组聚合、画一张图,这类结构清晰但不想手敲的代码,交给 AI 很快。
- 解释结果与报错。把一段报错的 traceback 或一个看不懂的输出贴给 AI,让它用自然语言讲清楚哪里出了问题。
- 给出分析思路。当你面对一张新表不知道从何下手,AI 可以建议 EDA 顺序、该画哪些图、该关注哪些分布。
- 改写与重构。把一堆实验性的单元格整理成可复用的函数或脚本。
需要守住的边界是:AI 给出的代码和结论都必须由你验证。它不知道你数据的真实含义,也可能编造不存在的列名。下文会专门讲这些陷阱。
主流 Notebook AI 能力
Jupyter AI
Jupyter AI 是 Project Jupyter 官方的开源扩展,把 AI 智能体接入 JupyterLab。它的核心能力包括:
- 聊天侧边栏。可以在左侧面板里开多个聊天线程,向 AI 提问,并能把笔记本单元格或文件作为附件拖进去提供上下文。
- AI personas(智能体角色)。一个 persona 背后可以是某个模型或外部智能体,比如 Claude、Codex、GitHub Copilot、Gemini 等,通过 LiteLLM 接入大量模型。
- Notebook 工具。AI 可以查看当前活动笔记本或单元格、创建和编辑笔记本、通过内核运行代码单元格。
- MCP 与 ACP 集成。可以通过自定义 MCP 服务器把额外工具接进聊天,让智能体在获得你授权后操作工作区。
返回的代码块带有快捷工具条,可以一键复制到剪贴板、作为单元格插入到当前单元格上/下方,或替换当前单元格。
Google Colab 的 AI 助手
Google Colab 在 2025 年发布了 AI-first 版本的 Colab,由 Gemini 2.5 Flash 驱动,定位是「写代码的搭档」。它提供的能力包括:
- 对话式代码生成与转换。用自然语言让 Colab 生成函数、样板代码,或对现有代码做整体重构,改动以 diff 视图呈现供你审阅。
- 智能报错修复。这是 Colab 最受欢迎的 AI 功能之一,出错时会在笔记本内迭代给出修复建议。
- Data Science Agent(数据科学智能体)。可以上传文件或引用 BigQuery 表,让智能体自主生成分析计划、执行代码、对结果做推理并给出发现;执行过程中你还能用自然语言反馈来纠偏。
- 多种形式的交互。底部工具栏的 Gemini 入口适合快速指令,侧边面板适合深入讨论。
在企业版(Colab Enterprise / Gemini in Colab Enterprise)中,官方文档明确列出:与笔记本对话、代码补全与生成、解释代码单元格、解释并修复错误这几项能力。
GitHub Copilot 在 Notebook 中的能力
GitHub Copilot 对 Jupyter Notebook 的支持主要体在 VS Code 里:单元格内补全、针对单元格的 Copilot Chat、以及生成与编辑 Notebook 内容都是原生支持的。对于 JupyterLab 原生界面,社区有 Notebook Intelligence(NBI)这个开源扩展,它接入 GitHub Copilot,提供单元格内联补全、Copilot Chat、用 /newNotebook 等命令从提示生成笔记本等能力。
需要明确的是,Copilot 对单个单元格理解很好,但跨多个单元格的「状态感知」相对弱:如果一个变量在 8 个单元格之前定义、当前单元格要引用它,模型有时把握不准。应对办法是保持上下文紧凑:用干净的内核、起清晰的变量名、笔记本别长过几十个单元格就及时重构成 .py 脚本。
典型工作流
把 AI 嵌进下面这条主线,而不是跳过它:
- 加载数据。让 AI 生成读取 CSV / Parquet / 数据库的代码,并给出基本的类型推断。
- 探索性数据分析(EDA)。检查缺失值、分布、相关性,画关键图表。这一步最该让 AI 给思路,但每个结论你都要自己确认。
- 建模或统计。做回归、分类、聚类,或用 pandas 做分组统计。让 AI 写训练与评估代码,你来选方法和解释指标。
- 可视化与结论。把结果画成清晰的图,用 markdown 单元格写下结论。让 AI 帮忙美化图表、写解读,但结论的责任在你。
提示词模板
好的提示词能显著降低 AI 胡编的概率。两条原则最关键:给 schema、要可复现。
给 schema 的模板
我有一张名为 orders 的表,列如下:
- order_id: 字符串,订单编号,唯一
- user_id: 字符串,用户编号
- amount: 浮点数,订单金额(单位:元)
- created_at: 字符串,格式为 YYYY-MM-DD,下单日期
- channel: 字符串,取值为 app / web / offline
请用 pandas 写出代码:按 channel 分组,计算每组订单数、总金额、平均金额,
并显示前 10 行结果。只使用上面列出的列名,不要编造其他列。
要可复现的模板
请用 pandas 完成下面的任务,要求:
1. 从 reproducible 出发,设置随机种子为 42。
2. 不要读取本地不存在的文件,示例数据用 DataFrame 构造。
3. 每一步都加注释,说明它在做什么。
4. 不要使用未定义的变量。
5. 最后打印关键中间结果,方便我核对。
把列名、类型、取值范围直接写进提示词,能大幅减少「幻觉列名」这类问题。
示例:让 AI 生成 pandas 分析与 Plotly 图表
下面是一段由 AI 生成的、可直接运行的示例:统计各渠道订单表现,并用 Plotly 画一张柱状图。注意它只使用了上文中明确定义的列。
import pandas as pd
import plotly.express as px
# 构造可复现的示例数据,便于核对
df = pd.DataFrame({
"order_id": [f"o{i}" for i in range(1, 11)],
"user_id": ["u1", "u2", "u1", "u3", "u2", "u4", "u1", "u3", "u4", "u2"],
"amount": [120.5, 80.0, 200.0, 45.5, 99.0, 300.0, 60.0, 150.0, 75.5, 210.0],
"created_at": [
"2026-01-01", "2026-01-01", "2026-01-02", "2026-01-02",
"2026-01-03", "2026-01-03", "2026-01-04", "2026-01-04",
"2026-01-05", "2026-01-05",
],
"channel": [
"app", "web", "app", "offline", "web",
"app", "offline", "web", "app", "offline",
],
})
# 按渠道分组聚合
summary = (
df.groupby("channel")
.agg(order_count=("order_id", "count"),
total_amount=("amount", "sum"),
avg_amount=("amount", "mean"))
.reset_index()
)
print(summary)
# 用 Plotly 画柱状图,展示各渠道总金额
fig = px.bar(
summary,
x="channel",
y="total_amount",
title="各渠道订单总金额",
labels={"total_amount": "总金额(元)", "channel": "渠道"},
)
fig.show()
这段代码刻意满足三点:只用了提示词里给出的列、构造了可复现的示例数据、每步都有注释。你拿去跑之前,仍应确认 amount 的单位和 channel 的取值是否和真实数据一致。
陷阱
AI 在数据分析里最常见的两类失误,都来自它「不知道你的数据」。
幻觉列名
模型可能凭直觉写出 df['customer_name']、df['price'] 这种提示词里没给、真实表里也不存在的列。后果是代码一跑就 KeyError。规避办法:
- 提示词里显式列出列名与类型,并写明「只使用上面列出的列」。
- 拿到代码先
print(df.columns)核对,再跑后续逻辑。 - 如果列名来自真实文件,先把
df.dtypes的输出贴给 AI,让它基于真实 schema 写代码。
误读 dtype
模型容易把看起来像数字的列当成数值,或反过来。典型问题包括:
- 把存成字符串的日期当数值处理,做加减或求均值得到无意义结果。
- 把含缺失值、被 pandas 自动推断为
object的金额列直接求均值,其实里面混了脏字符。 - 把分类变量(如
channel)当有序数值喂给模型,导致错误结论。
规避办法:
- 写代码前先跑
df.info()和df.dtypes,把真实类型告诉 AI。 - 对日期用
pd.to_datetime显式转换;对金额先pd.to_numeric(errors="coerce")再处理。 - 任何聚合结果出来后,先抽查几条原始记录,确认口径对得上。
还有一个更隐蔽的坑:AI 给的「结论」可能和数据对不上。它有时会顺手编一个听起来合理的洞察。所以图表和统计量你必须自己能解释,不能只因为模型说「可见某某趋势」就采纳。
小结
AI 能显著提升 Notebook 数据分析的效率,但定位应当是协作者而非替身。在 Jupyter AI、Colab AI 助手、GitHub Copilot 等工具的帮助下,你可以更快完成代码生成、报错排查和思路启发。要让它可靠,关键是:给清 schema、要求可复现、对列名和数据类型保持怀疑、对结论亲自验证。把「加载数据、EDA、建模、可视化」这条主线交给 AI 提速,把「判断与结论」留给自己负责,是这套工作流最稳的用法。
参考与延伸阅读
- Jupyter AI 官方文档:聊天界面、AI personas、Notebook 工具与 MCP/ACP 集成说明。https://jupyter-ai.readthedocs.io/en/latest/
- Google Colab 官方介绍与 Gemini 能力(含 Data Science Agent、代码生成与报错修复):https://developers.google.com/colab
- Notebook Intelligence(Jupyter 官方博客):在 JupyterLab 中接入 GitHub Copilot 的开源扩展,含内联补全与
/newNotebook等能力。https://blog.jupyter.org/introducing-notebook-intelligence - pandas 官方文档:数据结构、分组聚合与类型转换 API。https://pandas.pydata.org/docs/
- Plotly Python 官方文档:交互式图表绘制。https://plotly.com/python/