152-基于Python的手机业务使用信息数据可视化分析系统

基于 Python 的手机业务使用信息数据可视化分析系统

用数据驱动决策,让运营商看见每一位用户背后的故事。


写在前面

手机用户每天产生海量行为数据------通话时长、流量消耗、缴费习惯、入网时间......这些数据散落在运营商的系统中,很少有人能从中提炼出真正有价值的洞察。

本项目正是为了解决这个问题:将原始的手机业务数据转化为直观的可视化分析,并用机器学习预测潜在合约用户,帮助运营商做出更精准的业务决策。


一、项目背景与意义

1.1 为什么要做这个系统?

在通信行业,运营商面临的核心痛点包括:

  • 用户流失预警难:无法提前识别有流失风险的用户
  • 合约用户识别粗放:传统的用户分层方式依赖人工经验,缺乏数据支撑
  • 数据孤岛:通话、流量、缴费等数据分散在不同系统,难以综合分析
  • 决策依赖直觉:业务决策缺乏量化分析工具的支持

1.2 项目目标

本系统以"数据概览 → 多维度分析 → 统计检验 → 机器学习预测"为主线,实现:

  1. 对 10,000 条手机用户数据进行全景式可视化分析
  2. 从业务类型、通话时长、流量使用、缴费行为、用户价值、入网时长等 6 个维度进行交叉分析
  3. 运用统计检验方法验证数据假设
  4. 使用 6 种机器学习算法预测用户是否属于"潜在合约用户"
  5. 支持异常检测和聚类分析,发现隐藏的用户群体

二、技术架构

2.1 整体架构

复制代码
┌─────────────────────────────────────────────────────┐
│                    前端 (Vue 3)                      │
│  Element Plus + ECharts + TypeScript + Pinia        │
│              ↓ HTTP / JSON                           │
├─────────────────────────────────────────────────────┤
│                  后端 (Django)                       │
│  DRF + PyJWT + PyMySQL (Raw SQL)                    │
│              ↓ Raw SQL Queries                       │
├─────────────────────────────────────────────────────┤
│                  MySQL 数据库                         │
│           design_152_carrier                          │
│              ↓ CSV Import                            │
├─────────────────────────────────────────────────────┤
│              核心分析模块 (shared/)                   │
│  Pandas + Scikit-learn + XGBoost + SciPy            │
│  7 个纯 Python 分析模块,框架无关                      │
└─────────────────────────────────────────────────────┘

2.2 技术选型

层级 技术 选型理由
前端框架 Vue 3 + TypeScript 响应式数据绑定,类型安全
UI 组件库 Element Plus 企业级组件丰富,文档完善
图表库 ECharts 图表类型丰富,交互性强,适合大数据量可视化
状态管理 Pinia Vue 3 官方推荐,轻量简洁
后端框架 Django 4.2 成熟稳定,生态完善
数据库 MySQL 8.0 关系型数据库,适合结构化数据存储
数据访问 PyMySQL (Raw SQL) 不使用 ORM,直接 SQL 控制性能
认证 JWT (PyJWT) 无状态认证,适合前后端分离
密码加密 bcrypt 业界标准,安全可靠
ML 框架 scikit-learn + XGBoost + PyTorch TabNet 覆盖传统 ML 到深度学习
数据处理 Pandas + NumPy 数据清洗、转换、分析
统计检验 SciPy t 检验、ANOVA、正态性检验
报告生成 openpyxl + weasyprint Excel 和 PDF 双格式导出

2.3 核心设计理念

配置驱动(Config-Driven) :整个系统的功能开关、数据字段、分析页面、算法列表均由 config.yaml 一个配置文件控制。修改配置文件即可增减功能,无需改动代码。

核心模块与 Web 层分离(shared/ 不变原则) :7 个核心分析模块位于 shared/ 目录,纯 Python/Pandas 实现,与 Web 框架完全解耦。Web 层只做路由转发和模板渲染,所有业务逻辑在核心模块中完成。

数据转换层:核心模块的返回格式与前端期望格式不同,路由层充当转换器,将共享模块的输出适配为前端可消费的格式。


三、数据集介绍

3.1 数据概况

系统使用的数据集包含 10,000 条手机用户记录 ,共 13 个字段

字段 类型 说明 取值范围
用户标识 numeric 用户唯一 ID(排除在模型外) 60000-69999
业务类型 categorical 用户使用的网络制式 2G / 3G / 4G
主叫时长(分) numeric 用户主动拨打电话时长 19-178 分钟
被叫时长(分) numeric 用户接听电话时长 28-179 分钟
免费流量 numeric 套餐内免费流量(MB) 356-438
计费流量 numeric 超额后计费流量(MB) 0-255
月均上网时长(分) numeric 每月平均上网时长 28-211 分钟
入网时长(天) numeric 在该运营商入网天数 57-331 天
最近一次缴费金额(元) numeric 最近一次充值金额 0-143 元
总缴费金额(元) numeric 累计充值总金额 132-876 元
缴费次数 numeric 累计充值次数 0-21 次
余额 numeric 当前账户余额 0-152 元
是否潜在合约用户 binary 预测目标(0/1) 50.03% 为正样本

3.2 数据导入

系统启动时自动检测 dataset_data 表是否为空,若为空则从 data/data_carrier.csv 自动导入。导入过程支持 UTF-8 / GBK 双编码自动检测,采用 500 条/批的 executemany 批量插入,确保大数据量下的导入效率。


四、功能模块详解

4.1 数据概览(Overview)

系统首页提供数据全景视图,帮助用户快速了解数据集的整体特征:

  • 统计卡片:总记录数、特征数量、潜在合约用户数及占比
  • 目标变量分布饼图:直观展示正负样本比例
  • 数值特征均值水平条形图:一览各指标的平均水平
  • 特征详情表格:每个特征的计数、均值、标准差、最小值、最大值

4.2 多维度交叉分析(6 个分析页面)

这是系统的核心分析能力,每个页面至少包含 2 个交叉维度图表:

业务类型分析
  • 2G / 3G / 4G 用户分布饼图
  • 各业务类型的合约用户转化率对比
  • 业务类型 × 平均缴费金额 / 平均通话时长分组柱状图
通话时长分析
  • 主叫 / 被叫时长分布直方图
  • 按是否潜在合约用户分组的箱线图
  • 主叫 × 被叫时长散点图(按目标着色,揭示通话行为与合约倾向的关系)
流量使用分析
  • 免费流量 / 计费流量 / 月均上网时长分布
  • 计费流量采用自定义分箱(0-10, 10-50, 50-100, 100-150, 150+),避免长尾分布导致的图表不可读
  • 免费 × 计费流量散点图 + 按业务类型分组的流量对比
缴费行为分析
  • 最近一次缴费 / 总缴费 / 缴费次数分布
  • 总缴费金额箱线图(按目标分组)
  • 总缴费 × 缴费次数散点图
用户价值画像
  • 各特征与目标变量的相关性排名(水平条形图)
  • 总缴费金额 / 入网时长箱线图
  • 总缴费 × 入网时长散点图
入网时长分析
  • 入网时长分布直方图
  • 入网时长箱线图(按目标分组)
  • 入网时长 × 总缴费散点图

4.3 统计检验(Statistical Analysis)

提供三种统计检验方法:

  • 描述性统计:计数、均值、标准差、最小值、下四分位、中位数、上四分位、最大值、偏度、峰度
  • 正态性检验:Shapiro-Wilk 检验,判断各数值列是否符合正态分布
  • 独立样本 t 检验:按是否潜在合约用户分组,检验各特征在两组间是否存在显著差异

4.4 异常检测(Anomaly Detection)

采用三种方法进行异常值检测:

  • IQR 法:基于四分位距识别超出 1.5×IQR 范围的异常值
  • Z-Score 法:基于标准差的 3σ 准则
  • Isolation Forest:基于孤立森林算法的 multivariate 异常检测

三种方法的检测结果综合展示,帮助识别异常用户行为模式。

4.5 聚类分析(Clustering)

  • 最优 K 值搜索:同时展示肘部法(Inertia)和轮廓系数(Silhouette Score),辅助选择最佳聚类数
  • K-Means 聚类:对用户进行分群,输出每个群体的特征画像
  • 聚类散点图:二维可视化不同群体的分布
  • 用户画像表:每个聚类的样本数、占比、各特征均值

4.6 预测分析(Prediction)

这是系统最具价值的模块,集成 6 种机器学习算法:

算法 类型 特点
XGBoost 集成学习 梯度提升树,通常表现最佳
随机森林 集成学习 抗过拟合,特征重要性可解释
梯度提升 集成学习 逐棵优化,精度高
逻辑回归 线性模型 可解释性强,速度快
SVM 核方法 适合高维空间分类
TabNet 深度学习 可解释的神经网络,可选

训练流程

复制代码
CSV 数据 → LabelEncoder 编码 → StandardScaler 标准化
    → train_test_split(0.2, stratified)
    → GridSearchCV(cv=5, scoring=f1) 自动调参
    → joblib 序列化保存到 model/ 目录

预测输出

  • 预测结果(是/否潜在合约用户)
  • 预测概率 + 风险等级(高/中/低)
  • 特征重要性排序(哪些因素最影响预测结果)
  • 预测历史记录

系统会在首次预测请求时自动训练所有模型(_ensure_trained() 检查模型文件是否存在),后续请求直接加载已训练的模型,响应迅速。

4.7 数据管理(Data Management)

管理员专用模块:

  • 数据浏览:分页展示所有用户记录,支持搜索过滤
  • CRUD 操作:新增、编辑、删除单条记录
  • CSV 批量导入:一键导入 CSV 文件,自动处理编码
  • 所有列表查询采用 SQL 层 JOIN / WHERE IN 批量查询,杜绝 N+1 查询问题

4.8 用户管理(User Management)

  • 用户列表 + 搜索
  • 角色切换(user / admin)
  • 账户状态管理(启用 / 禁用)
  • 密码重置
  • 仅 admin 角色可见

4.9 报告导出(Report Export)

  • 支持 ExcelPDF 双格式
  • 报告包含:数据概览、描述性统计、相关性矩阵、数据样本
  • 一键生成,自动下载

4.10 管理控制台(Dashboard)

  • 今日登录用户数(基于 last_login_at 统计)
  • 7 日活跃用户数
  • 系统总用户数
  • 数据总记录数

五、技术亮点

5.1 配置驱动的全栈系统

整个系统的数据字段、分析页面、算法列表、功能开关均由 config.yaml 驱动。数据库表结构根据配置文件自动生成,前端路由和分析页面也根据配置动态加载。这意味着:

  • 更换数据集只需修改 config.yaml 中的字段定义
  • 启用/禁用功能只需改一个布尔值
  • 添加新的分析维度只需在配置中声明

5.2 核心模块的框架无关设计

shared/ 目录下的 7 个核心模块(analysis_corepredictor_corestats_coreregression_coreanomaly_coreclustering_corereport_core)完全不依赖任何 Web 框架,纯 Python/Pandas/SciPy 实现,返回标准的 dict/list 结构。这意味着:

  • 核心分析逻辑可以在任何 Python 环境中复用
  • Web 层的改造不影响核心算法
  • 便于单元测试和独立验证

5.3 六种算法的统一预测接口

系统封装了 6 种差异巨大的机器学习算法(XGBoost、随机森林、梯度提升、逻辑回归、SVM、TabNet),对外暴露统一的 predict(input_data, algorithm) 接口。每种算法都经过 GridSearchCV 超参数搜索(5 折交叉验证,F1 评分优化),并自动选择最佳参数。

5.4 数据转换层的严谨设计

核心模块的返回格式与前端期望格式往往不一致(例如聚类返回的 profile 是列表而非对象,回归返回的键名是 f_p_value 而非 f_pvalue)。系统在路由层建立了一个严谨的数据转换层 ,将核心模块的输出精确适配为前端期望的格式,所有转换规则记录在 docs/plan.mddocs/api.md 中。

5.5 长尾分布的自适应处理

计费流量等字段存在明显的长尾分布(大量 0 值,少量高值),系统在路由层检测长尾特征(p95/p50 > 3),自动切换为自定义分箱策略,确保直方图可读。所有散点图在传递给前端前都经过 1st/99th 百分位过滤,去除极端异常值的干扰。

5.6 15 条宪法条款的严格约束

项目建立了一套"宪法"(Constitution),包含 15 条开发规范,覆盖:

  1. 核心模块不变
  2. 禁止蓝紫渐变配色
  3. 禁止 N+1 查询
  4. 代码复用(3 处以上相似代码必须重构)
  5. CSS 设计系统
  6. 数据转换规范
  7. 中文标签
  8. 主题色一致性
  9. 图标可用性
  10. ECharts 规范
  11. 角色固定
  12. 文件所有权
  13. Vue CSS 变量
  14. 端口同步
  15. 跨栈适用

每条规范都有明确的 PASS/FAIL 验收标准。


六、前端设计

6.1 侧边栏布局

采用专业的侧边栏导航布局,240px 展开 / 64px 折叠:

复制代码
首页
├── 数据分析 ▼(7 个分析页面)
├── 高级分析 ▼(统计检验、回归分析、异常检测、聚类分析、相关性分析)
├── 数据管理
├── 预测分析
├── 报告导出
└── 管理员 ▼(仅 admin 可见)
    └── 用户管理

6.2 通信科技蓝主题

#1565C0(深蓝色)为主色调,同色系渐变从 #0D47A1(最深)到 #BBDEFB(最浅),符合通信行业的专业调性。所有卡片、按钮、阴影、焦点环均使用统一的 CSS 变量系统。

6.3 ECharts 可视化规范

  • 每个页面顶部定义 chartColors 数组,所有图表统一配色
  • grid.top >= 10%,避免 Y 轴标签被裁剪
  • 所有图表实例注册 ResizeObserver,在 onUnmounted 中清理
  • 箱线图数据格式为 [min, q1, median, q3, max] 五值数组
  • 散点图数据经过异常值过滤后再渲染

七、项目统计

维度 数量
分析页面 10 个
API 端点 20+
前端页面 19 个 Vue 组件
核心分析模块 7 个
ML 算法 6 种
图表类型 10+ 种(饼图、柱状图、折线图、散点图、箱线图、热力图等)
数据库表 6 张
数据集记录 10,000 条
特征维度 12 个
开发文档 9 份

八、技术栈总览

类别 技术
后端 Django 4.2, PyJWT, PyMySQL, Pandas, NumPy
前端 Vue 3, TypeScript, Element Plus, ECharts, Pinia, Axios
机器学习 scikit-learn, XGBoost, PyTorch TabNet, SHAP
统计分析 SciPy (t-test, ANOVA, normality test)
数据可视化 ECharts (10+ 图表类型)
报告导出 openpyxl (Excel), weasyprint (PDF)
密码安全 bcrypt (passlib)
序列化 joblib (模型持久化)

九、总结

这个项目不仅仅是一个数据分析工具,更是一个完整的端到端数据科学平台。从数据导入、清洗、探索性分析、统计检验、机器学习建模到报告导出,覆盖了数据分析的全流程。

项目的设计哲学是**"配置驱动 + 核心模块不变"**------通过 config.yaml 控制一切可变参数,通过 shared/ 目录隔离核心算法,通过严格的数据转换层连接前后端。这种架构使得系统具有良好的可扩展性和可维护性,也为后续接入新的数据集或添加新的分析模块提供了清晰的路径。

如果你对数据可视化、机器学习应用或全栈开发感兴趣,这个项目是一个很好的参考案例。


项目地址:F:\code\152-基于Python的手机业务使用信息数据可视化分析系统