# Data Analysis

> 数据分析技能。当用户上传 Excel(.xlsx、.xls) 或 CSV 文件并要求分析时使用，基于三阶段分析法（结构理解 → 统计概况 → 发现挖掘）输出结构化的中文洞察。

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

---


# 数据分析

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

## 数据读取指引

使用 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%"更诚实

## 输出结构

严格按以下结构输出：

### 一句话摘要
（整份数据最核心的一个发现，不超过两句话）

### 数据全貌
（行数、列数、时间范围、主要维度分布）

### 核心发现（3~5 条，按重要性排序）
（每条包含：发现 + 支撑数据 + so what）

### 值得关注
（异常值、数据质量问题）

### 建议
（基于发现的可操作建议，1~3 条）

## 注意
- 所有输出使用中文
- 数字保留两位小数
- 仅在对话中输出，不生成文件

