Files
test-repo/docs/zh-cn/appendix/5-data/data-analysis.md
T
2026-02-23 12:09:47 +08:00

577 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据分析:从数据中"挖掘价值"
::: tip 核心问题
**如何从数据中发现规律?** 这就像问:怎么从一堆杂乱的数字里找到有价值的信息?怎么判断业务是否健康?怎么预测未来的趋势?数据分析解决的就是"从数据到洞察"的问题。
:::
---
## 0. 先问一个问题:你有没有经历过这些困惑?
**场景一:被数据淹没**
```
系统日志:10 GB/天
用户行为:100 万条/天
订单数据:10 万条/天
```
数据堆积如山,但不知道从哪里入手分析,更不知道这些数据能告诉你什么。
**场景二:只看表面指标**
```
DAU(日活用户):10 万 → 看起来不错!
次日留存:15% → 危险!
30 日留存:3% → 非常危险!
```
只看 DAU 以为产品很成功,但留存率暴跌说明用户来一次就走,产品根本没有粘性。
**场景三:不会用 SQL 分析数据**
```
想统计:每个用户的平均订单额
只会写:SELECT * FROM orders;
然后用 Excel 手动计算...
```
掌握基本的数据分析技能,能让你从"看数据"变成"用数据驱动决策"。
---
**好的数据分析就像侦探破案**——从蛛丝马迹中发现规律,从混乱中找到真相。
---
## 1. 数据分析的价值
**数据分析**是从数据中提取有价值信息的过程。它不是简单的"看数字",而是通过统计、聚合、可视化等方法,发现数据背后的规律和趋势。
### 1.1 用医学检查来类比
| 医学检查 | 数据分析 | 说明 |
| :--- | :--- | :--- |
| 体温计 | 基础指标 | 温度/DAU 等单一数值 |
| 血常规 | 描述性统计 | 均值、中位数、分布情况 |
| CT 扫描 | 多维度分析 | 从不同角度看数据 |
| 趋势图 | 时间序列分析 | 观察变化趋势 |
| 诊断报告 | 数据洞察 | 得出结论和建议 |
### 1.2 数据分析的核心价值
| 价值 | 说明 | 示例 |
| :--- | :--- | :--- |
| **描述现状** | 告诉你"发生了什么" | 今日 DAU 10 万,销售额 50 万 |
| **诊断问题** | 告诉你"为什么发生" | 留存率低是因为注册流程太长 |
| **预测趋势** | 告诉你"可能发生什么" | 根据过去 30 天数据,下月 DAU 增长 10% |
| **指导决策** | 告诉你"应该怎么做" | A/B 测试显示新版按钮转化率提高 20% |
---
## 2. 描述性统计:从数据中"提炼信息"
描述性统计是数据分析的基础,它用几个关键指标概括大量数据的特征。
### 2.1 集中趋势:数据的"中心"在哪里?
| 指标 | 定义 | 适用场景 | 示例 |
| :--- | :--- | :--- | :--- |
| **均值** | 所有数值的平均值 | 数据分布均匀时 | 用户平均年龄:28 岁 |
| **中位数** | 排序后位于中间的值 | 有极端值时 | 收入中位数:5000 元(避免被亿万富翁 skew) |
| **众数** | 出现次数最多的值 | 分类数据 | 最常买的商品:iPhone |
**为什么需要三个指标?**
```python
# 场景一:正常分布
数据[1, 2, 3, 4, 5]
均值 = 3, 中位数 = 3, 众数 =
数据分布均匀三个指标接近
# 场景二:有极端值
数据[1, 2, 3, 4, 100]
均值 = 22, 中位数 = 3
极端值100拉高了均值中位数更准确
# 场景三:电商订单
数据[9.9, 9.9, 9.9, 999, 9999]
均值 = 2005.72, 众数 = 9.9
大部分用户买 9.9 元商品均值被高客单价 skew
```
::: tip 💡 实战建议
- **DAU、GMV 等指标**:看均值即可(数据量大,极端值影响小)
- **用户收入、房价等**:看中位数更准确(避免被极端值 skew)
- **热销商品、常用功能**:看众数(最典型的情况)
:::
### 2.2 离散程度:数据"分散"还是"集中"
| 指标 | 定义 | 说明 |
| :--- | :--- | :--- |
| **方差** | 各数据与均值差的平方的平均 | 数值越大,数据越分散 |
| **标准差** | 方差的平方根 | 与原始数据同单位,更直观 |
| **极差** = 最大值 - 最小值 | 最简单的离散度量 | 易受极端值影响 |
**示例:两个班级的数学成绩**
```
A 班:[85, 88, 90, 92, 95]
均值 = 90, 标准差 = 3.16
→ 成绩集中,水平稳定
B 班:[60, 75, 90, 100, 100]
均值 = 85, 标准差 = 16.58
→ 成绩分散,水平差异大
```
::: tip 💡 标准差的应用
- **标准差小**:用户行为一致,产品体验稳定
- **标准差大**:用户群体差异大,可能需要分群分析
:::
### 2.3 交互式演示
👇 **动手试试看**:在下方输入一组数据,实时计算统计指标:
<DataAnalysisDemo />
---
## 3. 数据聚合:从明细到"洞察"
数据聚合是将明细数据按维度汇总,从"看个体"到"看整体"的过程。
### 3.1 常用聚合操作
| 操作 | SQL 函数 | 说明 | 示例 |
| :--- | :--- | :--- | :--- |
| **计数** | COUNT(*) | 统计行数 | 订单总数 |
| **求和** | SUM(amount) | 累加数值 | 总销售额 |
| **均值** | AVG(amount) | 计算平均 | 平均订单额 |
| **最大值** | MAX(amount) | 找最大值 | 最高单笔订单 |
| **最小值** | MIN(amount) | 找最小值 | 最低单笔订单 |
### 3.2 分组聚合(GROUP BY
**问题**:如何统计每个用户的订单数和总消费?
```sql
SELECT
user_id,
COUNT(*) as order_count,
SUM(amount) as total_amount
FROM orders
GROUP BY user_id;
```
**结果**
| user_id | order_count | total_amount |
| :--- | :--- | :--- |
| U001 | 3 | 480 |
| U002 | 2 | 450 |
| U003 | 1 | 250 |
::: tip 💡 GROUP BY 的核心思想
把"明细数据"按某个维度分组,然后对每组进行统计。
- **维度**:你想分析的角度(用户、商品、日期等)
- **指标**:你想统计的数值(订单数、销售额等)
:::
### 3.3 多维度聚合
**问题**:如何统计每个用户每天的消费?
```sql
SELECT
user_id,
date,
SUM(amount) as daily_amount
FROM orders
GROUP BY user_id, date;
```
**结果**
| user_id | date | daily_amount |
| :--- | :--- | :--- |
| U001 | 2024-01-01 | 100 |
| U001 | 2024-01-02 | 200 |
| U002 | 2024-01-01 | 150 |
::: warning 常见错误
```sql
-- ❌ 错误:user_id 没有在 GROUP BY 中
SELECT user_id, SUM(amount)
FROM orders;
-- ✅ 正确:所有非聚合字段都要在 GROUP BY 中
SELECT user_id, SUM(amount)
FROM orders
GROUP BY user_id;
```
:::
---
## 4. 可视化基础:让数据"会说话"
好的可视化能让人一眼看懂数据的规律。
### 4.1 常用图表类型
| 图表类型 | 用途 | 示例 |
| :--- | :--- | :--- |
| **折线图** | 展示趋势 | DAU 变化、销售额增长 |
| **柱状图** | 对比数值 | 各渠道用户数、各品类销售额 |
| **饼图** | 展示占比 | 用户来源分布、商品品类占比 |
| **散点图** | 探索关系 | 广告投入 vs 销售额 |
### 4.2 图表选择指南
| 想展示 | 选择图表 |
| :--- | :--- |
| **随时间的变化** | 折线图 |
| **类别之间的对比** | 柱状图 |
| **部分占整体的比例** | 饼图 |
| **两个变量的关系** | 散点图 |
| **多个变量的分布** | 箱线图 |
::: tip 💡 可视化原则
1. **简洁至上**:去掉不必要的装饰(3D 效果、渐变色等)
2. **突出重点**:用颜色、大小强调关键数据
3. **标注清晰**:标题、坐标轴、图例都要清楚
4. **避免误导**Y 轴从 0 开始,不要截断坐标轴
:::
---
## 5. 数据清洗:垃圾进,垃圾出
**"Garbage In, Garbage Out"** —— 如果数据质量差,分析结果就不可信。
### 5.1 常见数据问题
| 问题类型 | 示例 | 影响 |
| :--- | :--- | :--- |
| **缺失值** | 年龄字段为 NULL | 统计结果偏差 |
| **重复值** | 同一订单出现两次 | 重复计算 |
| **异常值** | 年龄 = 200 岁 | 均值被拉偏 |
| **格式不一致** | 日期:2024-01-01 和 01/01/2024 | 无法正确排序 |
### 5.2 数据清洗步骤
| 步骤 | 操作 | SQL 示例 |
| :--- | :--- | :--- |
| **1. 去重** | 删除重复记录 | `SELECT DISTINCT * FROM orders;` |
| **2. 处理缺失值** | 填充或删除 | `WHERE age IS NOT NULL;` |
| **3. 处理异常值** | 过滤或修正 | `WHERE age BETWEEN 0 AND 120;` |
| **4. 标准化格式** | 统一日期格式 | `TO_DATE(date_str, 'YYYY-MM-DD');` |
---
## 6. 漏斗分析:找到转化瓶颈
漏斗分析用于追踪用户在一系列步骤中的转化情况,找到"流失最严重"的环节。
### 6.1 什么是漏斗分析?
**示例:电商购物流程**
```
访问商品页 → 加入购物车 → 进入结算页 → 完成支付
10000 → 6000 → 4000 → 2500
100% → 60% → 40% → 25%
```
**关键指标**
| 指标 | 定义 | 示例 |
| :--- | :--- | :--- |
| **转化率** | 进入下一步的人数 / 当前步骤人数 | 60% 的用户加入购物车 |
| **整体转化率** | 最终完成人数 / 初始人数 | 25% 的用户完成购买 |
| **流失率** | 1 - 转化率 | 40% 的用户在购物车环节流失 |
### 6.2 如何优化漏斗?
**步骤 1:找到最弱的环节**
```
访问 → 加购 → 结算 → 支付
100% → 60% → 40% → 25%
-40% -20% -15%
```
最大的流失在"访问 → 加购"环节(-40%),说明**商品页没有吸引力**。
**步骤 2:针对性优化**
| 问题环节 | 可能原因 | 优化方案 |
| :--- | :--- | :--- |
| 访问 → 加购 | 商品详情不清晰 | 优化图片、描述、评价 |
| 加购 → 结算 | 运费不透明 | 明确显示总价(含运费) |
| 结算 → 支付 | 支付流程复杂 | 减少表单字段,支持一键支付 |
---
## 7. 留存分析:衡量产品粘性
**留存率**衡量用户在首次使用后持续使用的情况,是产品健康度的核心指标。
### 7.1 留存率类型
| 类型 | 定义 | 计算公式 | 健康标准 |
| :--- | :--- | :--- | :--- |
| **次日留存** | 注册第二天还来的用户占比 | Day 1 活跃 / 注册用户 | > 40% |
| **7 日留存** | 注册第 7 天还来的用户占比 | Day 7 活跃 / 注册用户 | > 20% |
| **30 日留存** | 注册第 30 天还来的用户占比 | Day 30 活跃 / 注册用户 | > 10% |
### 7.2 如何计算留存率?
**示例:1 月 1 日注册的 1000 名用户**
| 日期 | 注册用户 | 次日留存 | 7 日留存 | 30 日留存 |
| :--- | :--- | :--- | :--- | :--- |
| 2024-01-01 | 1000 | 45% (450 人) | 32% (320 人) | 18% (180 人) |
| 2024-01-02 | 1200 | 42% (504 人) | 28% (336 人) | 15% (180 人) |
**次日留存率** = 1 月 2 日还活跃的用户 / 1 月 1 日注册用户
= 450 / 1000 = 45%
### 7.3 留存率的意义
| 留存率 | 产品状态 | 说明 |
| :--- | :--- | :--- |
| **高留存** (>40%) | 健康增长 | 用户喜欢,持续使用 |
| **中等留存** (20-40%) | 需要优化 | 产品还行,但不够吸引人 |
| **低留存** (<20%) | 危险 | 用户来一次就走,产品有问题 |
::: tip 💡 留存 vs DAU
- **高 DAU + 低留存** = "烧钱买量",不可持续
- **低 DAU + 高留存** = "慢热型产品",需要时间积累
- **高 DAU + 高留存** = 健康增长 🎯
:::
---
## 8. 实战:用户行为分析
假设你负责一个电商 App 的数据分析,以下是完整的分析流程。
### 8.1 问题定义
**目标**:提高订单转化率
**现状**:访问商品页 10 万人,最终下单 2000 人,转化率 2%
### 8.2 数据收集
| 维度 | 数据 |
| :--- | :--- |
| **用户属性** | 年龄、性别、地域、注册时间 |
| **行为数据** | 浏览记录、加购、下单、支付 |
| **交易数据** | 订单金额、商品品类、优惠券使用 |
### 8.3 数据分析
**步骤 1:漏斗分析**
```
浏览商品 → 加购 → 结算 → 支付
10万 → 5万 → 3万 → 2万
100% → 50% → 30% → 2%
```
发现:"结算 → 支付"环节流失最严重(30% → 2%)。
**步骤 2:分群分析**
```sql
-- 按用户来源分析转化率
SELECT
traffic_source,
COUNT(*) as total_users,
SUM(CASE WHEN order_id IS NOT NULL THEN 1 ELSE 0 END) as converted_users,
SUM(CASE WHEN order_id IS NOT NULL THEN 1 ELSE 0 END) * 1.0 / COUNT(*) as conversion_rate
FROM user_events
GROUP BY traffic_source;
```
**结果**
| 来源 | 用户数 | 转化用户 | 转化率 |
| :--- | :--- | :--- | :--- |
| 搜索引擎 | 50000 | 500 | 1% |
| 社交媒体 | 30000 | 900 | 3% |
| 直接访问 | 20000 | 600 | 3% |
**结论**:搜索引擎用户转化率最低(1%),可能是因为搜索来的用户"只是看看"。
**步骤 3:留存分析**
```sql
-- 不同来源用户的次日留存
SELECT
traffic_source,
AVG(retention_day1) as avg_retention
FROM user_retention
GROUP BY traffic_source;
```
**结果**
| 来源 | 次日留存 |
| :--- | :--- |
| 搜索引擎 | 25% |
| 社交媒体 | 45% |
| 直接访问 | 55% |
**结论**:搜索引擎用户留存低,说明"质量不高"。
### 8.4 行动建议
| 问题 | 原因 | 建议 |
| :--- | :--- | :--- |
| 转化率低 (2%) | 结算流程复杂 | 简化表单,支持一键支付 |
| 搜索引擎转化低 | 用户意向不明确 | 优化落地页,突出商品价值 |
| 搜索引擎留存低 | 用户找到就离开 | 增加"相关推荐",引导浏览更多商品 |
---
## 9. 用 AI 辅助数据分析
AI 可以帮你快速生成 SQL、分析数据、生成报告。
### 9.1 提示词模板
```
你是一位资深的数据分析师,精通 SQL 和数据可视化。请帮我分析以下数据。
## 业务背景
[描述你的业务场景,例如:电商 App、社交媒体等]
## 数据表结构
[描述数据表的字段,例如:
- users: user_id, age, gender, register_date
- orders: order_id, user_id, amount, created_at]
## 分析需求
[列出你想回答的问题,例如:
1. 统计每个用户的订单数和总消费
2. 找出消费 Top 10 的用户
3. 分析用户消费的分布情况]
## 输出要求
1. SQL 查询语句
2. 结果解读
3. 数据可视化建议
4. 业务洞察
```
### 9.2 实战示例:用户分群
**输入提示词**
```
你是一位资深的数据分析师。请帮我设计一个用户分群方案。
## 业务背景
我是一个电商 App 的数据分析师,我们有 100 万用户,想根据用户的消费行为进行分群,以便精准营销。
## 数据表结构
- orders: order_id, user_id, amount, created_at
- users: user_id, age, gender, register_date
## 分析需求
1. 根据 RFM 模型(最近消费、消费频率、消费金额)对用户分群
2. 计算每个分群的用户数和贡献的销售额
3. 为每个分群设计营销策略
## 输出要求
请提供:
1. SQL 查询语句
2. 分群逻辑说明
3. 每个分群的特征和营销策略
```
**AI 输出示例**
```sql
-- RFM 分群 SQL
WITH rfm AS (
SELECT
user_id,
DATEDIFF('2024-01-31', MAX(created_at)) as recency,
COUNT(*) as frequency,
SUM(amount) as monetary
FROM orders
WHERE created_at >= '2024-01-01'
GROUP BY user_id
),
rfm_scores AS (
SELECT
user_id,
recency,
frequency,
monetary,
NTILE(4) OVER (ORDER BY recency DESC) as r_score,
NTILE(4) OVER (ORDER BY frequency) as f_score,
NTILE(4) OVER (ORDER BY monetary) as m_score
FROM rfm
)
SELECT
user_id,
CASE
WHEN r_score IN (3, 4) AND f_score IN (3, 4) AND m_score IN (3, 4) THEN '重要价值用户'
WHEN r_score IN (1, 2) AND f_score IN (3, 4) AND m_score IN (3, 4) THEN '重要保持用户'
WHEN r_score IN (3, 4) AND f_score IN (1, 2) AND m_score IN (3, 4) THEN '重要发展用户'
WHEN r_score IN (1, 2) AND f_score IN (1, 2) AND m_score IN (3, 4) THEN '重要挽留用户'
WHEN r_score IN (3, 4) AND f_score IN (3, 4) AND m_score IN (1, 2) THEN '一般价值用户'
WHEN r_score IN (1, 2) AND f_score IN (3, 4) AND m_score IN (1, 2) THEN '一般保持用户'
WHEN r_score IN (3, 4) AND f_score IN (1, 2) AND m_score IN (1, 2) THEN '一般发展用户'
ELSE '流失用户'
END as user_segment
FROM rfm_scores;
```
**分群策略**
| 分群 | 特征 | 营销策略 |
| :--- | :--- | :--- |
| **重要价值用户** | 最近消费、高频、高金额 | VIP 待遇,专属客服 |
| **重要保持用户** | 很久没来、但曾经高频 | 唤醒活动,优惠券召回 |
| **重要发展用户** | 最近消费、低频、高金额 | 引导复购,推荐关联商品 |
| **重要挽留用户** | 很久没来、低频、高金额 | 主动联系,了解原因 |
---
## 名词速查表
| 名词 | 英文 | 解释 |
| :--- | :--- | :--- |
| **描述性统计** | Descriptive Statistics | 用均值、中位数、标准差等指标概括数据 |
| **均值** | Mean | 所有数值的平均值 |
| **中位数** | Median | 排序后位于中间的值 |
| **众数** | Mode | 出现次数最多的值 |
| **标准差** | Standard Deviation | 衡量数据分散程度 |
| **方差** | Variance | 标准差的平方 |
| **聚合** | Aggregation | 将明细数据汇总(求和、计数等) |
| **分组** | Group By | 按某个维度将数据分组 |
| **漏斗分析** | Funnel Analysis | 分析用户在一系列步骤中的转化情况 |
| **转化率** | Conversion Rate | 完成目标行为的用户占比 |
| **留存率** | Retention Rate | 用户持续使用产品的比例 |
| **次日留存** | Day 1 Retention | 注册第二天还活跃的用户占比 |
| **数据清洗** | Data Cleaning | 处理缺失值、重复值、异常值 |
| **可视化** | Visualization | 用图表展示数据 |
| **折线图** | Line Chart | 展示随时间的变化趋势 |
| **柱状图** | Bar Chart | 对比不同类别的数值 |
| **饼图** | Pie Chart | 展示各部分占整体的比例 |
| **散点图** | Scatter Plot | 展示两个变量的关系 |
| **RFM 模型** | RFM Model | 根据最近消费、频率、金额对用户分群 |
| **DAU** | Daily Active Users | 日活跃用户数 |
| **GMV** | Gross Merchandise Value | 商品交易总额 |
| **ARPU** | Average Revenue Per User | 每用户平均收入 |
| **LTV** | Lifetime Value | 用户生命周期价值 |