先说我干了什么
我是做数据开发、数据清洗和数据分析的。上月底,业务团队直接甩给我 35 个 CSV 文件,说是“全国城市空气质量公开监测数据,帮我们做一份月报分析”。
这种数据分析需求,我接过不下几十次。文件一到手,按老习惯先用 head 看一眼——结果一看就知道不简单:单个文件有 378 列,375 个城市横向排开,日期、小时、指标纵向堆叠。再看数据规模,一个月合计 465 万行。空值呢?我顺手统计了一下,缺失率 14.58%,足足 68 万多个单元格为空,还有不少是纯空格冒充有效数据。更麻烦的是,有几天的文件行数明显异常,7 月 24 号只有 289 行,正常应该是 360 行——也就是说,那天大约有 5 个小时的空气质量监测数据直接缺失了。
如果放在以前,这类 CSV 数据处理工作我通常会这样做:写一段 pandas 脚本,先合并,再清洗,再聚合,最后自己一轮轮检查哪些日期的数据有问题。真正耗时间的,其实不是写代码,而是反复核对异常。上个月我就翻过一次车——某个字段缺失值没清理干净,导致均值被拉偏,报告交上去后业务方当场问我“这个数字为什么和统计局对不上”。我解释了半天,场面相当尴尬。
这次我换了方式。全程通过 TRAE Work 对话式完成,从拿到文件到生成分析报告,前后只用了十来分钟。
怎么干的:四轮对话
第一轮:先让它体检,别急着动手
我的第一句话是:
这一步我一直坚持必须先做。数据情况都没摸清楚就直接开始清洗,和蒙着眼开车没什么区别。TRAE Work 跑完之后,给出的数据体检报告大致如下:
| 体检项 | 结果 |
|---|---|
| 文件结构 | 35 个 CSV,每个 378 列宽表(375 城市 × 15 指标 × 24 小时) |
| 行数异常 | 7/6、7/7、7/20 少 15 行;7/22 只有 302 行;7/24 只有 289 行 |
| 缺失单元格 | 684,815 个,占 14.58%,一部分还是纯空格占位 |
| 换行符 | 行尾混着 r,Excel 一打开就错行 |
和我自己快速扫一遍得到的判断基本一致,但它只用几十秒就把数据问题做了量化、归类和汇总。这里有个很关键的细节:我特意强调“只报告,不修改数据”,它也确实没有擅自清洗原始文件,这点对数据治理和结果可追溯特别重要。
第二轮:规则一次说清
体检结束后,我开始下清洗指令:
TRAE Work 直接生成并执行了脚本,核心逻辑其实就是下面这一小段:
# TRAE Work 生成的核心片段(宽转长 + 缺失标准化)for _, row in raw.iterrows():for city in cities:v = str(row[city]).strip()rows.append({'date': row['date'], 'hour': row['hour'], 'metric': row['type'],'city': city, 'value': float(v) if v and v != 'nan' else None })
最终,35 个 CSV 文件被合并成一张 465.9 万行的标准长表,字段命名规范,数据类型统一,后续无论接 BI 工具还是继续做统计分析都很顺手。说实话,写这段 Python 代码本身并不难,难的是把各种边界情况一次性处理到位——比如空字符串、nan、纯空格、r 行尾残留等。以往这些细节最容易在调试时反复踩坑,这次它基本一次就处理平了。
第三轮:质量复核,专治上次翻车
合并完成后,我没有马上算均值和排名,而是补了一句:
这一步就是专门防我上个月出过的错,这次必须提前把风险堵住。TRAE Work 复核后发现有 8 条记录不达标,问题主要集中在 7/22 和 7/24 两天。对应的处理策略是“标记、保留、统计时排除、并在报告中明确说明”。这样一来,就算源数据本身存在缺口,最后交付的空气质量分析报告依然是透明、可解释、可追溯的。以后再被问“为什么少了”“为什么没算进去”,我也能直接拿依据说话,而不是只能回一句“我也不清楚怎么少了”。
第四轮:直接要成品
最后一句,我直接让它输出成品:
它最终给了我一份可以直接用浏览器打开的完整 HTML 报告,城市排名、柱状图、趋势走势、数据质量说明都包含在里面,完全不用我再额外安装任何可视化工具。
结果:3 小时变 10 分钟
这次最终交付的内容包括:
clean_long.csv:465.9 万行标准长表,可直接导入 BI 工具或数据分析平台clean_daily_aqi.csv:11,682 行“城市×日”聚合表,包含 AQI 等级和数据完整性标记report.html:可视化空气质量月报
报告中得出的几个真实结论如下:
- 7 月全国整体空气质量表现不错,优良天数占比达到 99%,但仍有 65 条“城市×日”记录超过污染线(AQI>100)
- 空气质量最差的是和田地区,日均 AQI 为 169,属于中度污染;喀什以 101 排第二——南疆沙尘影响非常明显
- 空气质量最好的是黔南州和临沧,日均 AQI 仅 17
- 北京 7 月日均 AQI 为 39,优良率达到 100%
- 8 月前四天全国均值比 7 月还要再低一点
如果按以前的手工方式,我最多只能给出一个“全国平均 AQI 是多少”的基础结论;而这次不只是平均值,城市排名、污染日分布、重点城市对比等分析内容全都有了。业务方最关心的“为什么这个月和上个月不一样”,现在也能用数据直接解释清楚。
清洗前长这样——378 列宽表,红格几乎都是缺失值:
清洗后变成了这种标准长表,AQI 等级也自动完成标注:
完整月报页面大致长这样:
数据来源是公开的监测数据整理站:
我把这套流程沉淀成了一个 Skill
这次项目做完后,我把这四步流程固化成了一个可复用的 Skill(数据处理技能)。以后再遇到类似的 CSV 批量清洗、数据整理、月报分析需求,直接整套调用即可:
这套 Skill 的核心价值主要有三点:
- 流程固定:体检→清洗→复核→产出,四个步骤顺序锁定,质量复核不会被跳过——而我上一版报告之所以出问题,根本原因就是漏掉了这一步
- 产物分级落地:原始文件保持只读不改,体检报告、合并长表、质量清单放进
intermediate/,标准表和聚合结果放进output/,任何一个数字都能追溯到对应目录 - HTML 可选:如果需要给业务部门做汇报,就自动生成
report.html;如果只是内部使用,只输出 CSV 即可,不产生多余文件
Skill 的完整定义我放在文末附录里,拿过去就能直接复用,只需要把字段替换成你自己的业务数据即可。
能直接抄的经验
流程就四步:体检 → 清洗 → 复核 → 产出
跳过数据体检,你根本不知道问题出在哪里;跳过质量复核,你大概率会变成三个月前的我。
四条指令模板,每次复制改改就行
体检:
清洗:
复核:
产出:
几个坑,都是真金白银换的
- 纯空格属于“假空值”:如果只按空单元格处理,很容易漏掉,所以一定要明确“空格也算缺失值”
r换行符:Excel 打开后会直接错行,合并前必须统一清理,否则交付出去的表客户一打开就是乱的- 缺失日期会悄悄拉偏均值:必须做完整性复核,超过阈值就排除,并在报告中写明。把“哪天缺数据、为什么没算”说明白,客户反而会更信任你
- 不要一次性塞太多要求:把流程拆成四轮对话,每一步结果都能单独验证,出了问题也更容易定位
- 先体检再清洗:很多人一上来就说“帮我清洗数据”,结果 AI 把本该保留的脏数据标记也当成垃圾一起删掉了
时间账
| 环节 | 手工写脚本/Excel | TRAE Work | 差距 |
|---|---|---|---|
| 合并 35 个文件 | 40 分钟 | 半分钟 | 约 80 倍 |
| 缺失值处理 | 1 小时 | 1 分钟(含复核) | 约 60 倍 |
| 均值/排名/图表 | 1 个多小时 | 2 分钟 | 约 40 倍 |
| 数据质量说明 | 写不准、不愿写 | 自动生成 | — |
| 合计 | 约 3 小时 | 约 10 分钟 | 约 18 倍 |
附录:Skill 完整定义
写在最后
数据整理最棘手的地方,很多时候并不是“会不会做”,而是“做得够不够稳定、够不够高效、能不能解释清楚”。这套四步法的价值,正是把这几个问题拆开处理:体检负责“看得清”,清洗负责“理得顺”,复核负责“算得准”,产出负责“交得出”。而且这套方法并不依赖某一个具体业务场景——无论你处理的是销售流水、门店报表、问卷导出数据,还是财务明细,只要面对的是多文件、多口径的数据清洗和表格整理需求,都可以按这个 Skill 定义直接复用。
