| name | data-analysis |
| description | 数据分析技能。当用户上传 Excel(.xlsx、.xls) 或 CSV 文件并要求分析时使用,基于三阶段分析法输出深度洞察,并生成一份可直接交付的专业可视化 HTML 报告。 |
数据分析
用户上传数据文件后,按下列指引完成读取、思考、出报告。
数据读取指引
使用 pandas 读取用户上传的文件,灵活处理各种情况:
- Excel 文件:先检查所有工作表的名称。只有一个直接读取;有多个则列出让用户选择
- CSV 文件:用 charset-normalizer(或 chardet)检测文件编码,再用检测到的编码读取,避免逐个尝试编码导致的静默乱码问题
- 表头检测:检查第一行是否能够合理地作为列名使用。若第一行全是数字,可能表头缺失
- 读取后立即打印行数、列名、前 3 行,确认数据读取正确
以上是指引而非固定脚本。每份数据情况不同,需要根据实际情况灵活判断。
分析方法论
阶段一:结构理解
在做任何统计之前,先回答:
- 一行代表什么?(一条投放记录?一个用户?一天的汇总?)
- 哪些列是维度(用来分组的类别列,如"板块""渠道")?
- 哪些列是指标(用来计算的数值列,如"GMV""ROI")?
- 有没有时间列?数据覆盖什么时间范围?
阶段二:统计概况
对每个指标列:
- 同时计算均值和中位数。两者差距大于 20% 说明分布偏斜,此时中位数比均值更能反映"典型值"
- 计算 p25、p75、p95(即排在 25%、75%、95% 位置的值),了解数据分布范围
- 统计零值和缺失值数量
按维度列分组,对比各组的指标差异。
阶段三:发现挖掘
- 异常检测:找出偏离组内均值 2 个标准差以上的记录
- 相关性:计算指标间的相关系数,标记强相关(|r|>0.7)
- 趋势:如有时间列,检查指标随时间的变化方向
分析哲学
数据分析的目标是回答 so what(这说明什么,有什么业务价值),不能只展示数字:
- 对比产生意义:"退货率 7.7%"是死数字,"服饰退货率是美妆退货率的 4 倍"才有冲击力
- 回答 so what:每个发现后面追问"这意味着什么"
- 标题就是结论:写"食品板块 ROI 连续下滑,需要预警",不写"食品板块分析",让读者看标题就知道发生了什么
- 异常值是金矿:偏离均值的数据点往往最有价值
- 主动挖掘隐藏问题:分析完主动追问"还有什么用户可能没意识到但数据已经暗示的趋势或风险"
- 警惕虚假精确:"约 5%"比"4.73%"更诚实
输出结构(用于对话中的简要汇报)
在生成 HTML 之前,先在对话中简要汇报分析结果,结构如下:
一句话摘要
(整份数据最核心的一个发现,不超过两句话)
数据全貌
(行数、列数、时间范围、主要维度分布)
核心发现(3~5 条,按重要性排序)
(每条包含:发现 + 支撑数据 + so what)
值得关注
(异常值、数据质量问题)
建议
(基于发现的可操作建议,1~3 条)
报告生成工作流
分析完成后,生成一份独立的 HTML 报告文件:
- 先读取
references/design-brief.md 了解设计方向
- 再读取
references/report-template.html 了解报告基础结构和可用组件
- 根据分析结果,从模板中选择合适的组件,生成定制化的 HTML 报告
- 图表使用 Chart.js(从 CDN 加载),数据以 JS 变量嵌入 HTML(const DATA = {...}),确保报告是一个可脱机打开的独立单文件
输出约定:
- 文件保存到输入数据所在的目录
- 文件名为
<原文件名>-report.html
- 在对话中告知用户报告的保存路径
图表选择指南
每个核心发现至少配一张图表。根据数据关系选择图表类型:
- 类别对比 → 柱状图
- 时间趋势 → 折线图
- 占比构成 → 环形图(不超过 6 类)
- 变量关系 → 散点图
- 分布分析 → 直方图
设计方向
生成 HTML 时,参考 references/design-brief.md 的设计简报,在其指引下自主完成排版、配色、字体等具体设计决策。
核心要求:
- 风格定位:杂志风排版(editorial),避免后台管理界面式风格
- 参考对象:《经济学人》图表页、麦肯锡研报、彭博数据可视化
- 图表配色必须和报告整体风格统一,禁止使用 Chart.js 默认配色
- 关键数字大而醒目,辅助信息小而安静,留足间距
- 具体的色值、字体、间距等参数由你自主决定
注意