基于 Python 机器学习 与 PyQt5 桌面框架开发的可视化分析系统——基于大数据的网上购物消费行为分析可视化大屏

基于大数据的网上购物消费行为分析可视化大屏

基于 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 核心能力

  1. 多源数据接入 支持 CSV / Excel / JSON / TSV / TXT 上传;也可使用内置 9 种业务场景例样。

  2. 消费行为机器学习分析

    • 数值特征标准化(StandardScaler

    • KMeans 聚类刻画群体结构

    • PCA 降维得到三维坐标

    • 随机森林分类,输出准确率、召回率、精确率、F1

    • 默认仅分析当前数据 ;可选结合历史记录再分析

  3. Three.js 并排行为展台 3D

    • 各行为类型按样本量排序,横向并排展台,互不重叠

    • 核心几何体 + 底座光环 + 光晕 + 轨道卫星 + 局部分布点

    • 数据牌置于模型上方并放大显示(样本量、占比、进度条)

    • 例样对应不同视觉主题(classic / neon / crystal / tech / orbit 等)

    • 交互:滚轮缩放、左键旋转、右键平移;点击选中光柱提示(无抖动缩放)

  4. ECharts 图表分析 堆叠面积、柱状、环图/饼图、雷达、散点、盒须、瀑布、热力、回归示意等多种类型,可在图表页自由组合。

  5. 主页布局可调 左/右 3D、上 3D 下数据、3D 聚焦;可调左右比例、预览高度、3D 高度;可显隐预览表/图表/指标;布局可保存。

  6. 持久化与归档 日志、图片按日期分子目录保存;分析结果、参数、图片路径写入 SQLite。

  7. 样式与配置 可调背景色、字体族与字号(默认中文六号约 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.pyBehaviorAnalyzer.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 夜间消费占比

处理步骤:

  1. 缺失值用列中位数填充

  2. StandardScaler:Z-Score 标准化,消除量纲影响

若候选特征不足 3 列,则自动从 DataFrame 数值列中选取最多 8 列。

4.3 无监督学习:KMeans 聚类

  • 库 / 类: sklearn.cluster.KMeans

  • 作用: 在特征空间划分消费群体结构

  • 可配参数: n_clusters(默认 5)、random_staten_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

启动时程序会:

  1. 启用高 DPI 缩放与共享 OpenGL 上下文(便于 WebEngine)

  2. 读取 config/settings.json

  3. 若不存在则自动生成 data/sample_shopping.csv

  4. 按屏幕可用区域自适应窗口大小并居中显示


六、使用方式与操作流程

6.1 推荐完整流程

复制代码
启动程序(py -3 main.py)
        ↓
┌───────────────────────────────────────────────┐
│ 方式 A:主页 → 下拉选择例样 →「加载例样并分析」 │
│ 方式 B:导航「例样」→ 预览 →「分析并前往主页」   │
│ 方式 C:主页「上传消费数据」→「开始分析」        │
└───────────────────────────────────────────────┘
        ↓
主页查看:数据预览表、Three.js 并排展台、准确率/召回率/精确率/F1、
         识别报告、右侧迷你图表、左上图例与右上模型评估
        ↓
(可选)拖动 / 缩放 / 旋转 3D,点击模型查看详情
        ↓
(可选)进入「图表」页组合 ECharts 深入分析
        ↓
(可选)「参数」调超参后回到主页重新分析
        ↓
「日志 / 管理」查看归档;「样式 / 配置」调整外观与存储路径

6.2 主页操作说明

  1. 例样下拉框: 选择内置场景例样。

  2. 加载例样并分析: 生成数据并立即跑完整 ML,刷新 3D / 指标。

  3. 打开例样页: 进入独立例样浏览页(说明与预览更详细)。

  4. 上传消费数据: 选择本地文件;需含可用数值列(建议含或可推导行为标签)。

  5. 开始分析: 对当前已加载数据再次分析(参数变更后尤其有用)。

  6. 结合历史记录分析: 勾选后,将当前数据与近期分析缓存合并再训练(默认不勾选)。

  7. 主页布局栏: 切换布局模式、比例、高度、显隐,点「应用布局」可持久化。

6.3 例样页操作说明

  1. 左侧选择例样条目,右侧自动预览说明与表格。

  2. 预览例样 / 仅预览不分析: 只刷新预览表。

  3. 分析并前往主页: 完整分析后自动跳转主页并回填结果。

6.4 图表页操作说明

  1. 为图表 A / B / C / D 分别选择图表类型。

  2. 点击「生成/刷新组合图表」。

  3. 若主页已有分析结果,图表优先使用当前分析数据;否则使用演示数据。

6.5 参数 / 样式 / 配置 / 用户 / 日志 / 管理

页面 操作要点
参数 修改 n_clustersn_estimatorsmax_depthtest_sizerandom_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.pySAMPLE_CATALOG 中注册生成函数与 model_theme

  • 新增页面:ui/pages/ 实现页面,并在 nav_bar.PAGESmain_window._pages 注册。

  • 新增图表:ui/widgets/chart_options.py 增加 option 构建函数,并加入 CHART_BUILDERS

  • 调整 3D 外观: 编辑 ui/widgets/threejs_widget.pymakeBehaviorModelmakeDataBoard、主题几何体、图例/统计 HUD 等)。

  • 调整算法: 编辑 core/ml_analyzer.py 中的特征列表、聚类/分类器或评估逻辑。


十二、版本与许可说明

  • 项目类型: 教学 / 演示向可视化大屏

  • 第三方: Three.js、ECharts、scikit-learn、PyQt5 等遵循各自开源协议

  • 请在合规前提下使用真实用户数据,注意隐私脱敏


十三、快速命令备忘

复制代码
# 安装依赖
py -3 -m pip install -r requirements.txt
​
# 运行程序
py -3 main.py

建议体验路径: 例样页预览 → 分析并前往主页 → 交互并排 3D 展台 → 图表页组合分析 → 管理页查看归档。

https://github.com/zhangsansh/Python-PyQt5-Three-Echarts321.githttps://github.com/zhangsansh/Python-PyQt5-Three-Echarts321.git

相关推荐
一位正在转型AI全栈的前端工程师21 分钟前
AI 全栈学习之旅 -Week 5:RAG 知识库问答系统:从零到生产级部署的全栈实践总结
前端·python
2601_9623818624 分钟前
Python办公联动:Excel数据一键自动生成PPT图表
python·数据分析·自动化·excel·ppt
东莞市永盛电气30 分钟前
三相208V变380V变压器,出海工业设备供电适配方案
python·单片机·嵌入式硬件
「QT(C++)开发工程师」31 分钟前
C++11 std::unique_ptr — 独占所有权的智能指针
c语言·开发语言·c++·qt
未若君雅裁1 小时前
上下文压缩双刃剑-Summarization与ContextEditing中间件实战
python·中间件·langchain
IT毕设实战小研1 小时前
电影数据可视化推荐系统
大数据·后端·爬虫·python·算法·信息可视化·课程设计
前端 贾公子2 小时前
第09章:上下文与记忆 (3)
python·langchain
缘友一世2 小时前
GLM-5.3-NVFP4 部署实战系列[二]Docker 镜像选择与补丁镜像构建:纯 Python overlay,不重编一行 CUDA
python·docker·容器·vllm
海兰2 小时前
【 Python 量化交易】第3章:金融基础概念
开发语言·python·金融