首页 > 面试资料 博客日记

理论都会,实战就废?7个分析模板,帮你打通任督二脉

2026-04-07 15:00:03面试资料围观1

极客资料网推荐理论都会,实战就废?7个分析模板,帮你打通任督二脉这篇文章给大家,欢迎收藏极客资料网享受知识的乐趣

数据分析和编程一样,是有模式的。其实大部分业务分析题,扒开外壳看内核,就那7个套路。

你遇到的那些所谓“新问题”,90%都能套进下面这7个框架。

不管你是在字节、阿里、拼多多,还是一个小创业公司做增长--数据就是数据,逻辑永远不会骗你。

🎯 模式1:连接+筛选 = 精准找人找事

业务场景
春运期间,12306联合抖音推"旅途内容包",想给用户推荐时长≤当前车次剩余时间的短视频,提升乘车体验。

核心逻辑
先连表(车次信息+视频库),再筛选(时长匹配+车次ID),最后排序(优先推荐完播率高的)。

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代码示例

# 模拟笔记数据
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代码示例

# 会话表 & 订单表
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代码示例

# 模拟调薪数据
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代码示例

# 模拟采购数据(含退款负值)
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代码示例

# 模拟用户行为数据
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代码示例

# 模拟违规数据
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%的业务分析题,拆开看,就是它们的排列组合

面试前刷一遍,工作中套一遍,效率直接拉满。

✨ 记住:数据是死的,套路是活的。掌握模式,才能以不变应万变。


文章来源:https://www.cnblogs.com/wang_yb/p/19830000
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云