# Data Analysis

> 数据分析技能。当用户上传 Excel(.xlsx、.xls) 或 CSV 文件并要求分析时使用，基于三阶段分析法输出深度洞察，并生成一份可直接交付的专业可视化 HTML 报告。

- Skill: `gabrielmoreira/data-analysis-7` (Agent Skill)
- Install (CLI): `npx skillmds@latest add gabrielmoreira/data-analysis-7`
- Raw SKILL.md: https://api.skillmd.com/api/skills/gabrielmoreira/data-analysis-7/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: gabrielmoreira (https://skillmd.com/u/gabrielmoreira)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/gabrielmoreira/data-analysis-7

---


# 数据分析

用户上传数据文件后，按下列指引完成读取、思考、出报告。

## 数据读取指引

使用 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 报告文件：

1. 先读取 `references/design-brief.md` 了解设计方向
2. 再读取 `references/report-template.html` 了解报告基础结构和可用组件
3. 根据分析结果，从模板中选择合适的组件，生成定制化的 HTML 报告
4. 图表使用 Chart.js（从 CDN 加载），数据以 JS 变量嵌入 HTML（const DATA = {...}），确保报告是一个可脱机打开的独立单文件

输出约定：

- 文件保存到输入数据所在的目录
- 文件名为 `<原文件名>-report.html`
- 在对话中告知用户报告的保存路径

## 图表选择指南

每个核心发现至少配一张图表。根据数据关系选择图表类型：

- 类别对比 → 柱状图
- 时间趋势 → 折线图
- 占比构成 → 环形图（不超过 6 类）
- 变量关系 → 散点图
- 分布分析 → 直方图

## 设计方向

生成 HTML 时，参考 `references/design-brief.md` 的设计简报，在其指引下自主完成排版、配色、字体等具体设计决策。

核心要求：

- 风格定位：杂志风排版（editorial），避免后台管理界面式风格
- 参考对象：《经济学人》图表页、麦肯锡研报、彭博数据可视化
- 图表配色必须和报告整体风格统一，禁止使用 Chart.js 默认配色
- 关键数字大而醒目，辅助信息小而安静，留足间距
- 具体的色值、字体、间距等参数由你自主决定

## 注意
- 所有输出使用中文
- 数字保留两位小数

