news 2026/9/1 6:48:29

电商用户行为分析全流程:从流量到留存的可运行Python源码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
电商用户行为分析全流程:从流量到留存的可运行Python源码

简介:这份电商用户行为分析源码包面向大数据分析、电商数据分析方向的毕业生及研究者,围绕淘宝用户2017年11月25日至12月3日超1亿条行为记录,完整呈现从数据导入、清洗、异常值处理到Hive分析、可视化展示的毕设流程。压缩包共20个文件,大小16.37MB,主要包含5个Python脚本、5个JSON配置与结果文件、3个Markdown说明文档,以及数据CSV、HTML页面、依赖清单等,涵盖数据处理、分析逻辑、RFM模型、商品维度与可视化页面,便于直接运行和二次开发。已有85人学习浏览,适合需要借鉴可运行代码、论文结构或交互图表的用户。资源还提供源码与配套文档,可复现用户流量、购买转换率、行为习惯等分析模块,并附有Python版本兼容性修复说明,能帮助快速上手部署。 这篇内容已经写完了,下面是完整的 Markdown 正文。

1. 为什么要做这套可运行源码:运营天天追着我问数

去年年底,运营同事拿着一份周报来找我,说“最近不知道怎么回事,加购到支付这一步转化率掉了一半,你能不能帮我看看到底是哪一层出了问题”。我打开后台一查,发现我们手里其实攒了大量用户行为日志,但每次分析都要临时写 SQL、导数据、跑脚本,流程又长又容易出错。那次之后我就下定决心,把“电商用户行为分析”这件事整理成一套可以直接跑的分析工程,沉淀成可运行源码,以后任何一次分析需求,只要把数据丢进去、跑一遍脚本,该有的指标和报告自动就出来了。

这套源码的定位很明确:不是一套炫技的算法框架,也不是一坨看不懂的实验代码,而是一个从原始行为日志到最终分析报表的完整闭环。它覆盖了流量概览、转化漏斗、用户分群、留存分析这几个电商运营最关心的模块,适合正在搞数据分析、想学习电商用户行为分析思路的工程师,也适合团队里没有数仓、只能用脚本做分析的场景。我把它整理出来之后,内部团队已经开始用它做每月的常规复盘,效果很稳定。下面我就把这套东西的架构、核心指标实现和运行方式完整拆开讲。

2. 一个可运行的分析项目,要先回答业务问题

2.1 用户行为分析不是在堆指标

我刚接触用户行为分析那会儿,也犯过“指标越多越厉害”的毛病,整理出几十个看板,结果运营打开之后不知道看哪个。后来想明白了,用户行为分析的本质是回答几个固定问题:有多少用户来逛了,用户在什么环节流失,哪些用户值得重点维护,用户买完之后还会不会回来。这四个问题对应到分析里就是流量统计、漏斗转化、用户分层和留存分析。这套源码的设计就围绕这四条主线展开,不贪多,不堆砌,先把核心问题解决到位。

2.2 我锁定的五个核心分析场景

我在源码里实际落地了五个场景。每个场景都是一个独立的分析脚本,输出一份明确的统计结果,这样运营可以直接看报告,也可以把结果导出到自己的报表工具里。

  • 流量概览:统计每天的 PV、UV、人均点击次数、活跃商品数,掌握大盘走势。
  • 转化漏斗:覆盖浏览、加购、下单、支付四个关键环节,定位每一步的流失比例。
  • 用户分群:基于 RFM 模型把用户划分成高价值、潜力、流失等类型,方便精细化运营。
  • 留存分析:计算次日留存、7 日留存,判断用户回访能力和活动拉新质量。
  • 商品偏好分析:统计被浏览、加购、下单最多的商品类目,帮助选品和备货。

这五个场景基本能覆盖电商运营 80% 以上的日常分析需求。在源码里,每个场景都对应独立的脚本,跑完会生成 CSV 和可视化用的聚合数据,互不依赖,想单独分析哪一块就单独跑哪一块。

3. 技术选型与源码架构:为什么这样分工

3.1 技术栈:不需要分布式也能跑全流程

这套源码的核心技术栈是 Python 3.8+、Pandas、NumPy,输出层用了 CSV 文件,同时配了一个简单的 HTML 报告模板,方便直接在浏览器里看结果。为什么这么选?我当时考虑过要不要上 Spark、Hive 那一套大数据组件,但后来意识到大部分中小型电商团队的数据量在千万级以内,Pandas 配合分块读取完全能扛住,没必要把项目复杂度拉高。单机 Python 的好处是环境好搭、调试方便、代码可读性强,任何有 Python 基础的人拿到源码很快就能上手。

3.2 源码目录:一条任务流水线串起来

一套可运行源码最忌讳的就是文件乱放,脚本之间不知道谁先谁后。我用了流水线的思路组织目录,每个数字前缀代表执行顺序,拿到项目之后按顺序跑就行。

ecommerce-user-behavior-analysis/ ├── data/ │ ├── raw/ # 原始行为日志,CSV 格式 │ ├── processed/ # 清洗后的中间数据 │ └── demo_data_generator.py # 模拟数据集生成脚本 ├── scripts/ │ ├── 01_clean_data.py # 数据清洗与去重 │ ├── 02_traffic_overview.py # 流量大盘分析 │ ├── 03_conversion_funnel.py # 漏斗转化分析 │ ├── 04_rfm_segmentation.py # RFM 用户分层 │ ├── 05_retention_analysis.py # 留存分析 │ └── utils/ │ └── data_loader.py # 公共数据读取模块 ├── output/ │ └── reports/ # 所有分析结果输出目录 ├── requirements.txt └── README.md

这个结构的好处很明显:原始数据和处理数据分离,分析脚本和公共工具分离,输出结果统一管理。拿到源码后,一般 10 分钟就能跑通全流程。

4. 核心指标与实现逻辑:代码是业务的翻译

4.1 流量概览:先搞懂 PV、UV 和去重逻辑

流量概览是最基础但不简单的模块。PV 是页面点击次数,UV 是独立访客数,这两个指标看起来简单,实际处理时非常容易踩坑。我在源码里统计 UV 时用的是 user_id 去重,但很多埋点数据会有重复上报,比如用户快速刷新页面导致同一时刻记录了多条点击。如果直接对 user_id 去重,UV 就被高估了。所以我在清洗阶段做了基于“用户 + 商品 + 行为类型 + 时间窗口”的合并去重,把 10 秒内同一个人对同一商品的重复操作折叠成一次有效行为,这样算出来的 PV 和 UV 才贴近真实情况。

4.2 漏斗转化:不能跳步骤,要算全链路

转化漏斗用的是经典的“浏览→加购→下单→支付”四步模型。很多刚做分析的同学只会算“总支付人数 / 总浏览人数”这一个整体转化率,但这样定位不了问题出在哪一步。源码里的漏斗脚本会计算每一步到下一步的转化率,以及每一步相对于第一步的整体转化率,这样运营一眼就能看出是加购环节还是支付环节出了问题。

funnel_steps = ["view", "cart", "order", "pay"] for i in range(len(funnel_steps) - 1): cur_step = funnel_steps[i] next_step = funnel_steps[i + 1] cur_users = behavior[behavior["behavior_type"] == cur_step]["user_id"].nunique() next_users = behavior[behavior["behavior_type"] == next_step]["user_id"].nunique() step_conversion = next_users / cur_users if cur_users > 0 else 0

这里有个小细节:统计每步用户数时必须用去重后的 user_id,而且同一个用户在同一天内多次完成“浏览→加购”只算一次转化,这样才能准确反映真实用户转化情况。我在代码注释里特别标明了这一点,避免后来维护的人理解偏。

4.3 RFM 用户分层:打分阈值不能靠拍脑袋

RFM 是三个维度的缩写:Recency(最近一次消费时间)、Frequency(消费频率)、Monetary(消费金额)。这套模型在电商会员运营里用了很多年,核心逻辑是把用户按这三个维度打分后分层。实现上最关键的坑是阈值怎么定。我见过有人直接拍脑袋写死“消费 5 次以上算高频率”,这样的结果换个业务场景就不适用了。源码里我用的是分位数分段,先算出三个维度的分布,按 25%、50%、75% 分位切成四个档位,再映射成 1~4 分,这样阈值是数据驱动的,换一套数据也能自动适配。

打分完成之后,我再根据三个维度的分数高低组合,把用户映射到八类人群中,比如“重要价值用户”“重点保持用户”“重点发展用户”“一般挽留用户”等,并输出每一类的人数占比。

4.4 留存分析:注意时间口径和基准日

留存分析的核心是算“某天来的用户,过了 N 天后还有多少用户回来”。这里面最大的坑是时间口径。比如算次日留存,是以用户首个活跃日作为基准日,然后看这个用户在基准日之后第二天是否再次出现。我最初写的时候没有区分“自然日”和“活跃日”,导致次日留存算出来比真实值高。源码里我统一用“用户在该天的首次活跃日期”作为基准日,并且用 UTC 时间戳先转成东八区日期再做计算,所有日期都用 date 对象而不是 datetime 对象,避免跨天边界问题。

5. 从源码到可复现:环境准备与运行步骤

5.1 环境要求与依赖安装

这套源码不需要大数据组件,本机跑起来很轻。建议用 Python 3.8 以上版本,装依赖只需要一条命令:

pip install -r requirements.txt

requirements.txt 里主要就是 pandas、numpy、jinja2 这三个,加一个 pytest 用于跑单元测试。没有装 Python 的 Windows 用户去官网下载安装包,安装的时候记得勾选“Add Python to PATH”,否则命令行里识别不了 python 命令。macOS 用户如果系统自带 Python 版本太老,建议先装 Homebrew 再通过它安装新版本 Python。

5.2 第一步:生成模拟数据

因为直接提供真实用户日志涉及隐私,我在源码里放了一个模拟数据生成器,可以按你的需求生成指定天数、指定用户量的行为日志。运行方式很简单:

cd data python demo_data_generator.py --days 30 --users 5000

生成的数据格式长这样,每一行代表一条用户行为记录:

user_id,item_id,category_id,behavior_type,timestamp 10001,900003,323,view,2024-03-01 10:23:11 10001,900003,323,cart,2024-03-01 10:25:47 10002,900007,402,view,2024-03-01 10:31:02

behavior_type 字段有四个枚举值:view(浏览)、cart(加购)、order(下单)、pay(支付)。模拟器会自动按照一个近似的真实转化概率生成行为链,例如每个浏览用户里有 30% 会加购,加购用户里 15% 会下单,下单用户里 80% 会支付。这样生成的模拟数据比较接近真实业务,分析出来的指标不会太失真。

5.3 第二步:按顺序跑分析脚本

数据准备好之后,回到项目根目录,按数字前缀顺序依次运行脚本:

python scripts/01_clean_data.py python scripts/02_traffic_overview.py python scripts/03_conversion_funnel.py python scripts/04_rfm_segmentation.py python scripts/05_retention_analysis.py

每个脚本跑完,output/reports 目录下会出现对应的 CSV 结果文件和一份汇总的 HTML 报告。我试过在 8GB 内存的笔记本上跑 5000 个用户 30 天的模拟数据,整个流程不到 1 分钟就出结果。如果换成真实数据,假设每天 100 万条日志、共 30 天,也就是 3000 万条,单机 Pandas 分块读取也能在 10 分钟左右跑完,性能是可以接受的。

6. 真实使用中踩过的坑和优化

6.1 重复埋点导致 UV 虚高

这是我在拿到真实数据后遇到的第一个大坑。产品经理给页面加了一个新版埋点,但旧埋点没有下线,导致同一次用户点击同时上报了两条日志,UV 直接翻倍。我的处理方案是在清洗脚本里加入一层“兜底去重”,按 user_id、item_id、behavior_type、小时时间窗口四个字段做组合去重。这个方法不完美,但能过滤掉大多数重复上报,而且在源码里加了注释,后续如果有新的埋点机制,可以直接修改去重键。

6.2 漏斗分析的口径之争

漏斗分析做出来之后,运营对“下单用户数”的定义有了争议:是把所有下单行为去重算,还是按支付成功才算?我在源码里默认按“行为存在即算”的口径,即用户只要产生过 order 行为就进入下单层,但会在报告里额外输出一列“有效下单用户数”,过滤掉那些没有对应支付行为的异常单。这样既满足了运营快速看数的需求,也保留了进一步核对的空间。

6.3 内存与性能的取舍

如果你的数据量确实到了亿级,Pandas 全量读入可能会撑爆内存。我在源码里做了一层优化:读入的时候只读取分析需要的列,用usecols参数过滤掉不用的字段,并结合chunksize分块处理。对时间序列类聚合,先把 timestamp 列转换成 datetime 类型并设为索引,能明显加快重采样和按天聚合的速度。这些优化点不会增加阅读代码的难度,但对真实数据的处理很实用。

最后再分享一个使用技巧:跑分析的时候不要只盯着最终结果,建议每跑完一个脚本都顺手打开中间输出文件看一眼,比如清洗后的数据有多少行、去重掉了多少。这些中间数字能帮你快速判断数据质量。我在内部用这套源码跑了三个月,每周执行一次,基本没有额外维护成本。你也拿到源码后先按默认参数跑通一遍,再替换成自己的数据,遇到问题大概率都出在字段名和时间格式上,对着清洗脚本改一改就能适配。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 6:47:28

Spring Cloud Gateway 从入门到核心功能原理解析

1. 引言 在微服务架构中,一个系统往往被拆分成多个独立的服务,每个服务负责各自的业务领域。随着服务数量的增长,客户端直接调用各个服务会面临诸多问题:服务地址分散难以管理、认证鉴权逻辑重复、跨域处理繁琐、流量控制困难等。…

作者头像 李华
网站建设 2026/9/1 6:46:27

基于SpringBoot的实训项目管理平台毕业设计项目源码

联系博主 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 …

作者头像 李华
网站建设 2026/9/1 6:41:56

音游难度匹配:用Python评估低rks与双指打17的可行性

如果你在音游群里待过一段时间,大概率看过这样一句调侃:检测到低rks玩家试图双指打17,已自动降低准度和分数。第一次看到会心一笑,第二次再看到,其实它背后藏着一个很具体的音游技术问题——玩家综合实力、谱面难度和手…

作者头像 李华
网站建设 2026/9/1 6:39:34

2026-2032年全球椎体后凸成形术球囊市场CAGR达5.8%:产业链全景与发展前景深度解析

在全球人口老龄化进程持续加速、老年骨质疏松性椎体骨折发病率逐年攀升的行业大背景下,椎体后凸成形术球囊作为骨质疏松性椎体骨折微创治疗的核心植入耗材,正凭借创伤小、止痛效果快、术后恢复周期短的核心优势,走出一条稳健且长期高确定性的…

作者头像 李华