基于大数据的网上购物消费行为分析可视化大屏
基于 Python 机器学习 与 PyQt5 桌面框架开发的可视化分析系统。面向网上购物消费行为数据,提供多源数据接入、例样场景、行为分类建模、Three.js 并排展台式 3D 展示、ECharts 多维图表、日志/参数/用户管理、样式与配置自定义等完整能力。
一、项目简介
本系统围绕「消费行为识别与可视化」构建:将用户订单、浏览、折扣、退货、渠道等多维特征输入机器学习流水线,输出行为类别(如高价值用户、价格敏感型、高频活跃型等),并在大屏中以 3D 展台模型 + 指标面板 + 图表 同步呈现。
适用场景:
-
电商运营与用户分层分析演示
-
大数据 / 机器学习课程设计与毕业设计展示
-
消费行为特征探索与可视化汇报
程序入口: main.py 推荐启动: py -3 main.py
二、功能说明
2.1 页面一览
| 页面 | 导航名 | 主要功能 |
|---|---|---|
| 主页 | 主页 | 上传数据 / 选择例样并分析、可调布局、Three.js 3D 展台、准确率/召回率等指标、识别报告、迷你图表 |
| 例样页 | 例样 | 浏览 9 种示例数据集、预览表格、一键分析并跳转主页 |
| 图表页 | 图表 | 4 个 ECharts 槽位,任意组合多种图表类型 |
| 日志页 | 日志 | 操作日志列表、分析快照图片预览 |
| 参数页 | 参数 | 机器学习超参、界面字号等 |
| 管理页 | 管理 | 分析结果 / 参数快照 / 图片记录 / 按日目录结构 |
| 用户页 | 用户 | 系统用户增删改查(SQLite) |
| 样式页 | 样式 | 页面/图表/3D 背景、字体、按钮、雾气强度等 |
| 配置页 | 配置 | 日志目录、图片目录、数据库路径、是否结合历史分析 |
2.2 核心能力
-
多源数据接入 支持
CSV / Excel / JSON / TSV / TXT上传;也可使用内置 9 种业务场景例样。 -
消费行为机器学习分析
-
数值特征标准化(
StandardScaler) -
KMeans 聚类刻画群体结构
-
PCA 降维得到三维坐标
-
随机森林分类,输出准确率、召回率、精确率、F1
-
默认仅分析当前数据 ;可选结合历史记录再分析
-
-
Three.js 并排行为展台 3D
-
各行为类型按样本量排序,横向并排展台,互不重叠
-
核心几何体 + 底座光环 + 光晕 + 轨道卫星 + 局部分布点
-
数据牌置于模型上方并放大显示(样本量、占比、进度条)
-
例样对应不同视觉主题(classic / neon / crystal / tech / orbit 等)
-
交互:滚轮缩放、左键旋转、右键平移;点击选中光柱提示(无抖动缩放)
-
-
ECharts 图表分析 堆叠面积、柱状、环图/饼图、雷达、散点、盒须、瀑布、热力、回归示意等多种类型,可在图表页自由组合。
-
主页布局可调 左/右 3D、上 3D 下数据、3D 聚焦;可调左右比例、预览高度、3D 高度;可显隐预览表/图表/指标;布局可保存。
-
持久化与归档 日志、图片按日期分子目录保存;分析结果、参数、图片路径写入 SQLite。
-
样式与配置 可调背景色、字体族与字号(默认中文六号约 7.5pt)、按钮尺寸与圆角、图表白雾、3D 雾效等。
三、技术栈与基础框架
3.1 桌面与界面
| 技术 | 用途 |
|---|---|
| Python 3.10+(推荐 3.12) | 主语言 |
| PyQt5 | 桌面 GUI 主框架(窗口、导航、表格、分割器、滚动页等) |
| PyQtWebEngine | 内嵌 Chromium,承载 Three.js 与 ECharts |
| PyQt5.QtWebChannel | Python ↔ JavaScript 双向通信(3D 点击事件回传) |
3.2 数据与机器学习
| 技术 | 用途 |
|---|---|
| pandas | 数据读写、清洗、聚合、例样生成 |
| numpy | 数值计算、特征矩阵 |
| scikit-learn | 机器学习算法与评估指标 |
| openpyxl | Excel(.xlsx)读写支持 |
3.3 可视化
| 技术 | 用途 |
|---|---|
| Three.js(CDN,r128) | WebGL 三维场景、OrbitControls、组合网格模型 |
| Apache ECharts 5 | 业务图表与组合分析 |
| matplotlib | 辅助/遗留能力;当前主路径为 Three.js |
| Pillow | 图片占位与快照辅助 |
3.4 存储
| 技术 | 用途 |
|---|---|
| SQLite3(标准库) | 操作日志、分析结果、参数快照、图片记录、系统用户 |
| JSON 配置文件 | config/settings.json |
| 按日文件系统归档 | storage/logs/YYYY-MM-DD/、storage/images/YYYY-MM-DD/ |
3.5 架构分层
python12/
├── main.py # 程序入口(高 DPI、字体、启动主窗)
├── requirements.txt # Python 依赖
├── README.md # 本文档
├── config/
│ └── settings.json # 运行配置 / UI 样式 / 布局 / ML 超参
├── core/ # 业务核心(与界面解耦)
│ ├── config_manager.py # 配置读写
│ ├── data_loader.py # 数据加载 + 多例样目录
│ ├── ml_analyzer.py # 机器学习流水线
│ ├── db_manager.py # SQLite
│ ├── logger.py # 日志与图片归档
│ └── ui_style.py # 样式读写
├── ui/ # 界面层
│ ├── main_window.py # 主窗口 + 页面栈
│ ├── styles.py # 全局 QSS
│ ├── pages/ # 各功能页(home/sample/chart/...)
│ └── widgets/ # 导航、Three.js、ECharts、滚动容器等
├── data/ # 数据库与样例 CSV
└── storage/ # 日志与图片按日归档
设计要点:
-
近似 MVC 分层 :
core负责数据与算法,ui负责展示与交互 -
无侧边栏 :顶部图标导航 +
QStackedWidget切换页面 -
可滚动页面 :
ScrollPage保证小分辨率下内容可完整查看 -
Web 可视化嵌入 :通过
QWebEngineView加载内联 HTML/JS,实现 3D 与图表
四、所用 Python / 机器学习算法
分析入口:core/ml_analyzer.py → BehaviorAnalyzer.analyze()。
4.1 整体流水线
原始 DataFrame
↓
选取数值特征列(FEATURE_CANDIDATES 或自动取数值列)
↓
缺失值中位数填充
↓
StandardScaler 标准化
├─→ KMeans 聚类(群体结构 / 无标签时的类别来源)
├─→ PCA(n_components=3) → 三维坐标(coords)
└─→ LabelEncoder + train_test_split
↓
RandomForestClassifier 训练与预测
↓
Accuracy / Recall / Precision / F1 + classification_report
↓
返回:coords、labels、colors、metrics、feature_importance、chart_data 等
4.2 特征工程
常用数值特征(存在则自动选取):
| 字段 | 含义 |
|---|---|
age |
年龄 |
order_count |
订单次数 |
avg_amount |
客单价 |
total_amount |
累计消费 |
discount_rate |
折扣力度 |
browse_time_min |
浏览时长(分钟) |
cart_items |
加购件数 |
return_rate |
退货率 |
review_score |
评分 |
is_member |
是否会员 |
night_ratio |
夜间消费占比 |
处理步骤:
-
缺失值用列中位数填充
-
StandardScaler:Z-Score 标准化,消除量纲影响
若候选特征不足 3 列,则自动从 DataFrame 数值列中选取最多 8 列。
4.3 无监督学习:KMeans 聚类
-
库 / 类:
sklearn.cluster.KMeans -
作用: 在特征空间划分消费群体结构
-
可配参数:
n_clusters(默认 5)、random_state、n_init=10 -
说明: 若数据无
behavior_label,则以聚类结果映射为默认行为名;有标签时标签优先用于监督分类
4.4 降维:PCA(主成分分析)
-
库 / 类:
sklearn.decomposition.PCA(n_components=3) -
作用: 将高维特征投影到三维空间
-
输出:
coords(N×3)供展示与统计;场景中展台布局按行为类别并排,不完全依赖 PCA 坐标散点
4.5 监督学习:随机森林分类
-
库 / 类:
sklearn.ensemble.RandomForestClassifier -
可配参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
n_estimators |
100 | 决策树数量 |
max_depth |
8 | 树最大深度 |
test_size |
0.2 | 测试集比例 |
random_state |
42 | 随机种子 |
-
划分:
train_test_split;类别样本充足时使用分层抽样stratify,极少类时自动取消分层以防报错 -
标签编码:
LabelEncoder -
评估指标:
| 指标 | 说明 |
|---|---|
| Accuracy | 准确率 |
| Recall | 召回率(weighted) |
| Precision | 精确率(weighted) |
| F1-Score | F1(weighted) |
| classification_report | 分类型文本报告 |
另输出 feature_importances_(特征重要性),供图表页等使用。
4.6 其他相关方法
| 方法 | 位置 / 用途 |
|---|---|
LabelEncoder |
行为标签编码 |
numpy.polyfit |
图表页线性回归示意(如浏览时长 vs 客单价) |
| 例样合成规则 | data_loader.py 中按业务规则生成 behavior_label |
| 历史合并 | 勾选「结合历史」时 pd.concat 当前数据与近期缓存再训练 |
4.7 例样数据主题(9 种)
| 键名 | 名称 | 3D 主题 | 典型行为类别 |
|---|---|---|---|
| general | 综合消费行为 | classic | 高价值 / 价格敏感 / 高频 / 沉默 / 理性 |
| live | 直播电商场景 | neon | 冲动下单 / 观望 / 复购粉丝 / 羊毛党 / 沉默观众 |
| member | 会员分层场景 | crystal | 钻石 / 金卡 / 银卡 / 普通 / 沉睡 |
| category | 品类偏好场景 | tech | 数码 / 美妆 / 家居 / 食品 / 图书偏好 |
| promo | 促销敏感场景 | orbit | 秒杀 / 满减 / 比价 / 原价 / 观望 |
| time | 时段行为场景 | organic | 夜间 / 午间 / 周末 / 工作日 / 凌晨 |
| return | 退货风险场景 | fortress | 高退货 / 谨慎 / 忠诚 / 尝鲜 / 刚需 |
| region | 区域消费场景 | market | 一线 / 新一线 / 下沉 / 海淘 / 县域 |
| student | 校园消费场景 | bubble | 比价 / 熬夜 / 种草 / 刚需 / 轻奢 |
五、环境要求与安装
5.1 环境要求
-
操作系统: Windows 10/11(当前开发与测试环境)
-
Python: 3.10 及以上(推荐 3.12)
-
网络: 首次加载 Three.js / ECharts 需访问 CDN(可后续改为本地静态资源)
-
显卡: 支持 WebGL(用于 3D)
5.2 安装依赖
在项目根目录执行:
# Windows 推荐使用 py 启动器
py -3 -m pip install -r requirements.txt
或:
pip install -r requirements.txt
主要依赖(见 requirements.txt):
-
PyQt5、PyQtWebEngine
-
numpy、pandas、scikit-learn
-
matplotlib、Pillow、openpyxl、PyOpenGL
5.3 启动程序
py -3 main.py
或:
python main.py
启动时程序会:
-
启用高 DPI 缩放与共享 OpenGL 上下文(便于 WebEngine)
-
读取
config/settings.json -
若不存在则自动生成
data/sample_shopping.csv -
按屏幕可用区域自适应窗口大小并居中显示
六、使用方式与操作流程
6.1 推荐完整流程
启动程序(py -3 main.py)
↓
┌───────────────────────────────────────────────┐
│ 方式 A:主页 → 下拉选择例样 →「加载例样并分析」 │
│ 方式 B:导航「例样」→ 预览 →「分析并前往主页」 │
│ 方式 C:主页「上传消费数据」→「开始分析」 │
└───────────────────────────────────────────────┘
↓
主页查看:数据预览表、Three.js 并排展台、准确率/召回率/精确率/F1、
识别报告、右侧迷你图表、左上图例与右上模型评估
↓
(可选)拖动 / 缩放 / 旋转 3D,点击模型查看详情
↓
(可选)进入「图表」页组合 ECharts 深入分析
↓
(可选)「参数」调超参后回到主页重新分析
↓
「日志 / 管理」查看归档;「样式 / 配置」调整外观与存储路径
6.2 主页操作说明
-
例样下拉框: 选择内置场景例样。
-
加载例样并分析: 生成数据并立即跑完整 ML,刷新 3D / 指标。
-
打开例样页: 进入独立例样浏览页(说明与预览更详细)。
-
上传消费数据: 选择本地文件;需含可用数值列(建议含或可推导行为标签)。
-
开始分析: 对当前已加载数据再次分析(参数变更后尤其有用)。
-
结合历史记录分析: 勾选后,将当前数据与近期分析缓存合并再训练(默认不勾选)。
-
主页布局栏: 切换布局模式、比例、高度、显隐,点「应用布局」可持久化。
6.3 例样页操作说明
-
左侧选择例样条目,右侧自动预览说明与表格。
-
预览例样 / 仅预览不分析: 只刷新预览表。
-
分析并前往主页: 完整分析后自动跳转主页并回填结果。
6.4 图表页操作说明
-
为图表 A / B / C / D 分别选择图表类型。
-
点击「生成/刷新组合图表」。
-
若主页已有分析结果,图表优先使用当前分析数据;否则使用演示数据。
6.5 参数 / 样式 / 配置 / 用户 / 日志 / 管理
| 页面 | 操作要点 |
|---|---|
| 参数 | 修改 n_clusters、n_estimators、max_depth、test_size、random_state、字号 → 保存 → 回主页重新分析 |
| 样式 | 调背景色、字体、按钮、雾气 → 应用/保存,立即作用于全程序 |
| 配置 | 设置日志、图片、数据库路径;设置默认是否结合历史分析 |
| 用户 | 对系统用户进行增删改查 |
| 日志 | 按日查看操作日志与相关图片 |
| 管理 | 浏览分析结果、参数快照、图片记录与目录结构 |
6.6 3D 交互手势
| 操作 | 效果 |
|---|---|
| 鼠标滚轮 | 缩放 |
| 左键拖动 | 旋转视角 |
| 右键拖动 | 平移 |
| 单击模型 | 选中光柱提示 + 右侧详情文本(无缩放抖动) |
展台上方数据牌实时展示该行为类型的排名、样本量与占比;左上角为行为图例,右上角为模型评估指标。
七、数据格式说明
7.1 推荐字段
上传文件建议包含以下列(至少保证有足够数值列):
| 字段 | 含义 | 类型 |
|---|---|---|
| user_id | 用户编号 | 字符串 |
| age | 年龄 | 数值 |
| order_count | 订单次数 | 数值 |
| avg_amount | 客单价 | 数值 |
| total_amount | 累计消费 | 数值 |
| discount_rate | 折扣力度 | 数值 0~1 |
| browse_time_min | 浏览时长(分钟) | 数值 |
| cart_items | 加购件数 | 数值 |
| return_rate | 退货率 | 数值 |
| review_score | 评分 | 数值 |
| is_member | 是否会员 | 0/1 |
| night_ratio | 夜间消费占比 | 数值 0~1 |
| behavior_label | 行为标签(可选) | 字符串 |
| category / channel / region 等 | 类目维度(图表用) | 字符串 |
若无 behavior_label,系统将基于聚类结果生成类别名。
7.2 内置样例文件
-
首次启动生成:
data/sample_shopping.csv -
SQLite 库:
data/shopping_behavior.db
八、存储与目录结构
storage/
logs/
YYYY-MM-DD/
app.log # 当日文本日志
images/
YYYY-MM-DD/
*.png # 分析相关图片快照
data/
shopping_behavior.db # SQLite
sample_shopping.csv # 自动样例
config/
settings.json # 配置与样式、布局、ML 超参
SQLite 主要表:
| 表名 | 内容 |
|---|---|
operation_logs |
操作日志 |
analysis_results |
分析结果与指标 |
saved_params |
参数快照 |
saved_images |
图片路径记录 |
app_users |
系统用户 |
九、配置项说明(settings.json)
| 键 | 说明 |
|---|---|
log_dir / image_dir / db_path |
存储路径 |
font_size |
界面字号(pt,默认 7.5 ≈ 六号) |
ml_params |
机器学习超参字典 |
use_history |
是否默认结合历史分析 |
auto_save |
是否自动按日归档 |
ui_style |
背景色、字体、按钮、雾气等 |
home_layout |
主页布局模式与比例等 |
默认 ML 超参示例:
"ml_params": {
"n_clusters": 5,
"test_size": 0.2,
"random_state": 42,
"n_estimators": 100,
"max_depth": 8
}
十、常见问题
Q1:3D 或图表显示空白? 需安装 PyQtWebEngine,并保证可访问 jsDelivr / cdnjs 等 CDN;检查本机 WebGL 是否可用。
Q2:上传后提示没有数值特征? 请确认文件中至少有 3 列以上数值型字段。
Q3:分类报告某类样本过少报错? 系统已对分层抽样做保护(极少类时自动取消 stratify);若仍异常,可增大例样样本量或检查标签分布。
Q4:字体过小/过大? 到「参数」或「样式」页调整字号后保存即可。
Q5:如何恢复默认深色样式? 「样式」页点击「恢复默认深色」。
Q6:点击 3D 模型会抖动吗? 不会。当前版本已取消选中缩放抖动,仅保留光柱选中提示与详情回传。
十一、二次开发提示
-
新增例样: 在
core/data_loader.py的SAMPLE_CATALOG中注册生成函数与model_theme。 -
新增页面: 在
ui/pages/实现页面,并在nav_bar.PAGES与main_window._pages注册。 -
新增图表: 在
ui/widgets/chart_options.py增加 option 构建函数,并加入CHART_BUILDERS。 -
调整 3D 外观: 编辑
ui/widgets/threejs_widget.py(makeBehaviorModel、makeDataBoard、主题几何体、图例/统计 HUD 等)。 -
调整算法: 编辑
core/ml_analyzer.py中的特征列表、聚类/分类器或评估逻辑。
十二、版本与许可说明
-
项目类型: 教学 / 演示向可视化大屏
-
第三方: Three.js、ECharts、scikit-learn、PyQt5 等遵循各自开源协议
-
请在合规前提下使用真实用户数据,注意隐私脱敏
十三、快速命令备忘
# 安装依赖
py -3 -m pip install -r requirements.txt
# 运行程序
py -3 main.py
建议体验路径: 例样页预览 → 分析并前往主页 → 交互并排 3D 展台 → 图表页组合分析 → 管理页查看归档。








