伏虎睡罗汉 發表於 2026-4-7 14:32:00

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

<p>数据分析和编程一样,是有<strong>模式</strong>的。其实大部分业务分析题,扒开外壳看内核,就那7个套路。</p>
<p>你遇到的那些所谓“新问题”,90%都能套进下面这7个框架。</p>
<p>不管你是在字节、阿里、拼多多,还是一个小创业公司做增长--数据就是数据,逻辑永远不会骗你。</p>
<h1 id="-模式1连接筛选--精准找人找事">🎯 模式1:连接+筛选 = 精准找人找事</h1>
<p><strong>业务场景</strong>:<br>
春运期间,<code>12306</code>联合抖音推"旅途内容包",想给用户推荐时长≤当前车次剩余时间的短视频,提升乘车体验。</p>
<p><strong>核心逻辑</strong>:<br>
先连表(车次信息+视频库),再筛选(时长匹配+车次ID),最后排序(优先推荐完播率高的)。</p>
<p><strong>Python代码示例</strong>:</p>
<pre><code class="language-python">import pandas as pd

# 车次表 &amp; 视频库(模拟数据)
train_df = pd.DataFrame({
    'train_id': ,
    'remaining_minutes': # 剩余分钟数
})

video_df = pd.DataFrame({
    'video_id': ['v1', 'v2', 'v3'],
    'duration_min': ,
    'completion_rate': # 完播率
})

# 连接+筛选+排序(核心三步)
result = (
    train_df == 101]# 筛选目标车次
    .merge(video_df &lt;= 45], how='cross')# 连接+时长过滤
    .sort_values('completion_rate', ascending=False)# 优先推荐高完播
    [['train_id', 'video_id', 'duration_min']]
)
print(result)
</code></pre>
<hr>
<p>💡<strong>业务复用场景</strong>:</p>
<ul>
<li>美团:骑手+订单匹配,筛选3公里内可接单骑手</li>
<li>小红书:笔记+用户标签匹配,精准推送美妆内容</li>
<li>滴滴:车型+用户需求匹配,筛选符合"宠物友好"的车辆</li>
</ul>
<h1 id="-模式2窗口函数--排名排序神器">🎯 模式2:窗口函数 = 排名排序神器</h1>
<p><strong>业务场景</strong>:<br>
美妆品牌想监控各KOL账号下,点赞最高的3篇笔记,用于复盘内容策略。</p>
<p><strong>核心逻辑</strong>:<br>
按账号分组(PARTITION BY),按点赞降序排(ORDER BY),用RANK()打标,再筛前3。</p>
<p><strong>Python代码示例</strong>:</p>
<pre><code class="language-python"># 模拟笔记数据
notes_df = pd.DataFrame({
    'account': ['A', 'A', 'A', 'B', 'B', 'B'],
    'note_id': ,
    'likes':
})

# 窗口函数排名(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 &lt;= 3][['account', 'note_id', 'likes', 'rank']]
print(top3)

## 运行结果:
'''
    accountnote_idlikesrank
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
'''
</code></pre>
<p>💡<strong>业务复用场景</strong>:</p>
<ul>
<li>淘宝直播:各主播场均GMV排名,找头部潜力股</li>
<li>学而思:各班级学员进步榜,激励+复盘双用</li>
<li>顺丰:各片区骑手准时率排名,优化运力调度</li>
</ul>
<h1 id="-模式3聚合分组--数据卷王必备">🎯 模式3:聚合+分组 = 数据卷王必备</h1>
<p><strong>业务场景</strong>:<br>
分析"用户当天打开APP+当天完成下单"的行为,计算人均订单数&amp;客单价,评估"即时需求"转化效率。</p>
<p><strong>核心逻辑</strong>:<br>
先按用户+日期去重(确保一人一天只算一次会话),再连订单表,最后GROUP BY聚合求和/计数。</p>
<p><strong>Python代码示例</strong>:</p>
<pre><code class="language-python"># 会话表 &amp; 订单表
session_df = pd.DataFrame({
    'user_id': ,
    'session_date': ['2024-06-01','2024-06-02','2024-06-01']
}).drop_duplicates()# 去重:一人一天只算一次

order_df = pd.DataFrame({
    'user_id': ,
    'order_date': ['2024-06-01','2024-06-01','2024-06-01'],
    'order_value':
})

# 连接+聚合
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_datetotal_orderstotal_value
0      101   2024-06-01             2         63.5
1      102   2024-06-01             1         52.0
'''
</code></pre>
<p>💡 <strong>业务复用场景</strong>:</p>
<ul>
<li>京东到家:用户日活+下单转化,评估"小时达"粘性</li>
<li>得到APP:用户日登录+课程购买,分析知识付费路径</li>
<li>银行APP:用户日打开+理财申购,追踪金融转化漏斗</li>
</ul>
<h1 id="-模式4透视表--把行变列一眼看懂趋势">🎯 模式4:透视表 = 把行变列,一眼看懂趋势</h1>
<p><strong>业务场景</strong>:<br>
HR想横向对比各职级员工在2021-2024年的调薪幅度,快速识别"涨薪黑马"和"滞涨群体"。</p>
<p><strong>核心逻辑</strong>:<br>
用CASE WHEN(或pandas pivot)把"年份"从行变列,再用MAX/SUM聚合,最后按员工分组输出。</p>
<p><strong>Python代码示例</strong>:</p>
<pre><code class="language-python"># 模拟调薪数据
salary_df = pd.DataFrame({
    'employee': ['张三','张三','张三', '李四','李四'],
    'year': ,
    'salary': # 单位:万
})

# 透视:年份变列(方法1:pivot_table)
pivot = salary_df.pivot_table(
    index='employee',
    columns='year',
    values='salary',
    aggfunc='max'# 同年份多条取最高
).fillna(0)# 缺失年份补0

print(pivot)
# 输出:
# year    202120222023
# employee               
# 张三    15.018.022.0
# 李四    20.021.0   0.0
</code></pre>
<p>💡 <strong>业务复用场景</strong>:</p>
<ul>
<li>财务:各事业部季度营收对比,一眼看出谁在拖后腿</li>
<li>运营:各渠道月度ROI透视,快速分配下月预算</li>
<li>产品:各功能模块周活对比,决定迭代优先级</li>
</ul>
<h1 id="-模式5累计指标--看趋势别只看单点">🎯 模式5:累计指标 = 看趋势,别只看单点</h1>
<p><strong>业务场景</strong>:<br>
投资人想看"剔除退款后的真实增长",计算3个月滚动平均GMV,平滑大促波动,看清长期趋势。</p>
<p><strong>核心逻辑</strong>:<br>
先按月聚合(剔除负值退款),再用rolling().mean()算滑动平均,最后按时间排序输出。</p>
<p><strong>Python代码示例</strong>:</p>
<pre><code class="language-python"># 模拟采购数据(含退款负值)
purchase_df = pd.DataFrame(
    {
      "date": pd.date_range("2023-01", periods=13, freq="ME"),# 生成13期
      "amount": ,
    }
)

# 1. 按月聚合 + 剔除退款
monthly = (
    purchase_df &gt; 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"]])

## 运行结果:
'''
         datemonthly_gmvrolling_3m
02023-01-31          120         NaN
12023-02-28            0         NaN
22023-03-31          135   85.000000
32023-04-30          142   92.333333
42023-05-31            0   92.333333
52023-06-30          158100.000000
62023-07-31          165107.666667
72023-08-31          170164.333333
82023-09-30            0111.666667
92023-10-31          185118.333333
10 2023-11-30          192125.666667
11 2023-12-31          200192.333333
12 2024-01-31          210200.666667
'''
</code></pre>
<p>💡 <strong>业务复用场景</strong>:</p>
<ul>
<li>B站:UP主粉丝7日滚动增长,识别内容爆发点</li>
<li>蔚来:门店周订单滚动均值,评估新车型热度</li>
<li>阿里云:客户月消耗滚动趋势,预判续费风险</li>
</ul>
<h1 id="-模式6漏斗分析--用户去哪了">🎯 模式6:漏斗分析 = 用户去哪了?</h1>
<p><strong>业务场景</strong>:<br>
分析用户从"首次登录"→"周活5次+"→"月观看10h+"的转化路径,计算各阶段流失率,优化新手引导。</p>
<p><strong>核心逻辑</strong>:<br>
用CTE(或pandas多步筛选)定义每阶段用户,再用LEFT JOIN串联,最后算转化率=末阶段/首阶段。</p>
<p><strong>Python代码示例</strong>:</p>
<pre><code class="language-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 &gt; 0]# 活跃用户
stage2 = user_df &gt;= 5]# 深度活跃
stage3 = user_df[(user_df['sessions_30d'] &gt;=5) &amp; (user_df['watch_hours']&gt;=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)

## 运行结果:
'''
countryactive_usersengaged_userspower_usersconversion_rate
0      CN         100             93         14             14.0
'''
</code></pre>
<p>💡 <strong>业务复用场景</strong>:</p>
<ul>
<li>淘宝:浏览→加购→支付,优化购物车流失</li>
<li>得到:试听→购课→完课,提升知识付费转化</li>
<li>微信支付:绑卡→首刷→复刷,加速支付习惯养成</li>
</ul>
<h1 id="-模式7时间对比--今天比昨天好在哪">🎯 模式7:时间对比 = 今天比昨天好在哪?</h1>
<p><strong>业务场景</strong>:<br>
城管局想监控"每日违规开单量"的日环比变化,快速发现执法强度波动或居民配合度变化。</p>
<p><strong>核心逻辑</strong>:<br>
先按日聚合违规数,再用<code>shift()</code>取前一天值,最后相减得差值,正数=变严,负数=变松。</p>
<p><strong>Python代码示例</strong>:</p>
<pre><code class="language-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"]])

## 运行结果:
'''
      datedaily_countdiff
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
'''
</code></pre>
<p>💡 <strong>业务复用场景</strong>:</p>
<ul>
<li>抖音:日活用户日环比,监控内容热点效应</li>
<li>美团:日订单量波动,快速响应天气/节日影响</li>
<li>招商银行:日理财申购变化,捕捉市场情绪拐点</li>
</ul>
<h1 id="-总结">🎁 总结</h1>
<p>这7个模式,真不是啥高深算法。</p>
<p><strong>但90%的业务分析题,拆开看,就是它们的排列组合</strong>。</p>
<p>面试前刷一遍,工作中套一遍,效率直接拉满。</p>
<blockquote>
<p>✨ 记住:数据是死的,套路是活的。掌握模式,才能以不变应万变。</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/wang_yb/p/19830000
頁: [1]
查看完整版本: 理论都会,实战就废?7个分析模板,帮你打通任督二脉