数据处理
数据分析里最贵的时间不是分析本身,是把脏数据变干净、把变量摆整齐、把图画得看得懂。这三件事恰好是 Claude Code 最擅长的。
不管你是数据分析师、SRE、产品经理还是独立开发者,都会遇到临时需要处理一份数据的场景。老板扔过来一份用户导出的 CSV,让你算个留存;同事发一份订单快照,让你抽出 top 5 商品。这类任务通常只做一次,不值得写一个正经项目,但又不能纯手工在 Excel 里点。这时候 Claude Code 就是最好的中间态。
场景一:清洗一份格式混乱的 CSV
假设你收到一份 users_export.csv,里面有八千行数据,问题一堆。日期列有 2026-01-15、01/15/2026、Jan 15, 2026 三种格式;邮箱有大小写不一;手机号夹杂着 +86 138-0013-0000 和 13800130000 两种;有些行的 city 字段是空字符串,有些是 null 字符串。
直接把文件路径丢给 Claude Code。
> data/users_export.csv 是从后台导的用户数据,格式很乱。
> 帮我用 pandas 写一份清洗脚本,输出 data/users_clean.csv:
> 1. 日期列统一为 ISO 8601 格式 YYYY-MM-DD
> 2. 邮箱统一小写
> 3. 手机号去掉所有空格、连字符、+86 前缀,只保留 11 位纯数字
> 4. city 字段的空字符串和字符串 null 都归一为真正的 NaN
> 5. 删除完全重复的行
> 6. 输出一份 data/cleaning_report.md,列出每一列做了什么处理、影响了多少行Claude Code 会先 head 看几行,感受一下数据长什么样,然后写脚本、跑一遍、拿到统计结果,最后把 markdown 报告也一起产出。你会看到类似这样的会话流。
● Bash(head -5 data/users_export.csv)
● Bash(wc -l data/users_export.csv)
● Write(scripts/clean_users.py)
● Bash(python scripts/clean_users.py)
● Write(data/cleaning_report.md)
清洗完成。8143 行输入,8027 行输出:
- 日期:识别 3 种格式,全部转为 ISO 8601
- 邮箱:3211 行大小写不一,全部转小写
- 手机号:4802 行含格式化字符,已归一
- city:193 行空字符串,48 行字符串 null,全部转 NaN
- 去重:删除 116 行完全重复这个流程和你自己写脚本比,快在两个地方。第一,它自己会去 head 探数据,不用你先描述。第二,跑完之后自动出统计报告,你不用再自己写一段 .info() 或 .describe() 的代码。
让它跑起来
清洗任务最好在会话开始时就把 Bash(python:*) 的权限批一次全会话,不然每次 python scripts/xxx.py 都要点确认,节奏很碎。
场景二:连本地 SQLite 或 DuckDB 做分析
数据不是 CSV 而是一份 SQLite 或 DuckDB 数据库,情况差不多。DuckDB 尤其适合数据分析场景,因为它可以直接查 CSV、Parquet、JSON 文件,不用先导入。
> 我这里有一份 data/orders.duckdb,里面有 orders、users、products 三张表。
> 帮我分析:
> 1. 过去 30 天下单最多的 top 10 用户,输出用户 ID、下单次数、总金额
> 2. 每个商品类别的复购率(同一用户在 30 天内下过第二单的比例)
> 3. 结果保存到 outputs/analysis_2026-07.mdClaude Code 会先跑一个 DESCRIBE 或 SHOW TABLES 感受 schema,然后写 SQL、跑查询、把结果格式化成 markdown 表格。中间它会跟你确认一次日期口径,例如"过去 30 天是按下单时间 created_at 还是按支付时间 paid_at",你回一句 created_at 它就继续走。
一次性分析里 DuckDB 的组合拳很好用。你可以让 Claude Code 直接写这样的一行 SQL。
SELECT city, COUNT(*) AS orders
FROM read_csv_auto('data/orders_2026-07.csv')
JOIN read_parquet('data/users.parquet') USING (user_id)
GROUP BY city
ORDER BY orders DESC
LIMIT 10;不同源的文件混着查,一条 SQL 出结果,比 pandas 灵活得多。
场景三:数据可视化
出图的场景一般是分析完之后紧接着的一步。让 Claude Code 直接把上一步的分析结果画出来。
> 用 matplotlib 把 top 10 用户的下单次数画成横向条形图,
> 保存到 outputs/top10_users.png。要求:
> - 图片宽 1200 高 800
> - 数值标在条形右侧
> - 用户 ID 太长的显示前 8 位再加省略号
> - 标题用 2026 年 7 月 top 10 活跃用户
> - 用中文字体,避免出现方框matplotlib 的中文字体是个老大难,Claude Code 会主动帮你处理。它可能会在脚本开头加上 plt.rcParams['font.family'] = ['Microsoft YaHei', 'PingFang SC', 'sans-serif'],或者提示你系统里没找到中文字体,让你确认要不要用 matplotlib.font_manager 指定一个 ttf 路径。
如果你要交互式的图表,把 matplotlib 换成 plotly,让它输出 HTML。
> 把上面的图换成 plotly,输出成 outputs/top10_users.html,
> 鼠标 hover 时显示用户 ID 全称、下单次数、总金额用 -p 模式做 shell 管道
这是数据处理场景最爽的一种用法。把 Claude Code 直接塞进 shell 管道里,让它当一个可编程的分析师。
# 一句话让它对一份 CSV 出洞察
cat data/orders_2026-07.csv | claude -p "分析这个订单数据集,用中文给出 top 5 洞察,每条不超过 40 字"
# 结合 curl 和 jq 处理 API 数据
curl -s https://api.example.com/events | jq '.[] | select(.type=="error")' \
| claude -p "把这些错误按类型聚合,输出 markdown 表格"
# 从日志里抽异常
tail -1000 app.log | claude -p "找出最近 5 分钟的异常堆栈,按频次排序"-p 模式跑完就退出,非常适合塞进定时任务或者 shell 脚本。数据小、任务明确、只做一次的场景,用 -p 比进交互 REPL 快得多。
别把大文件全塞管道
Claude Code 会把 stdin 全部读进上下文。几十 MB 的 CSV 直接 cat 进去会撑爆上下文窗口。更合适的做法是先 head -n 50 让它看 schema,再让它写脚本处理全量数据。
一次性脚本 vs 可复用工具
数据处理里一个反复出现的取舍是:这个脚本要不要沉淀成可复用的工具。经验法则很简单。
- 只跑这一次的临时任务,让 Claude Code 直接写在
scripts/目录下,加个日期后缀,跑完就归档到scripts/archive/。别浪费时间写单元测试。 - 一个月内会再用第二次的任务,让它做成一个带
argparse的 CLI,写清 help 文本,加一份最小的 README。放到tools/目录。 - 团队里其他人也要用的任务,才值得包成 Python 包或者 npm 包,写 CI、写测试、写完整文档。
在会话开头直接告诉 Claude Code 你要哪一档,它会自动调整投入。你说"临时用完就丢",它就不会写测试;你说"要复用",它就会主动帮你补上 argparse、log、异常处理。
一个可以偷懒的规范
在项目 CLAUDE.md 里加一句:一次性脚本放 scripts/oneoff/,正式工具放 tools/。以后你说这个是一次性的它就自动放对目录,你说要沉淀它就自动升级到工具级别,省得每次都要提醒。
数据处理场景的核心心法是:Claude Code 让你可以更晚地决定这份代码值不值得沉淀。先解决问题,再决定要不要留下来。这在过去写 Python 或 R 脚本的时候是很难做到的,因为写脚本本身就有成本。现在这个成本被压到几乎为零,你可以更自由地做数据分析。