摘要:本文基于前文搭建的 Docker + Spark + Jupyter 实验环境,加载模拟的电商访问日志,手把手演示如何用 PySpark 完成 用户行为路径提取、核心漏斗分析、次日留存计算。所有代码可在本地运行,适合数据分析师、运营同学快速验证业务假设。
一、我们分析什么?——定义“高价值行为路径”
在电商平台,一条典型的高价值路径是:
首页曝光 → 商品详情页浏览 → 加入购物车 → 提交订单 → 支付成功
但现实中,大量用户在中途流失。我们的目标是:
量化各环节转化率(漏斗分析)
识别“加购未支付”等高风险群体
计算新用户的次日留存率(衡量产品粘性)
💡 这些指标直接关联 GMV、获客成本 ROI、用户生命周期价值(LTV) ——正是管理会计关注的核心。
二、准备数据:模拟一份电商访问日志
电商日志通常由前端埋点或 Nginx access log 生成。我们创建一个简版 access.log,每行包含:
user_id, event_type, page_url, timestamp
示例数据(保存为 ~/my-spark-lab/access.log):
1001,view_homepage,/,1700000000
1001,view_product,/product/123,1700000060
1001,add_to_cart,/cart,1700000120
1001,checkout,/order,1700000180
1001,payment_success,/success,1700000240
1002,view_homepage,/,1700000300
1002,view_product,/product/456,1700000360
1002,add_to_cart,/cart,1700000420
1003,view_homepage,/,1700000500
...
🔒 注:真实日志可能含 IP、UA、session_id 等,此处仅保留分析所需字段。
三、启动环境 & 加载数据
确保你已按上一篇搭建好环境,并将 access.log 放入 ~/my-spark-lab。
在 JupyterLab 中新建 Notebook,执行:
import findspark
findspark.init()
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
# 创建 Spark 会话
spark = SparkSession.builder
.appName("UserPathAnalysis")
.master("local[*]")
.getOrCreate()
# 读取日志(无 header,指定列名)
df = spark.read.csv("work/access.log", sep=",")
.toDF("user_id", "event_type", "page_url", "timestamp")
.withColumn("timestamp", col("timestamp").cast("long"))
df.show(5)
四、实战1:构建用户行为路径(Session 化)
首先,我们将同一用户的连续行为归为一个“会话”(Session)。简化处理:以 user_id 分组,按时间排序。
# 按用户和时间排序
user_paths = df.orderBy("user_id", "timestamp")
.groupBy("user_id")
.agg(collect_list("event_type").alias("path"))
user_paths.show(truncate=False)
输出示例:
+-------+--------------------------------------------------+
|user_id|path |
+-------+--------------------------------------------------+
|1001 |[view_homepage, view_product, add_to_cart, ...] |
|1002 |[view_homepage, view_product, add_to_cart] |
|1003 |[view_homepage] |
+-------+--------------------------------------------------+
五、实战2:漏斗分析——计算核心环节转化率
我们定义漏斗四步:
view_product(浏览商品)
add_to_cart(加购)
checkout(提交订单)
payment_success(支付成功)
关键技巧:用 array_contains 判断路径是否包含某事件。
from pyspark.sql.types import IntegerType
# 标记每个用户是否完成各步骤
funnel_df = user_paths
.withColumn("viewed", expr("array_contains(path, 'view_product')"))
.withColumn("added", expr("array_contains(path, 'add_to_cart')"))
.withColumn("checked", expr("array_contains(path, 'checkout')"))
.withColumn("paid", expr("array_contains(path, 'payment_success')"))
# 计算各环节转化率(以“浏览商品”为起点)
total_viewed = funnel_df.filter(col("viewed")).count()
added_count = funnel_df.filter(col("added")).count()
checked_count = funnel_df.filter(col("checked")).count()
paid_count = funnel_df.filter(col("paid")).count()
print(f"浏览商品人数: {total_viewed}")
print(f"加购转化率: {added_count / total_viewed:.2%}")
print(f"下单转化率: {checked_count / added_count:.2%}")
print(f"支付转化率: {paid_count / checked_count:.2%}")
📊 假设输出:
浏览商品人数: 1000
加购转化率: 35.00%
下单转化率: 60.00%
支付转化率: 80.00%
洞察:加购是最大流失点!应优先优化购物车体验或推送优惠券。
六、实战3:次日留存分析(新用户粘性评估)
定义:T 日新增用户中,T+1 日仍活跃的比例。
步骤:
找出每个用户的首次访问日(作为“新增日”)
找出该用户是否有次日行为
from pyspark.sql.window import Window
# 转换时间戳为日期
df_date = df.withColumn("event_date", from_unixtime(col("timestamp"), "yyyy-MM-dd"))
# 找出每个用户的首访日
window = Window.partitionBy("user_id").orderBy("event_date")
first_visit = df_date.withColumn("first_day", first("event_date").over(window))
.select("user_id", "event_date", "first_day")
.distinct()
# 标记是否次日活跃
retention = first_visit
.withColumn("is_retained",
when(datediff(col("event_date"), col("first_day")) == 1, 1).otherwise(0))
# 计算次日留存率
new_users = retention.filter(col("event_date") == col("first_day")).count()
retained_users = retention.filter(col("is_retained") == 1).count()
print(f"新增用户数: {new_users}")
print(f"次日留存率: {retained_users / new_users:.2%}")
💡 管理会计视角:若获客成本为 50 元/人,留存用户 LTV 为 300 元,则只要留存率 > 16.7% 就盈利。模型帮你守住这条生死线!
七、进阶思考:如何驱动业务决策?
分析结果 运营动作 财务影响
加购转化率低 推送“限时免运费”弹窗 预估提升 GMV 5%
次日留存 < 20% 优化新手引导流程 降低获客浪费,ROI +15%
支付失败集中于某银行 对接更稳定支付通道 减少订单流失
✅ 这才是大数据的终极价值:把数据变成可执行的利润策略。
八、结语:小数据,大洞察
本文仅用 几十行 PySpark 代码 + 本地 Docker 环境,就完成了传统需要数天开发的数据分析任务。这正是现代数据工程的魅力:
轻量:无需集群,笔记本即可验证
敏捷:今天发现问题,明天就能 AB 测试
闭环:分析 → 决策 → 行动 → 再分析
🔒 提醒:真实业务中需加入异常过滤(如爬虫流量)、时间窗口校准、多维度下钻(如分渠道、分品类),但核心逻辑不变。