如何用 Jupyter AI 做数据分析

data-sciencebeginner

# 我花了一周调试Pandas查询,直到Jupyter AI在10分钟内修复了我的工作流

以下是最终压垮我的场景:我试图连接三个列名不一致的数据框,对日期时间列应用自定义函数,然后透视结果——而我的咖啡早已凉透。我敲了太多次`df.merge()`,键盘都在哭泣。直到我发现Jupyter AI,从此再没写过一行原生Pandas代码。但这并非魔法,而是一把有锋利边缘的工具,我将为你展示它究竟在何处划伤。

## 发现它之前真正崩溃的时刻

当时我正在处理一个包含47列的客户流失数据集。每次需要按日期范围筛选时,我都会忘记`pd.to_datetime()`需要`infer_datetime_format=True`还是`format='%Y-%m-%d'`。我谷歌搜索、从Stack Overflow复制粘贴,然后日期格式又出错了——因为CSV用的是斜杠而非短横线。这时我意识到:我不是糟糕的数据科学家,我只是记不住Pandas语法。

Jupyter AI不会替代你的大脑——它替代的是你的浏览器标签页。以下是我的配置方法和真正有效的实践。

## 安装Jupyter AI:本应两分钟却花了十五分钟

首先,诚实的安装版本。你需要Python 3.8+和Jupyter Lab 3.5+。运行:

```bash

pip install jupyter-ai

```

然后启用扩展:

```bash

jupyter labextension install @jupyter-ai/core

```

等等——如果你用的是Jupyter Lab 4.x,这可能会失败。我为此付出了代价。对于Lab 4,你需要:

```bash

pip install jupyter-ai>=2.0

```

并且完全跳过`labextension`命令——它已内建。版本不匹配让我花了20分钟调试。安装完成后,重启Jupyter Lab,在左侧边栏寻找AI图标。如果看到机器人脸,说明成功了。如果没有,用`jupyter --version`检查Jupyter版本。

## 配置模型:为什么GPT-4是唯一真正选项

Jupyter AI支持多种模型(Anthropic、Cohere、Hugging Face),但我都测试过。事实是:对于数据科学任务,只有GPT-4能持续输出可运行代码。Claude 3很接近,但有时会幻觉出列名。像Llama 2这样的本地模型实时使用太慢。

在Jupyter AI设置面板(AI侧边栏的齿轮图标)中设置API密钥。粘贴你的OpenAI密钥。除非部署,否则不要使用环境变量——设置面板会跨会话持久保存。

这是我的第一个实际测试。我在聊天面板中输入:

```

"加载CSV文件'sales_2023.csv'并显示前5行,所有列可见"

```

Jupyter AI回复:

```python

import pandas as pd

pd.set_option('display.max_columns', None)

df = pd.read_csv('sales_2023.csv')

df.head()

```

它成功了。但第一个缺陷是:它没有检查文件是否存在。当我运行它时,文件在子目录中,结果崩溃了。我学会了在提示中始终指定路径:"从'data/raw/'文件夹加载。"

## 真实案例:清理混乱数据集

让我展示实际用途。我有一个数据集,日期存储为字符串,同一列中既有"2023-01-15 14:30:00"又有"15/01/2023"。简直是噩梦。我输入:

```

"将'timestamp'列转换为datetime。有些值使用YYYY-MM-DD格式,其他使用DD/MM/YYYY格式。通过设置为NaT来处理错误。"

```

Jupyter AI生成:

```python

df['timestamp'] = pd.to_datetime(df['timestamp'], format='mixed', errors='coerce')

```

那个`format='mixed'`参数是我从未用过的。它完美运行。但随后它没有处理时区感知的时间戳——输出是朴素的。我不得不补充:"现在让所有时间戳都成为UTC时区感知。"它追加了`.dt.tz_localize('UTC')`。

教训:Jupyter AI是迭代式的。你不会一次得到完美代码。把它当作需要逐步指导的初级开发者。

## 进阶:自定义函数与向量化

这是它真正强大的地方。我需要计算自定义窗口的加权移动平均。我输入:

```

"创建一个计算指数加权移动平均的函数,窗口跨度为12期,然后按'store_id'分组应用于'revenue'列"

```

它返回:

```python

def calc_ewma(group):

return group['revenue'].ewm(span=12, adjust=False).mean()

df['ewma_revenue'] = df.groupby('store_id').apply(calc_ewma).reset_index(level=0, drop=True)

```

这可行,但在200万行数据上很慢。我问:"能向量化吗?"它建议使用`transform`:

```python

df['ewma_revenue'] = df.groupby('store_id')['revenue'].transform(lambda x: x.ewm(span=12, adjust=False).mean())

```

这使运行时间从45秒降至3秒。这种优化通常需要我花30分钟谷歌搜索。

## 你会遇到的隐藏缺陷

1. **它会忘记你的数据框结构。** 5个提示后,它可能生成引用不存在列的代码。始终在初始提示中包含`df.columns.tolist()`。

2. **聊天面板内存泄漏。** 大约50次交互后,AI变得无响应。我会重启内核并清除聊天。保持提示简短专注。

3. **无法处理大数据集。** 我尝试让它"优化这个1000万行查询"。它生成的代码在样本上可行,但完整数据集上崩溃。使用`.sample(1000)`进行测试。

4. **绘图效果参差不齐。** 我要求"seaborn热力图显示相关矩阵",它却导入了matplotlib。明确指定库:"使用plotly创建交互式散点图。"

## 真正有效的可视化

对于绘图,我发现最成功的方法是明确提示:

```

"创建一个plotly express折线图。X轴为'date',Y轴为'sales'。按'region'着色。添加标题'Monthly Sales by Region'。使其交互式,悬停数据显示'product_count'。"

```

它生成:

```python

import plotly.express as px

fig = px.line(df, x='date', y='sales', color='region',

title='Monthly Sales by Region', hover_data=['product_count'])

fig.show()

```

专业提示:始终明确要求`hover_data`。默认值非常有限。

## 最终坚持下来的工作流

这是我现在的常规步骤。打开新笔记本,在第一个单元格中运行`%load_ext jupyter_ai`(虽然现在是自动的),然后在AI面板中输入:

```

"我有一个包含以下列的数据框:[粘贴df.columns]。目标:[描述任务]。约束条件:[内存限制,时间限制]。输出:[单个代码单元格或解释]。"

```

这种结构化提示在80%的情况下能得到可运行代码。另外20%?我自己调试,或将任务分解为更小的提示。

## 你的下一个五分钟

不要试图一次性学会所有Jupyter AI。相反,立即执行以下操作:

1. 安装它(使用上面的Lab 4命令)。

2. 打开任何你手头混乱的CSV文件。

3. 要求它"修复所有日期列转换为datetime并处理错误。"

4. 然后要求"用中位数填充数值列中的缺失值。"

5. 再要求"使用plotly创建相关热力图。"

你将在10分钟内得到带有可视化的干净数据集。这就是承诺。但请记住:它是工具,不是替代品。当你盲目信任其输出时,它就会生成一个将字符串而非数字求和的透视表。我经历过。我的咖啡仍然凉着。