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

📅 2026/7/3 3:08:03 👁️ 阅读次数 📝 编程学习
理论都会,实战就废?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 '''

💡业务复用场景

  • 抖音:日活用户日环比,监控内容热点效应
  • 美团:日订单量波动,快速响应天气/节日影响