Files
test-repo/docs/zh-cn/appendix/5-data/data-analysis.md
T

577 lines
18 KiB
Markdown
Raw Normal View History

# 数据分析:从数据中"挖掘价值"
::: 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 | 用户生命周期价值 |