114-基于Python的1688电脑硬件数据可视化分析系统

1688 电脑硬件数据可视化分析系统技术文档

1. 项目概述

1.1 项目背景

本项目面向 1688 平台电脑硬件商品数据的采集后分析场景,基于 data/1688电脑硬件数据.csv 构建了一套集数据导入、清洗转换、业务管理、图表分析、可视化大屏、用户系统与后台管理于一体的 Web 可视化分析平台。

系统目标包括:

  • 对 CSV 原始数据进行结构化清洗与业务特征提取
  • 对电脑硬件市场进行多维度统计分析与可视化展示
  • 提供登录、注册、个人中心、收藏、分组、备注等用户能力
  • 提供管理员后台、角色权限控制、数据重导与导出能力
  • 构建面向展示和分析的双模式前端页面

1.2 项目定位

本系统属于典型的"数据驱动型可视化分析平台",兼具以下两类能力:

  • 管理型能力:用户管理、数据管理、收藏管理、管理员治理
  • 分析型能力:图表分析、多维展示、可视化大屏、数据洞察

1.3 数据来源

  • 数据文件:data/1688电脑硬件数据.csv
  • 数据内容:商品标题、关键词、价格、销量、商家名称、图片链接、详情链接、服务标签等
  • 数据处理方式:系统启动时自动检测数据库是否已有数据,若为空则自动导入;管理员也可手动重导






























2. 技术栈

2.1 后端技术栈

技术 版本 用途
Python 3.x 系统主开发语言
FastAPI 0.116.1 Web 应用框架,负责页面路由、接口服务
SQLAlchemy 2.0.43 ORM 持久层框架
PyMySQL 1.1.1 MySQL 数据库驱动
Jinja2 3.1.6 服务端模板渲染
python-multipart 0.0.20 表单提交支持
openpyxl 3.1.5 Excel 导出生成
Uvicorn 0.35.0 ASGI 运行服务

2.2 前端技术栈

技术 用途
Bootstrap 5 基础布局、响应式栅格、表单、按钮、下拉菜单
Jinja2 Template 前后端模板联动渲染
ECharts 5 图表可视化引擎
JavaScript 图表渲染、交互切换、导出、播报轮播
CSS3 主题皮肤、深色科技风格、布局美化、动画与交互

2.3 数据库与环境

项目 配置
数据库类型 MySQL
数据库名称 design_114_pc
地址 localhost:3306
用户名 root
密码 123456
字符集 utf8mb4

2.4 静态资源组织

系统当前已将关键前端依赖切为本地静态资源,避免页面对外部 CDN 的强依赖:

  • app/static/css/bootstrap.min.css
  • app/static/js/bootstrap.bundle.min.js
  • app/static/js/echarts.min.js
  • app/static/css/style.css
  • app/static/js/ui.js
  • app/static/js/analytics.js

3. 整体架构设计

3.1 架构模式

本项目采用"单体式 Web 应用 + 分层式业务组织"的架构模式,核心分层如下:

  1. 表现层

    • 基于 FastAPI 路由 + Jinja2 模板
    • 负责页面输出、表单提交、接口响应
  2. 业务层

    • servicesrouters 中的业务逻辑组成
    • 负责数据导入、聚合分析、导出、权限控制等
  3. 数据访问层

    • 基于 SQLAlchemy ORM
    • 负责实体映射、数据库连接、查询与写入
  4. 数据存储层

    • MySQL 存储业务数据
    • CSV 作为系统外部原始数据输入源

3.2 系统架构图

text 复制代码
用户浏览器
   │
   ▼
FastAPI 应用入口(app/main.py)
   │
   ├── 页面路由层(routers)
   │     ├── 首页 / 健康检查
   │     ├── 登录注册
   │     ├── 个人中心
   │     ├── 数据管理
   │     ├── 收藏管理
   │     ├── 分析图表
   │     ├── 可视化大屏
   │     ├── 图片代理
   │     └── 管理后台
   │
   ├── 业务服务层(services)
   │     ├── 数据导入与清洗
   │     ├── 数据分析聚合
   │     ├── Excel 导出
   │     └── 图片抓取代理
   │
   ├── 权限与模板层
   │     ├── Session 登录态
   │     ├── 管理员鉴权
   │     └── Jinja2 渲染
   │
   └── ORM 持久层(models + database)
         └── MySQL / design_114_pc

3.3 目录结构

text 复制代码
pc/
├─ app/
│  ├─ main.py                 # FastAPI 应用入口
│  ├─ config.py               # 系统配置
│  ├─ database.py             # 数据库连接与自动升级
│  ├─ dependencies.py         # 登录态与权限依赖
│  ├─ security.py             # 密码哈希与校验
│  ├─ helpers.py              # Flash 消息工具
│  ├─ templating.py           # Jinja2 模板封装
│  ├─ models/                 # ORM 模型
│  ├─ routers/                # 路由控制器
│  ├─ services/               # 业务服务层
│  ├─ static/                 # 本地静态资源
│  └─ templates/              # 页面模板
├─ data/
│  └─ 1688电脑硬件数据.csv     # 原始数据源
├─ scripts/
│  └─ init_db.py              # 可选初始化脚本
├─ main.py                    # 根入口
├─ requirements.txt           # Python 依赖
├─ README.md                  # 简要说明
└─ 技术文档.md                # 本技术文档

4. 功能设计

4.1 用户与权限模块

4.1.1 注册功能

用户可通过注册页面创建账号,系统支持:

  • 用户名唯一性校验
  • 邮箱唯一性校验
  • 两次密码一致性校验
  • 首个注册用户自动设为管理员
  • 注册后自动登录
4.1.2 登录功能

系统使用用户名 + 密码进行登录,登录时支持:

  • 密码哈希校验
  • 已停用账号拦截
  • Session 登录态写入
4.1.3 退出登录

用户退出后清空 Session,返回首页。

4.1.4 个人中心

个人中心提供:

  • 显示名称修改
  • 邮箱修改
  • 个人简介修改
  • 收藏统计概览
  • 收藏类目偏好统计
  • 收藏分组数量显示
  • 当前角色显示

4.2 数据管理模块

数据管理页是系统的业务核心页面,支持:

  • 标题关键词筛选
  • 生态分组筛选
  • 品牌筛选
  • 商家名称筛选
  • 排序切换
    • 最新导入
    • 价格升序
    • 价格降序
    • 销量降序
    • GMV 降序
  • 分页浏览
  • 结果摘要展示
  • 当前筛选上下文展示
  • 当前页结果导出为 Excel
  • 管理员执行 CSV 重导

4.3 硬件详情模块

详情页不仅展示基础商品信息,还提供对比分析能力:

  • 商品详情展示
  • 是否收藏状态展示
  • 同生态相关样本推荐
  • 同品牌样本推荐
  • 当前商品与所属类目均值对比
  • 当前商品与品牌均值对比
  • 当前商品与商家均值对比
  • 当前商品价格、销量在类目中的相对位置分析

4.4 收藏模块

收藏模块围绕"个人研究池"设计,支持:

  • 收藏 / 取消收藏
  • 收藏分组创建
  • 收藏分组说明填写
  • 收藏备注编辑
  • 收藏分组归类
  • 收藏统计概览
  • 收藏类目分布
  • 收藏商家分布
  • 收藏分组分布
  • 收藏数据导出 Excel

4.5 分析图表模块

分析图表页面用于"分析型浏览",与大屏展示区分开来。

当前分析维度包括:

  1. 市场总览

    • 价格 / 销量 / GMV 三维机会散点图
    • 生态分组供给规模图
    • 价格带对比图
    • 高端 / 主流结构图
    • 品牌热度 / GMV 图
  2. 品牌与品类

    • 品牌 × 品类热力矩阵
    • 品牌热度 / GMV 双轴图
    • GMV 结构树图
    • 品类供给规模图
    • 关键词热度雷达图
  3. 商家与地域

    • 头部商家 GMV 排名图
    • 城市供给分布图
    • 服务标签覆盖图
    • 商家集中度图
    • 供给分组对比图
  4. 机会与成交

    • 机会评分 TOP10 图
    • 关键词热度雷达图
    • 高价值散点图
    • 成交结构树图
    • 高端结构图

此外支持:

  • 通过导航栏下拉菜单切换分析维度
  • 通过页面顶部下拉切换分析维度
  • 图表 PNG 导出
  • 图表筛选联动

4.6 可视化大屏模块

可视化大屏面向综合展示,适用于课堂演示、答辩和展示场景。

大屏主要图表包括:

  • 生态分组供给规模
  • 品牌热度 / GMV
  • 城市供给分布
  • 服务标签覆盖
  • 价格带对比
  • 高端结构
  • 商家 GMV 排名
  • 商家集中度
  • 关键词热度
  • 品牌品类热力矩阵
  • GMV 结构树图
  • 三维机会散点图
  • 机会评分图

并支持:

  • 条件筛选联动
  • PNG 截图导出

4.7 管理员后台模块

后台管理页面主要面向管理员使用,支持:

  • 系统用户统计
  • 管理员数量统计
  • 活跃用户统计
  • 硬件样本数量统计
  • 收藏与分组统计
  • 用户角色调整
    • 普通用户
    • 管理员
  • 用户启用 / 停用
  • 用户列表导出 Excel

管理员控制中还额外加入了安全约束:

  • 当前登录管理员不能取消自己的管理员角色
  • 当前登录管理员不能停用自己
  • 系统至少保留一名启用状态的管理员

4.8 媒体代理模块

由于 1688 商品图片外链存在防盗链和跨域限制,系统提供了图片代理层:

  • 浏览器不直接请求外部图片
  • 统一通过 /media/image 访问
  • 后端远程抓取图片后返回
  • 抓取失败时返回占位图
  • 增加缓存控制头

4.9 数据导出模块

系统支持三类 Excel 导出:

  • 硬件数据导出
  • 收藏数据导出
  • 用户数据导出

导出格式为 .xlsx,由 openpyxl 动态生成。


5. 核心技术实现

5.1 FastAPI 框架

FastAPI 是本系统的核心后端框架,主要承担以下职责:

  • 页面路由与接口路由定义
  • 表单参数接收
  • Query 参数接收
  • Session 中间件接入
  • 响应对象构建
  • 启动阶段数据库初始化与数据导入

应用启动入口位于:

  • main.py
  • app/main.py

5.2 SQLAlchemy ORM

SQLAlchemy 用于实现对象到数据库表的映射,主要优点:

  • 避免手写大量 SQL
  • 支持关系模型定义
  • 支持聚合查询、分页查询、分组查询
  • 与 FastAPI 依赖注入配合方便

数据库连接与会话管理位于:

  • app/database.py

5.3 Jinja2 服务端模板渲染

系统采用服务端渲染模式,主要特点:

  • 页面首屏加载快
  • 业务页面适合表单式系统开发
  • 与 FastAPI 结合简单直接
  • 模板可直接读取后端聚合数据

模板封装位于:

  • app/templating.py

其中还扩展了:

  • image_proxy_url:图片代理 URL 生成
  • asset_url:带版本号的静态资源 URL,解决浏览器缓存问题
  • urlencode:查询参数编码

5.4 Session 登录态管理

系统使用 Starlette 的 SessionMiddleware 进行登录态管理:

  • 登录成功后写入 request.session["user_id"]
  • 后续请求通过 get_current_user 自动恢复用户对象
  • 退出登录时清空 Session

优点:

  • 实现简单
  • 适合中小型管理系统
  • 与 Jinja2 SSR 页面模型天然匹配

5.5 密码安全实现

密码处理位于 app/security.py,采用:

  • PBKDF2 + SHA256
  • 120000 次迭代
  • 随机盐值
  • hmac.compare_digest 安全比较

这比明文保存密码或简单散列更安全,满足基础管理系统的安全要求。

5.6 自动数据库初始化与升级

app/database.py 中实现了数据库自动初始化逻辑:

  1. 自动检测数据库是否存在
  2. 若不存在则自动创建 design_114_pc
  3. 基于 ORM 自动建表
  4. 自动执行轻量级表结构升级

当前升级逻辑包括:

  • 自动补充 users.role
  • 自动补充 users.is_active
  • 自动补充 favorites.group_id
  • 自动补充 favorites.note

该机制避免了项目在迭代开发时因表结构差异导致无法启动。

5.7 Excel 导出技术

Excel 导出位于 app/services/exporters.py,使用 openpyxl 实现:

  • 创建工作簿与工作表
  • 动态写入表头和数据行
  • 表头样式美化
  • 自动列宽
  • 冻结首行
  • 写入文档属性

该方案适合导出中小规模分析结果和后台统计数据。

5.8 图片代理技术

图片代理位于:

  • app/routers/media.py
  • app/services/media.py

设计目的:

  • 解决外链图片加载失败
  • 避免浏览器直接请求 1688 图片资源
  • 提升展示稳定性

5.9 ECharts 图表技术

系统全部核心图表基于 ECharts 5 实现,主要使用图表类型包括:

  • 柱状图
  • 折线图
  • 饼图
  • 玫瑰图
  • 热力图
  • 树图
  • 漏斗图
  • 雷达图
  • 散点图

前端图表脚本主要位于:

  • app/static/js/analytics.js

5.10 Bootstrap 前端框架

Bootstrap 主要用于:

  • 响应式栅格布局
  • 下拉菜单
  • 表单控件
  • 按钮样式
  • 导航结构
  • 常见 UI 组件基础能力

项目在 Bootstrap 基础上叠加了大量自定义 CSS,形成了统一的深色硬件可视化视觉风格。


6. 数据模型设计

6.1 用户表 users

字段 类型 说明
id Integer 主键
username String(64) 用户名,唯一
email String(255) 邮箱,唯一,可空
display_name String(64) 显示名称
password_hash String(255) 密码哈希
role String(20) 角色:admin / user
is_active Boolean 是否启用
bio Text 个人简介
created_at DateTime 创建时间
updated_at DateTime 更新时间

6.2 硬件数据表 hardware_items

字段 类型 说明
id Integer 主键
offer_id String(64) 1688 商品唯一标识
search_keyword String(120) 原始搜索关键词
category_group String(64) 派生生态分组
product_title String(500) 商品标题
brand String(120) 品牌识别结果
price_text String(64) 原始价格文本
price_value Float 数值化价格
price_bucket String(32) 价格带
sales_text String(64) 原始销量文本
sales_value Integer 数值化销量
has_sales Boolean 是否存在销量数据
company_name String(255) 商家名称
company_city String(64) 商家城市
service_tags String(255) 服务标签
service_score Integer 服务标签数量
product_image Text 商品图片地址
detail_url Text 商品详情页地址
estimated_gmv Float 估算 GMV
is_high_end Boolean 高端硬件标记
is_outlier Boolean 异常值标记
created_at DateTime 创建时间
updated_at DateTime 更新时间

6.3 收藏表 favorites

字段 类型 说明
id Integer 主键
user_id Integer 用户外键
hardware_id Integer 硬件外键
group_id Integer 分组外键,可空
note Text 收藏备注
created_at DateTime 收藏时间

约束:

  • (user_id, hardware_id) 唯一,防止重复收藏

6.4 收藏分组表 favorite_groups

字段 类型 说明
id Integer 主键
user_id Integer 用户外键
name String(64) 分组名称
description Text 分组说明
created_at DateTime 创建时间
updated_at DateTime 更新时间

约束:

  • (user_id, name) 唯一,防止同一用户下分组重名

7. 数据处理与分析设计

7.1 数据导入流程

CSV 导入流程如下:

text 复制代码
读取 CSV
  → 行级遍历
  → 价格解析
  → 销量解析
  → 分类映射
  → 品牌识别
  → 服务标签清洗
  → 城市提取
  → 高端标记
  → 异常值标记
  → 估算 GMV
  → offer_id 去重
  → 批量写入 MySQL

7.2 清洗与派生字段

导入阶段自动生成的关键业务字段如下:

  • price_value:价格文本转数值
  • sales_value:销量文本转数值
  • category_group:按关键词映射到硬件生态类别
  • brand:按标题和关键词识别品牌
  • price_bucket:价格带分层
  • company_city:从商家名称中提取城市/地区
  • service_score:服务标签数量评分
  • estimated_gmv:价格 × 销量
  • is_high_end:高端样本识别
  • is_outlier:异常样本识别

7.3 分类映射规则

系统当前将数据划分为以下生态分组:

  • 处理器生态
  • 主板生态
  • 显卡生态
  • 存储生态
  • 内存生态
  • 机箱散热
  • 供电与网络
  • 显示与外设
  • 其他硬件

7.4 品牌识别规则

系统通过规则匹配方式识别常见品牌,包括但不限于:

  • AMD
  • Intel
  • NVIDIA
  • ASUS
  • MSI
  • Gigabyte
  • Kingston
  • Corsair
  • Samsung
  • WD
  • Seagate
  • DeepCool
  • TP-Link
  • Logitech
  • Dell
  • AOC

7.5 分析聚合能力

app/services/analytics.py 提供了核心聚合能力,包括:

  • 样本总量统计
  • 商家数量统计
  • 高端样本统计
  • 平均价格统计
  • 平均销量统计
  • 估算 GMV 统计
  • 城市供给分布统计
  • 价格带统计
  • 服务标签频次统计
  • 品牌热度统计
  • 商家 GMV 排名
  • 商家集中度统计
  • 品牌 × 品类热力矩阵
  • GMV 结构树图数据
  • 三维散点图数据
  • 机会评分排序
  • 自动洞察文本

7.6 机会评分模型

系统对生态类别计算机会评分,核心逻辑为:

text 复制代码
机会评分 = 平均价格 × log(1 + 平均销量) / 样本数

该评分本质上用于平衡:

  • 客单价水平
  • 销量热度
  • 样本稀疏程度

其目的不是做严格学术预测,而是做面向可视化系统的业务排序指标。


8. 路由与接口设计

8.1 页面路由

路径 说明
/ 首页
/health 健康检查
/auth/login 登录页
/auth/register 注册页
/profile 个人中心
/hardware 数据管理列表
/hardware/{id} 硬件详情页
/favorites 收藏页
/analytics 分析图表页
/screen 可视化大屏
/admin 管理后台

8.2 操作接口

路径 方法 说明
/auth/login POST 登录提交
/auth/register POST 注册提交
/auth/logout POST 退出登录
/profile POST 修改个人资料
/hardware/{id}/favorite POST 收藏 / 取消收藏
/hardware/reimport POST 管理员重导数据
/favorites/groups POST 创建收藏分组
/favorites/{favorite_id} POST 更新收藏备注与分组
/admin/users/{user_id}/role POST 修改用户角色
/admin/users/{user_id}/status POST 修改用户状态

8.3 数据接口

路径 方法 说明
/api/analytics/dashboard GET 返回图表聚合数据
/media/image GET 图片代理接口
/hardware/export.xlsx GET 导出硬件数据
/favorites/export.xlsx GET 导出收藏数据
/admin/export/users.xlsx GET 导出用户数据

9. 前端设计说明

9.1 前端模式

项目采用"服务端渲染 + 前端增强交互"的混合模式:

  • 页面框架由 Jinja2 服务端输出
  • 图表区域由 ECharts 在前端渲染
  • 筛选、图表切换、导出等交互由 JavaScript 增强

9.2 页面设计风格

整体风格为深色科技质感主题,强调:

  • 硬件市场数据感
  • 大屏展示感
  • 控制台式布局
  • 高对比度信息表达

9.3 前端脚本职责划分

app/static/js/ui.js

负责:

  • 卡片悬浮交互
  • 首页播报轮播逻辑
app/static/js/analytics.js

负责:

  • 分析图表页加载与渲染
  • 可视化大屏图表渲染
  • 图表筛选联动
  • 图表主题切换
  • 图表导出 PNG

9.4 本地静态资源策略

为解决外部资源不可达引发的样式和图表失效问题,项目采用:

  • 本地 Bootstrap CSS/JS
  • 本地 ECharts JS
  • 静态资源版本号参数防缓存

这保证了项目在内网、离线或受限网络环境下仍能正常运行。


10. 安全与权限设计

10.1 身份认证

系统采用基于 Session 的身份认证:

  • 登录后将用户 ID 存入 Session
  • 每次请求从 Session 恢复当前用户

10.2 角色权限

当前角色分为:

  • admin
  • user

权限划分如下:

功能 普通用户 管理员
浏览首页
查看图表和大屏
登录 / 注册
个人中心
收藏与分组
导出硬件数据
数据重导 ×
管理后台 ×
用户角色管理 ×
用户状态管理 ×
用户导出 ×

10.3 管理员保护机制

为防止后台误操作导致系统失控,系统加入了以下防护:

  • 禁止当前管理员把自己降为普通用户
  • 禁止当前管理员停用自己
  • 系统至少保留一名启用状态的管理员

11. 部署与运行说明

11.1 环境准备

  1. 安装 Python 3.x
  2. 安装 MySQL
  3. 创建数据库账号

默认连接配置:

text 复制代码
数据库:design_114_pc
地址:localhost
端口:3306
账号:root
密码:123456

11.2 安装依赖

powershell 复制代码
pip install -r requirements.txt

11.3 启动方式

推荐:

powershell 复制代码
python main.py

或者:

powershell 复制代码
uvicorn main:app

11.4 环境变量

系统支持以下环境变量:

环境变量 说明
APP_SECRET_KEY Session 密钥
DATABASE_URL 数据库连接地址
IMPORT_BATCH_SIZE 数据导入批大小
APP_HOST 服务主机
APP_PORT 服务端口
APP_RELOAD 是否开启热重载

11.5 访问地址

text 复制代码
http://127.0.0.1:8000

12. 项目技术亮点

12.1 数据驱动能力完整

项目不是简单的页面展示系统,而是完整实现了:

  • 原始 CSV 数据导入
  • 规则清洗
  • 特征派生
  • 多维统计分析
  • 图表展示
  • 管理与交互闭环

12.2 管理型与分析型能力融合

系统同时具备:

  • 用户体系
  • 收藏体系
  • 后台权限
  • 可视化分析
  • 大屏展示
  • Excel 导出

这使项目不仅适合课程设计,也适合毕设或演示型系统交付。

12.3 前后端耦合适中

采用 FastAPI + Jinja2 + ECharts 的组合,相比前后端完全分离方案:

  • 上手更快
  • 结构清晰
  • 维护成本低
  • 更适合课程型项目

12.4 外链图片和 CDN 风险处理到位

系统通过:

  • 图片代理
  • 本地静态资源
  • 静态资源版本号防缓存

有效解决了外部依赖导致的页面资源失效问题。


13. 后续可扩展方向

虽然项目已完成当前目标,但仍可继续扩展:

  1. 引入真正的数据库迁移工具

    • 如 Alembic
  2. 完善管理员后台

    • 操作日志
    • 用户搜索
    • 批量管理
  3. 引入更复杂的数据分析模型

    • 聚类分析
    • 价格预测
    • 品牌竞争度分析
  4. 增加文件上传能力

    • 管理员上传新的 CSV 数据源
  5. 增加报表模块

    • PDF 导出
    • 周报/月报自动生成
  6. 增强权限体系

    • 多角色
    • 细粒度菜单权限

14. 总结

本项目基于 Python + FastAPI + MySQL + Bootstrap + ECharts 完成了一套结构完整、功能闭环清晰的 1688 电脑硬件数据可视化分析系统。

系统从原始 CSV 数据出发,打通了:

  • 数据接入
  • 数据清洗
  • 业务建模
  • 图表分析
  • 大屏展示
  • 用户交互
  • 后台管理
  • 数据导出

从工程实现角度看,项目具备较强的完整性,既体现了 Web 系统开发能力,也体现了数据处理与可视化分析能力,适合作为课程设计、毕业设计、项目答辩或作品展示的技术成果。

相关推荐
DXM05213 小时前
第2期:0配置!10分钟搭建ArcGIS Python开发环境(无需装VS)
开发语言·人工智能·python·arcgis·arcgis自动化
时空系3 小时前
第2篇:数据与数据类型——存储信息的小盒子 Rust中文编程
开发语言·后端·rust
是宇写的啊4 小时前
MyBatis-Plus
java·开发语言·mybatis
一直会游泳的小猫4 小时前
uv - 极速 Python 包管理器
python·工具·uv·包管理
时空系4 小时前
第4篇:如果...那么——让程序做选择 Rust中文编程
开发语言·网络·rust
Zhencode4 小时前
Python创建MCP服务
python·mcp
eLIN TECE4 小时前
Golang 构建学习
开发语言·学习·golang
m0_624578594 小时前
JavaScript 中高精度小数(20位以上)的正确处理方法
jvm·数据库·python
HoneyMoose4 小时前
Discourse 近期更新后附件名中的下划线转义
开发语言