基于大数据的糖尿病数据分析可视化

基于大数据的糖尿病数据分析可视化

1. 项目概述

本项目是一个基于大数据技术的糖尿病数据分析与可视化系统,旨在通过机器学习算法对糖尿病健康指标进行分析、预测,并提供直观的可视化展示。系统采用前后端分离架构,后端基于 Django 和 Django Rest Framework 构建,前端基于 Vue 3、TypeScript 和 Element Plus 开发。


2. 数据集 (Dataset)

系统主要使用 BRFSS 2015 (Behavioral Risk Factor Surveillance System) 数据集,包含以下三个主要数据表,用于模型训练和数据分析:

  1. Diabetes012HealthIndicatorsBRFSS2015: 包含糖尿病的三种状态(0: 无糖尿病, 1: 前期糖尿病, 2: 糖尿病)及相关健康指标。
  2. DiabetesBinaryHealthIndicatorsBRFSS2015: 二分类数据集(0: 无糖尿病, 1: 糖尿病),用于主要的风险预测模型训练。
  3. DiabetesBinary5050SplitHealthIndicatorsBRFSS2015: 经过 50/50 平衡处理的二分类数据集。

数据集特征分析

以下图表展示了数据集的特征相关性和分布情况:

  • 特征相关性热力图 : 展示各特征之间的相关系数,帮助筛选对预测结果影响较大的特征。

    图注:颜色越深代表相关性越强,用于特征选择参考。

  • 关键特征与糖尿病的关系 : 分析高血压、BMI 等关键指标与糖尿病确诊率的关系。

  • 类别特征分析 :

  • 糖尿病分布情况 :


3. 算法与模型 (Algorithm & Model)

3.1 核心算法:随机森林 (Random Forest)

系统采用 随机森林分类器 (RandomForestClassifier) 作为核心预测算法。随机森林是一种集成学习方法,通过构建多个决策树并取其投票结果(分类问题)来提高预测准确率和防止过拟合。

3.2 模型训练流程

核心代码位于 System/Backend/App/services/model_service.py:

  1. 数据加载 : 从数据库 DiabetesBinaryHealthIndicatorsBRFSS2015 表中读取数据。

  2. 数据预处理 :

    • 去除无关列(如 id)。
    • 确保所有特征为数值类型。
    • 处理缺失值(填充 0)。
  3. 数据集划分 : 使用 train_test_split 将数据划分为训练集 (80%) 和测试集 (20%)。

  4. 模型构建 :

    python 复制代码
    clf = RandomForestClassifier(n_estimators=100, random_state=42)
    clf.fit(X_train, y_train)
  5. 模型评估: 使用准确率 (Accuracy) 和分类报告 (Classification Report) 评估模型表现。

  6. 模型保存 : 使用 joblib 将训练好的模型保存为 media/diabetes_model.pkl。

3.3 模型评估结果

  • 混淆矩阵 : 展示模型在测试集上的预测结果(真阳性、假阳性、真阴性、假阴性)。

    图注:对比随机森林与逻辑回归的表现,随机森林通常具有更高的准确率。

  • 特征重要性 : 展示模型认为最重要的特征(如 BMI, Age, Glucose 等)。

  • ROC 曲线对比 :


4. 数据库设计 (Database Design)

数据库采用 SQLite (开发环境) 或 MySQL (生产环境),通过 Django ORM 管理。

4.1 核心数据表结构

1. 用户信息表 (Profile)
字段名 类型 长度 非空 唯一 默认值 说明
id Integer - 是 是 Auto 主键
username CharField 255 否 是 '' 用户名
password CharField 255 否 否 '' 密码
name CharField 255 否 否 '' 姓名
role_id ForeignKey - 否 否 1 关联 Role 表
2. 糖尿病二分类指标表 (DiabetesBinaryHealthIndicatorsBRFSS2015)

用于模型训练的主要数据表。

字段名 类型 长度 非空 索引 (db_index) 说明
Diabetes_binary CharField 255 否 True 糖尿病状态 (0/1)
HighBP CharField 255 否 True 高血压
HighChol CharField 255 否 True 高胆固醇
BMI CharField 255 否 True 身体质量指数
Sex CharField 255 否 True 性别
Age CharField 255 否 True 年龄
Income CharField 255 否 True 收入
GenHlth CharField 255 否 True 总体健康状况
... ... ... ... ... (共 22 个字段)
3. 患者信息表 (Patient)
字段名 类型 长度 非空 说明
name CharField 255 否 姓名
id_card_hash CharField 255 否 身份证号(Hash脱敏)
gender CharField 10 否 性别
age Integer - 否 年龄
4. 就诊记录表 (VisitRecord)
字段名 类型 长度 非空 说明
patient_id ForeignKey - 是 关联 Patient 表
visit_date DateTime - 是 就诊时间
diagnosis TextField - 否 诊断结果
5. 分析报告表 (AnalysisReport)
字段名 类型 长度 非空 说明
patient_id ForeignKey - 是 关联 Patient 表
report_type CharField 255 是 报告类型
content JSONField - 否 结构化报告数据

5. 系统架构 (System Architecture)

Django+Vue

6. 界面与功能详解 (Features & Interfaces)

6.1 登录与注册

用户通过账号密码登录系统,支持新用户注册。

6.2 后台主页

展示系统概览,包括快捷入口和系统状态。

6.3 数据管理

管理员可以对糖尿病数据集进行增删改查操作,支持批量导入导出。

  • 二分类数据管理 :

  • 三分类数据集管理 :

  • 数据导入导出 :

6.4 患者与医疗管理

  • 患者信息管理 : 录入和维护患者基本信息。

  • 就诊记录 : 记录患者的就诊历史、诊断结果和医嘱。

  • 检测结果 : 记录实验室检查项目及结果(如血糖、HbA1c)。

6.5 风险预测 (核心功能)

基于训练好的随机森林模型,用户输入健康指标(如 BMI、血压、年龄等),系统实时计算患糖尿病的风险概率。

  • 信息填写 :

  • 结果查看 :

6.6 数据分析与可视化

利用 ECharts 对数据库中的海量健康数据进行多维度可视化分析,生成图表。

  • 分析可视化 :

  • 分析报告 : 生成并查看详细的数据分析报告。

6.7 智能问答

集成 OpenAI 接口,提供关于糖尿病健康知识的智能问答服务。

6.8 个人中心与用户管理

  • 个人中心 : 用户修改个人信息、密码等。

  • 用户管理 : 管理员管理系统用户及权限。


7. 技术实现详解 (Technical Implementation)

7.1 前端性能优化:异步组件加载

为了解决页面跳转卡顿和白屏问题,系统采用了 Vue 3 的 defineAsyncComponent 结合自定义加载策略。

核心代码 (src/router/route.ts):

typescript 复制代码
const loadComponent = (loader: any) => defineAsyncComponent({
  loader,
  loadingComponent: AsyncLoading, // 自定义 Loading 组件
  delay: 0, // 立即显示 Loading,消除点击后的等待感
  timeout: 30000
});

原理 :

将路由组件的加载设为异步,并将 delay 设置为 0。这意味着一旦用户点击菜单,系统立即渲染 loadingComponent,而不是等待网络请求或 JS 解析完成。这消除了用户点击后"没反应"的糟糕体验。

7.2 动态路由与权限控制

系统根据用户角色动态生成路由表。在 src/router/controlroutes.ts 中,通过递归遍历后端返回的菜单树,将其转换为 Vue Router 路由配置。

核心代码:

typescript 复制代码
if (item.component) {
  // 动态导入组件
  item.component = defineAsyncComponent({
    loader: modules[item.component], // 从 import.meta.glob 获取
    loadingComponent: AsyncLoading,
    delay: 0
  });
}

7.3 后端数据查询优化

针对千万级/百万级数据表,我们在 models.py 中为常用查询字段(如 Diabetes_binary, HighBP, BMI 等)添加了 db_index=True 索引,显著提升了过滤和排序的查询速度。

python 复制代码
class DiabetesBinaryHealthIndicatorsBRFSS2015(models.Model):
    Diabetes_binary = models.CharField(..., db_index=True)
    HighBP = models.CharField(..., db_index=True)
    # ...

7.4 机器学习模型服务

封装 ModelService 类,实现模型的单例加载(避免每次请求重新加载模型文件)和预测逻辑。使用 joblib 进行序列化存储,确保模型加载速度和预测一致性。


8. 总结

本项目成功构建了一个集数据管理、机器学习预测、可视化分析于一体的糖尿病健康管理平台。通过前后端分离架构和多种优化手段,保证了系统在大数据量下的稳定性和流畅性。

相关推荐
小羊没烦恼!5 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
一隅论数智5 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
尧炎科技5 天前
防潮抗变形,就选纯品梅花全桉多层板
大数据
Asa121385 天前
R语言实现多组学因子分析(MOFA)
数据分析
程序员大阳5 天前
副队长大数据教程(5)--集群情况下虚拟机网络配置
大数据·集群·nat·网路
自由能燃气设备5 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远5 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
嘉立创FPC苗工5 天前
FPC与机器人的双向赋能,解锁智能装备进化新势能
大数据·人工智能·制造·fpc·电路板
AI职业加油站5 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
龙亘川5 天前
一网统管AI平台民生业务实践:基于城市数字底座赋能公积金业务服务升级
大数据·安全·智慧城市·开源软件·数据可视化·政务