伐谋 - 数据分析工具
数据分析技能,用于理解数据、分析数据、制作数据处理流程、汇总数据分析结果。当用户提到"分析数据"、"数据处理"、"数据探索"、"统计分析"、"数据清洗"、"数据汇总"、"制作数据报告"、"理解这份数据"、"看一下这个CSV/Excel/数据集"时,必须使用此技能。即使用户只说"帮我看看这个数据"、"分析一下",只...
Like a lobster shell, security has layers — review code before you run it.
License
SKILL.md
数据分析技能
分析目标
数据分析任务的核心目标是:
- 理解数据:搞清楚数据是什么、从哪来、代表什么业务含义,而不仅仅是读取文件
- 评估数据质量:识别缺失、重复、异常、格式不一致等问题,判断数据可信度
- 发现规律与洞察:通过统计和探索,找出数据中有意义的模式、趋势、异常和关联
- 制定处理流程:根据实际数据问题,设计可复现、有依据的清洗和转换方案
- 汇总结果:用清晰、有业务价值的语言输出结论,不是堆砌统计数字
处理约束
在分析过程中,始终遵守以下约束:
- 不擅自修改原始数据:任何清洗或转换操作都要先告知用户,说明原因,再执行
- 不过度假设数据含义:列名不清晰时,应向用户确认,而不是自行猜测
- 不忽略数据质量问题:发现异常、缺失、不一致时必须明确标注,不能绕过
- 不强行套用固定流程:数据格式千差万别,应根据实际情况灵活判断分析路径
- 不脱离用户目标做分析:始终围绕"用户想解决什么问题"来决定分析深度和方向
最佳实践
先理解,再动手
拿到数据后,优先弄清楚背景:数据的业务场景是什么?用户的分析目的是什么?这决定了哪些列重要、什么算"异常"、如何处理缺失值。
用业务语言解释结果
不要只输出统计数字,要解释它们的含义。"均值是 3200"不如"平均订单金额约 3200 元,但中位数仅 1800 元,说明存在少量高额订单拉高了均值"。
数据质量问题要分级处理
- 阻断性问题(如关键列全为空、主键大量重复):先停下来告知用户,确认后再继续
- 需要决策的问题(如缺失率高、含义不明的异常值):列出处理方案的利弊,让用户选择
- 轻微问题(如少量格式不一致、空白字符):可直接处理,但要在报告中记录
处理流程要可解释
每一步操作都要能回答"为什么这样做",例如:
- "用中位数填充,因为该列分布右偏,均值受极值影响大"
- "删除该列,因为缺失率达 78%,无法有效利用"
结论要有数据支撑
每个洞察后面都应该跟上具体数字作为依据,避免主观判断。
环境与工具
- 文件路径:上传的文件在
/mnt/user-data/uploads/,输出文件保存到/mnt/user-data/outputs/ - 中文数据常见编码问题:优先尝试
utf-8,失败则尝试gbk/gb18030 - 图表中文显示:设置
matplotlib.rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans'] - 输出 CSV 供 Excel 打开时,用
encoding='utf-8-sig'防止乱码
分析结果汇总格式
无论分析路径如何,最终汇总报告应包含:
## 数据分析报告
### 数据概况
(数据规模、来源、时间范围、核心字段说明)
### 数据质量
(发现的问题、严重程度、已做处理或待确认事项)
### 核心发现
(3-5 条最重要的洞察,每条附数据支撑)
### 处理流程说明
(对数据做了哪些变换,为什么这样做)
### 后续建议
(数据改进建议、可深入分析的方向)
示例
以下示例展示了面对不同类型数据时,如何应用上述目标和约束进行分析。
示例 A:电商订单数据分析
场景:用户上传一份订单 CSV,列包括订单 ID、下单时间、商品类别、金额、用户城市、支付状态,想了解"销售整体情况"。
分析思路:
- 先确认时间范围,这是销售分析的基本背景
- 金额列检查是否有负值(退款?录入错误?)、零值(需要业务解释)
- 支付状态的分布决定"有效订单"的口径
- 按时间聚合看趋势,按类别和城市看构成
质量问题处理示例:
发现"金额"列有 12 行为负值。在销售数据中,负值通常代表退款记录。建议:若分析销售额,过滤掉负值;若分析净收入,需要保留。请确认分析目标后再处理。
核心发现示例:
- 3 月销售额环比增长 34%,主要由"家电"品类驱动(贡献增量的 61%)
- 北京和上海合计占全部订单量的 47%,但客单价低于二线城市均值 15%
- 支付失败率为 8.3%,高于行业参考值(通常 2-5%),建议排查支付链路
示例 B:结构混乱的调查问卷数据
场景:用户上传一份 Excel,多个 Sheet,列名不统一(有的叫"Q1",有的叫"第一题"),部分单元格合并,有空行空列。
首要步骤:不急于分析,先向用户说明数据结构问题:
这份文件包含 3 个 Sheet,结构存在以下问题需要先确认:
- Sheet1 和 Sheet2 的列名不一致,是同一份问卷的不同批次,还是不同问卷?
- 第 5-8 行为空行,是否可以删除?
- "Q3_其他"列 92% 为空,是开放题填写率低,还是导出时出了问题?
确认后我来制定清洗方案。
体现约束:这里不假设列名含义,不擅自合并 Sheet,先暴露问题等用户确认。
示例 C:用户要求"清洗数据并输出处理后的文件"
处理流程文档示例(随输出文件一起提供):
数据处理流程记录
原始文件:sales_2024.csv(8,412 行 × 15 列)
处理后文件:sales_2024_cleaned.csv(8,203 行 × 13 列)
变更说明:
1. 删除重复行:移除 89 行完全重复记录
2. 删除"备注2"列:缺失率 96%,无有效信息
3. 删除"内部编码"列:用户确认该列不参与分析
4. 金额列格式统一:将"¥1,200.00"格式转为数值 1200.0(共 203 行受影响)
5. 日期列标准化:统一转为 YYYY-MM-DD 格式(原始混有 MM/DD/YYYY 和中文日期两种格式)
6. 缺失值处理:
- "城市"列 34 行缺失 → 填入"未知"(用户确认)
- "金额"列 86 行缺失 → 保留为空(用户确认这批订单为异常记录,不填充)
Files
1 totalComments
Loading comments…
