---
name: ray-data-analysis
slug: ray-data-analysis
displayName: 数据分析工作流
version: 1.3.0
description: >
  完整数据分析工作流：回答数据问题、探查数据集、写优化 SQL、创建可视化、构建交互式仪表板、
  分享前验证。覆盖从快速查询到正式报告的全流程，含 ASCII 快速图表、报告模板、统计检验速查。
  触发场景：用户要做数据分析、问数据问题、探查数据集、写 SQL 查询、画图、做仪表板、
  生成数据报告、验证分析结果。"分析一下这个数据"、"这个数据什么意思"、"画个图"、
  "做个仪表板"、"写个 SQL"、"数据报告"、"验证我的分析"。
agent_created: true
---

# 数据分析 — ray-data-analysis

完整数据分析工作流。从快速查数到正式报告，一条 skill 覆盖全流程。

## 六个工作流

按需求选工作流，复杂项目可组合使用（如：探查数据 → 写 SQL → 可视化 → 验证 → 交付）。

| # | 工作流 | 何时用 |
|---|--------|--------|
| 1 | 回答数据问题 | 用户有具体问题要回答 |
| 2 | 探查数据集 | 遇到新表 / 新数据文件 |
| 3 | 写优化 SQL | 需要生成查询供手动执行 |
| 4 | 创建可视化 | 报告/演示需要图表 |
| 5 | 构建交互式仪表板 | 需要可分享的交互式 dashboard |
| 6 | 分享前验证分析 | 重要结论分享给相关方前 |

---

## Workflow 1: 回答数据问题

### 1. 理解问题

判定复杂度：

- **快速答案**：单一指标、简单过滤、事实查询（"上周多少新用户？"）
- **完整分析**：多维探索、趋势、对比（"转化率下降的原因是什么？"）
- **正式报告**：方法论 + 局限性 + 建议的完整调研（"季度业务回顾"）

**锁定指标契约（v1.2 新增）**：完整分析/正式报告前，先锁定 5 要素——
1. **粒度**：一行数据代表什么（用户/订单/天/周）？
2. **分子/分母口径**：确切包含与排除逻辑（退款算不算？内部流量剔除吗？）
3. **时间窗与时区**：统计区间、自然日边界、时区
4. **过滤与排除项**：测试账号、停用用户、异常值处理
5. **数据源**：哪个表/文件是唯一事实来源

任一要素含糊 → **先声明歧义再出数**。指标口径没锁定就对比趋势 = 结论无效的头号根源（KPI 同名但口径变了，趋势对比直接失效）。

**分析计划确认（v1.2 新增）**：完整分析/正式报告动工前，用 3 行给出分析计划（用什么数据 → 算什么指标 → 输出什么形式）请用户确认口径，避免深挖跑偏后返工。

明确：需要哪些表/指标/维度/时间范围，输出格式（数字/表/图/叙述）。

### 2. 取数

- 用户直接提供数据（粘贴查询结果 / 上传 CSV / Excel / 描述 schema）
- 写查询供用户手动执行 → 走 Workflow 3 的 SQL 方言最佳实践
- 拿到数据后开始分析

### 3. 分析

- 计算指标、聚合、对比
- 识别模式、趋势、离群点、异常
- 跨维度对比（时间/分段/类别）
- 复杂分析拆成子问题逐个解决

### 4. 交付前验证

- **行数 sanity**：记录数合理吗？
- **Null 检查**：有没有意外空值扭曲结果？
- **量级检查**：数字在合理范围吗？
- **趋势连续性**：时间序列有意外缺口吗？
- **聚合逻辑**：小计加总等于总计吗？

任一项存疑 → 调查并标注 caveat。

### 5. 呈现发现

- **快速答案**：直接给答案 + 上下文 + 查询（折叠/代码块）供复现
- **完整分析**：先给关键洞察 → 数据表/图表支撑 → 方法论和 caveat → 后续问题建议
- **正式报告**：执行摘要 → 方法论 → 详细发现 → 局限 → 建议 → 附录（查询+数据表）

---

## Workflow 2: 探查数据集

生成数据画像：理解形状、质量、模式，再做分析。

### 1. 访问数据

- **文件（CSV/Excel/Parquet/JSON）**：读入，过大则采样
- **用户描述表**：要样本数据或 schema，生成探查查询供用户执行

### 2. 画像

**基本统计**：行数 / 列数 / 主键 / 粒度（一行 = 一个什么）/ 时间范围。

**逐列分析**：类型 / Null 率 / 基数（唯一值数）/ 样本值 / 分布（数值列 min/max/mean/median/std）。

**数据质量红旗**：Null 率高（>10%）/ 意外值（计数字段出现负数）/ 重复行 / 格式不一致（大小写混用、尾随空格）/ 时间缺口。

### 3. 推荐下一步

- 值得探索的高价值维度（中等基数、低 Null）
- 分析前要解决的数据质量问题
- 潜在关系（相关列、层级）
- 基于结构的分析起点

---

## Workflow 3: 写优化 SQL

从自然语言生成 SQL，针对具体方言优化。

### 1. 理解需求

识别：输出列 / 过滤条件 / 聚合（GROUP BY、count、sum、avg）/ 连接（多表）/ 排序 / 限制（top-N 或采样）。

### 2. 定 SQL 方言

未指定时问用户：PostgreSQL / Snowflake / BigQuery / Databricks(Spark SQL) / Redshift / MySQL。各方言在日期函数、字符串操作、窗口函数上语法不同。

### 3. 写查询

复杂查询用 CTE：

```sql
WITH base_data AS (
  SELECT ...          -- 第一步：取基础数据集
),
aggregated AS (
  SELECT ...          -- 第二步：聚合
)
SELECT * FROM aggregated;
```

**最佳实践**：
- 显式 JOIN（不用 WHERE 隐式连接）
- 连接时所有列名加表别名限定
- CTE 和别名起有意义的名字
- 复杂逻辑加注释
- 格式化（缩进、换行）
- 考虑性能（尽早过滤、避免 SELECT *、用合适索引）

### 4. 加上下文

查询附带：用途一句话 / 引用的表 / 性能说明（预期行数、瓶颈）/ 方言特有说明。

---

## Workflow 4: 创建可视化

用 Python 生成出版级图表。

### 1. 理解需求

确定：数据来源 / 图表类型（指定或需推荐）/ 用途（探索/演示/报告/仪表板组件）/ 受众。

### 2. 取数

无数据时：让用户粘贴或上传；需查询时先用 Workflow 3 生成查询。

### 3. 选对图表

| 展示内容 | 最佳图表 | 何时用 |
|---------|---------|--------|
| 时间趋势 | 折线图 | 连续时间序列 |
| 类别对比 | 柱状图 | 离散类别 |
| 占比 | 堆叠柱/饼图 | 构成、相对大小 |
| 分布 | 直方图/箱线图 | 离散度和离群点 |
| 相关性 | 散点图 | 两变量关系 |
| 排名 | 水平柱状图 | 有序列表、易读标签 |

### 4. 生成 Python 代码

交互图用 `plotly`，静态图用 `seaborn` 或 `matplotlib`。模板见 `references/visualization-code.md`。

### 5. 设计原则

- **清晰**：去掉图表垃圾，标签明确
- **准确**：不截断坐标轴夸大差异
- **可访问**：色盲友好配色
- **上下文**：关键点加参考线、注释

---

## Workflow 5: 构建交互式仪表板

自包含 HTML 仪表板，浏览器直接打开，无服务器无依赖。

### 1. 理解需求

用途（高管概览/运营监控/深挖分析/团队汇报）/ 受众 / 关键指标 / 维度（可过滤切片）/ 数据来源。

### 2. 取数

需查询走 Workflow 3；提供数据则确保结构化（CSV/JSON）。

### 3. 设计布局

1. **Header**：标题、日期范围、关键过滤器
2. **KPI 卡片**：3-5 个最重要的数字
3. **主图表**：2-3 个主要可视化
4. **明细区**：下钻表格或次级图表
5. **Footer**：方法论、数据源、更新时间

### 4. 生成 HTML/JS

Chart.js 模板见 `references/dashboard-template.md`。

### 5. 加交互

下拉过滤（类别/时间/分段）/ 图表交互（悬停 tooltip、点击下钻）/ 表格排序（点列头）/ 动态更新（过滤器联动所有图表）。

---

## Workflow 6: 分享前验证分析

分享前审查准确性、方法论、潜在偏差，产出置信度评估和改进建议。

### 1. 审查方法论和假设

**数据选择**：用了哪些表/源？对吗？时间范围够新吗？过滤器引入偏差吗？

**聚合逻辑**：分组合适吗？小计等于总计吗？Null 处理对了吗（排除 vs 计为零）？

**统计方法**：用平均还是中位数更合适？百分比分母一致吗？趋势考虑季节性了吗？

### 2. 查常见陷阱

- **幸存者偏差**：只分析现有客户 → 排除了流失用户
- **选择偏差**：样本代表总体吗？
- **辛普森悖论**：聚合趋势与子组趋势矛盾
- **相关 ≠ 因果**：混淆变量在起作用吗？

### 3. Sanity 检查

量级（数字在合理范围）/ 方向（趋势符合业务常识）/ 一致性（相关指标讲同一故事）。有异常 → 重查查询 → 找数据质量问题 → 考虑外部因素。

### 4. 评估置信度

- **高**：方法论扎实、结果已验证、局限已记录
- **中**：有 minor 顾虑或 caveat，但核心结论成立
- **需重做**：方法论或数据质量问题需要解决

### 5. 记录局限

每份分析都有局限，记录：排除了什么 / 假设 / 误差范围 / 已知数据质量问题 / 替代解释。

> 示例 caveat："本分析排除试用用户，可能高估转化率约 5pp（相对全部注册用户）。"

---

## 按分析类型选方法（v1.1 新增）

分析前先判断数据类型，再选对应的检验和可视化。

| 类型 | 适用场景 | 统计检验 | 可视化 |
|------|---------|---------|--------|
| **实验数据** | 对照试验、组间比较、前后测 | t检验 / ANOVA / 卡方 | 箱线图、小提琴图、带误差线条形图 |
| **调查数据** | 问卷、相关研究、预测 | 相关（Pearson/Spearman）/ 回归 / 因子分析 | 热力图、散点图、直方图 |
| **探索性** | 初步探索、特征工程、假设生成 | 描述统计 + 相关分析 | 配对图、分布图、相关矩阵 |

**关键原则（v1.1 新增）**：
- **先探索后检验**：先做 EDA 了解数据，再选统计方法
- **检查假设条件**：正态性 / 方差齐性 / 独立性（详见 `references/statistical-tests.md`）
- **报告效应量**：不只报 p 值，还要效应量 + 置信区间

---

## 独有补充

### ASCII 快速图表（无法生成图片时）

```
Revenue by Month (in $K)
========================
Jan: ████████████████ 160
Feb: ██████████████████ 180
Mar: ████████████████████████ 240
```

### 常见错误

❌ 确认偏差（找数据支持已有结论）｜❌ 相关≠因果 ｜❌ 挑樱桃（只用有利数据）
❌ 忽略离群点（删前先调查）｜❌ 过度复杂（简单分析常胜）｜❌ 无上下文（数字无对比无意义）
❌ KPI 同名但口径已变（分子/分母/排除项改过 → 趋势对比失效）｜❌ 一张图混日/周/月粒度（假波动，多为聚合噪声）｜❌ 百分比不带基数（小分母上领导过度反应，附计数）

### 🚨 升级红线（v1.2 新增，触及时先对话再动手）

- 用户想"证明"预设结论 → 先澄清分析目的，声明结论应由数据产生而非反向
- 数据撑不住结论 → 明确说"当前数据无法支持此判断"，说明缺什么，不硬出报告
- 自动化报告无指标负责人/无 caveat → 上线前补齐，否则坏数字扩散快过更正

### 最佳实践

1. 从问题出发 2. 验证数据（垃圾进垃圾出）3. 记录一切（查询/假设/决策）4. 恰当可视化 5. 展示过程（方法论重要）6. 洞察先行（不是数据倾倒）7. 可行动（"So what?" → "Now what?"）8. 版本化查询

---

## 参考资料（按需加载）

- `references/report-templates.md` — 标准报告模板 + 分析需求模板（写正式报告时读）
- `references/statistical-tests.md` — 描述统计表 + 统计检验速查（做统计分析时读）
- `references/data-cleaning.md` — 数据清洗清单 + 清洗 SQL 模式（数据脏时读）
- `references/visualization-code.md` — Python 可视化代码模板（画图时读）
- `references/dashboard-template.md` — 交互式仪表板 HTML 模板（做仪表板时读）


## Gotchas

> 经验回流口（合并原「环境怪癖」与「实战经验」两处落点）。构建与运行中踩的坑记这里，随运行累积。
> ⚠️ `None known` 是合法值——禁止编造 gotcha 凑数，假怪癖会教模型错误约束。
> 新回流条目带前缀：`- YYYY-MM-DD｜[LRN-YYYYMMDD-XXX]｜计数:N｜状态:…`（判重与归档用）；历史条目保持原样。
> 归档阈值：本节 > 40 行 或 SKILL.md > 90 KB → 最旧批次移入 `references/experience-archive.md`，保留最近 3 轮。

- None known

## 维护记录

历史变更详见 `references/changelog.md`（v1.2.0 起卸载至此，正文只留索引）。
