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

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

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. 总结

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

相关推荐
阿里云大数据AI技术2 小时前
Celeborn 如何让 EMR Serverless Spark 的 Shuffle 舒心、放心、安心
大数据·spark
AI营销快线2 小时前
AI营销获客难?原圈科技深度解析SaaS系统增长之道
大数据·人工智能
星幻元宇VR3 小时前
VR环保学习机|科技助力绿色教育新模式
大数据·科技·学习·安全·vr·虚拟现实
CryptoPP3 小时前
开发者指南:构建实时期货黄金数据监控系统
大数据·数据结构·笔记·金融·区块链
城数派4 小时前
全国乡镇(街道)点位数据2025年(shp格式\excel格式)
arcgis·信息可视化·数据分析
ZGi.ai5 小时前
生产级 Agent 编排 从单一 LLM 调用到多智能体工作流的工程设计
大数据·数据库·人工智能
天远数科5 小时前
分布式系统实战:基于天远二手车估值API构建高可用车辆估值微服务
大数据·微服务·云原生·架构
码农小白AI6 小时前
AI审核加持的IACheck:塔吊与施工电梯安全监测系统检测报告如何实现高效合规与风险可控
大数据·人工智能·安全