数据分析和编程一样,是有模式的。其实大部分业务分析题,扒开外壳看内核,就那7个套路。
你遇到的那些所谓"新问题",90%都能套进下面这7个框架。
不管你是在字节、阿里、拼多多,还是一个小创业公司做增长--数据就是数据,逻辑永远不会骗你。
🎯 模式1:连接+筛选 = 精准找人找事
业务场景 :
春运期间,12306联合抖音推"旅途内容包",想给用户推荐时长≤当前车次剩余时间的短视频,提升乘车体验。
核心逻辑 :
先连表(车次信息+视频库),再筛选(时长匹配+车次ID),最后排序(优先推荐完播率高的)。
Python代码示例:
python
import pandas as pd
# 车次表 & 视频库(模拟数据)
train_df = pd.DataFrame({
'train_id': [101, 102],
'remaining_minutes': [45, 90] # 剩余分钟数
})
video_df = pd.DataFrame({
'video_id': ['v1', 'v2', 'v3'],
'duration_min': [30, 60, 120],
'completion_rate': [0.85, 0.72, 0.91] # 完播率
})
# 连接+筛选+排序(核心三步)
result = (
train_df[train_df['train_id'] == 101] # 筛选目标车次
.merge(video_df[video_df['duration_min'] <= 45], how='cross') # 连接+时长过滤
.sort_values('completion_rate', ascending=False) # 优先推荐高完播
[['train_id', 'video_id', 'duration_min']]
)
print(result)
💡** 业务复用场景**:
- 美团:骑手+订单匹配,筛选3公里内可接单骑手
- 小红书:笔记+用户标签匹配,精准推送美妆内容
- 滴滴:车型+用户需求匹配,筛选符合"宠物友好"的车辆
🎯 模式2:窗口函数 = 排名排序神器
业务场景 :
美妆品牌想监控各KOL账号下,点赞最高的3篇笔记,用于复盘内容策略。
核心逻辑 :
按账号分组(PARTITION BY),按点赞降序排(ORDER BY),用RANK()打标,再筛前3。
Python代码示例:
python
# 模拟笔记数据
notes_df = pd.DataFrame({
'account': ['A', 'A', 'A', 'B', 'B', 'B'],
'note_id': [1,2,3,4,5,6],
'likes': [1200, 3500, 2800, 900, 4100, 3900]
})
# 窗口函数排名(pandas 2.1+ 支持 rank)
notes_df['rank'] = notes_df.groupby('account')['likes']\
.rank(method='min', ascending=False) # method='min' 等价 SQL RANK()
# 筛选各账号前3
top3 = notes_df[notes_df['rank'] <= 3][['account', 'note_id', 'likes', 'rank']]
print(top3)
## 运行结果:
'''
account note_id likes rank
0 A 1 1200 3.0
1 A 2 3500 1.0
2 A 3 2800 2.0
3 B 4 900 3.0
4 B 5 4100 1.0
5 B 6 3900 2.0
'''
💡** 业务复用场景**:
- 淘宝直播:各主播场均GMV排名,找头部潜力股
- 学而思:各班级学员进步榜,激励+复盘双用
- 顺丰:各片区骑手准时率排名,优化运力调度
🎯 模式3:聚合+分组 = 数据卷王必备
业务场景 :
分析"用户当天打开APP+当天完成下单"的行为,计算人均订单数&客单价,评估"即时需求"转化效率。
核心逻辑 :
先按用户+日期去重(确保一人一天只算一次会话),再连订单表,最后GROUP BY聚合求和/计数。
Python代码示例:
python
# 会话表 & 订单表
session_df = pd.DataFrame({
'user_id': [101,101,102],
'session_date': ['2024-06-01','2024-06-02','2024-06-01']
}).drop_duplicates() # 去重:一人一天只算一次
order_df = pd.DataFrame({
'user_id': [101,101,102],
'order_date': ['2024-06-01','2024-06-01','2024-06-01'],
'order_value': [35.5, 28.0, 52.0]
})
# 连接+聚合
result = (
session_df.merge(order_df,
left_on=['user_id','session_date'],
right_on=['user_id','order_date'])
.groupby(['user_id','session_date'])
.agg(total_orders=('order_value','count'),
total_value=('order_value','sum'))
.reset_index()
)
print(result)
## 运行结果:
'''
user_id session_date total_orders total_value
0 101 2024-06-01 2 63.5
1 102 2024-06-01 1 52.0
'''
💡** 业务复用场景**:
- 京东到家:用户日活+下单转化,评估"小时达"粘性
- 得到APP:用户日登录+课程购买,分析知识付费路径
- 银行APP:用户日打开+理财申购,追踪金融转化漏斗
🎯 模式4:透视表 = 把行变列,一眼看懂趋势
业务场景 :
HR想横向对比各职级员工在2021-2024年的调薪幅度,快速识别"涨薪黑马"和"滞涨群体"。
核心逻辑 :
用CASE WHEN(或pandas pivot)把"年份"从行变列,再用MAX/SUM聚合,最后按员工分组输出。
Python代码示例:
python
# 模拟调薪数据
salary_df = pd.DataFrame({
'employee': ['张三','张三','张三', '李四','李四'],
'year': [2021,2022,2023, 2021,2022],
'salary': [15, 18, 22, 20, 21] # 单位:万
})
# 透视:年份变列(方法1:pivot_table)
pivot = salary_df.pivot_table(
index='employee',
columns='year',
values='salary',
aggfunc='max' # 同年份多条取最高
).fillna(0) # 缺失年份补0
print(pivot)
# 输出:
# year 2021 2022 2023
# employee
# 张三 15.0 18.0 22.0
# 李四 20.0 21.0 0.0
💡** 业务复用场景**:
- 财务:各事业部季度营收对比,一眼看出谁在拖后腿
- 运营:各渠道月度ROI透视,快速分配下月预算
- 产品:各功能模块周活对比,决定迭代优先级
🎯 模式5:累计指标 = 看趋势,别只看单点
业务场景 :
投资人想看"剔除退款后的真实增长",计算3个月滚动平均GMV,平滑大促波动,看清长期趋势。
核心逻辑 :
先按月聚合(剔除负值退款),再用rolling().mean()算滑动平均,最后按时间排序输出。
Python代码示例:
python
# 模拟采购数据(含退款负值)
purchase_df = pd.DataFrame(
{
"date": pd.date_range("2023-01", periods=13, freq="ME"), # 生成13期
"amount": [120, -15, 135, 142, -8, 158, 165, 170, -20, 185, 192, 200, 210],
}
)
# 1. 按月聚合 + 剔除退款
monthly = (
purchase_df[purchase_df["amount"] > 0]
.groupby(pd.Grouper(key="date", freq="ME"))
.agg(monthly_gmv=("amount", "sum"))
.reset_index()
)
# 2. 计算3期滚动平均
monthly["rolling_3m"] = monthly["monthly_gmv"].rolling(window=3).mean()
print(monthly[["date", "monthly_gmv", "rolling_3m"]])
## 运行结果:
'''
date monthly_gmv rolling_3m
0 2023-01-31 120 NaN
1 2023-02-28 0 NaN
2 2023-03-31 135 85.000000
3 2023-04-30 142 92.333333
4 2023-05-31 0 92.333333
5 2023-06-30 158 100.000000
6 2023-07-31 165 107.666667
7 2023-08-31 170 164.333333
8 2023-09-30 0 111.666667
9 2023-10-31 185 118.333333
10 2023-11-30 192 125.666667
11 2023-12-31 200 192.333333
12 2024-01-31 210 200.666667
'''
💡** 业务复用场景**:
- B站:UP主粉丝7日滚动增长,识别内容爆发点
- 蔚来:门店周订单滚动均值,评估新车型热度
- 阿里云:客户月消耗滚动趋势,预判续费风险
🎯 模式6:漏斗分析 = 用户去哪了?
业务场景 :
分析用户从"首次登录"→"周活5次+"→"月观看10h+"的转化路径,计算各阶段流失率,优化新手引导。
核心逻辑 :
用CTE(或pandas多步筛选)定义每阶段用户,再用LEFT JOIN串联,最后算转化率=末阶段/首阶段。
Python代码示例:
python
# 模拟用户行为数据
user_df = pd.DataFrame({
'user_id': range(1,101),
'country': ['CN']*100,
'sessions_30d': np.random.poisson(8, 100), # 30天会话数
'watch_hours': np.random.exponential(5, 100) # 观看小时数
})
# 定义三阶段(向量化筛选,高效!)
stage1 = user_df[user_df['sessions_30d'] > 0] # 活跃用户
stage2 = user_df[user_df['sessions_30d'] >= 5] # 深度活跃
stage3 = user_df[(user_df['sessions_30d'] >=5) & (user_df['watch_hours']>=10)] # 核心用户
# 计算转化(按国家分组)
funnel = pd.DataFrame({
'country': ['CN'],
'active_users': len(stage1),
'engaged_users': len(stage2),
'power_users': len(stage3),
'conversion_rate': round(len(stage3)/len(stage1)*100, 2)
})
print(funnel)
## 运行结果:
'''
country active_users engaged_users power_users conversion_rate
0 CN 100 93 14 14.0
'''
💡** 业务复用场景**:
- 淘宝:浏览→加购→支付,优化购物车流失
- 得到:试听→购课→完课,提升知识付费转化
- 微信支付:绑卡→首刷→复刷,加速支付习惯养成
🎯 模式7:时间对比 = 今天比昨天好在哪?
业务场景 :
城管局想监控"每日违规开单量"的日环比变化,快速发现执法强度波动或居民配合度变化。
核心逻辑 :
先按日聚合违规数,再用shift()取前一天值,最后相减得差值,正数=变严,负数=变松。
Python代码示例:
python
# 模拟违规数据
violation_df = pd.DataFrame(
{
"date": np.random.choice(
pd.date_range("2024-01-01", periods=10, freq="D"), # 10个候选日期
size=100, # 生成100条记录
replace=True, # 允许同一天多条
),
"violation_id": range(1, 101),
}
)
# 1. 按日聚合
daily = violation_df.groupby("date").size().reset_index(name="daily_count")
# 2. 计算日环比变化(shift取前一天)
daily["diff"] = daily["daily_count"] - daily["daily_count"].shift(1)
print(daily[["date", "daily_count", "diff"]])
## 运行结果:
'''
date daily_count diff
0 2024-01-01 3 NaN
1 2024-01-02 5 2.0
2 2024-01-03 14 9.0
3 2024-01-04 10 -4.0
4 2024-01-05 9 -1.0
5 2024-01-06 7 -2.0
6 2024-01-07 12 5.0
7 2024-01-08 8 -4.0
8 2024-01-09 15 7.0
9 2024-01-10 17 2.0
'''
💡** 业务复用场景**:
- 抖音:日活用户日环比,监控内容热点效应
- 美团:日订单量波动,快速响应天气/节日影响
- 招商银行:日理财申购变化,捕捉市场情绪拐点
🎁 总结
这7个模式,真不是啥高深算法。
但90%的业务分析题,拆开看,就是它们的排列组合。
面试前刷一遍,工作中套一遍,效率直接拉满。
✨ 记住:数据是死的,套路是活的。掌握模式,才能以不变应万变。