当前位置: 首页 > news >正文

基于 XGBoost 与 SHAP 的医疗自动化办公与可视化系统(下)

在这里插入图片描述

— 登录接口 —

@app.post(“/token”)
def login(form_data: OAuth2PasswordRequestForm = Depends()):
user = fake_users_db.get(form_data.username)
if not user or form_data.password != user[“password”]:
raise HTTPException(status_code=400, detail=“用户名或密码错误”)
access_token = create_access_token(data={“sub”: user[“username”]})
return {“access_token”: access_token, “token_type”: “bearer”}

— AI 预测接口 —

@app.post(“/predict”)
def predict(file: UploadFile = File(…), username: str = Depends(verify_token)):
try:
model = load(“ai_module/model.pkl”)
scaler = load(“ai_module/scaler.pkl”)
except Exception:
raise HTTPException(status_code=500, detail=“模型未训练,请先训练”)

df = pd.read_csv(io.BytesIO(file.file.read()))
if not set(["age", "blood_pressure", "glucose", "cholesterol"]).issubset(df.columns):raise HTTPException(status_code=400, detail="CSV 缺少必要列")features = df[["age", "blood_pressure", "glucose", "cholesterol"]]
df["risk_score"] = model.predict_proba(scaler.transform(features))[:, 1]
return df.to_dict(orient="records")

---### 🚀 启动命令:```bash
uvicorn api_server.app:app --reload

🔐 Token 流程测试(推荐用 Postman 或 curl):

  1. 获取 token:
curl -X POST http://localhost:8000/token -F 'username=admin' -F 'password=admin123'
  1. 带 Token 调用 /predict
curl -X POST http://localhost:8000/predict \-H "Authorization: Bearer YOUR_TOKEN_HERE" \-F "file=@yourfile.csv"

完整模块:💻 streamlit_app.py(企业级医疗门户 UI)


✅ 功能概览:

功能模块 描述
🔐 登录界面 简易用户名+密码验证(可扩展为 OAuth 或 LDAP)
📂 多文件上传 支持上传多个 CSV 并合并展示
🧠 风险预测 基于 XGBoost 模型计算 risk_score
📊 可视化 展示分布图、趋势图、SHAP 图
📄 PDF 报告 可点击按钮下载 AI 分析报告

在这里插入图片描述

✅ 安装依赖(如未安装):

pip install streamlit pandas plotly joblib matplotlib fpdf

💻 streamlit_app.py

# streamlit_app.pyimport streamlit as st
import pandas as pd
import plotly.express as px
from joblib import load
import matplotlib.pyplot as plt
from PIL import Image
import os
from report.generate_pdf import generate_pdf  # 调用你之前的 PDF 生成模块# 页面设置
st.set_page_config(page_title="医疗 AI 门户", layout="wide")
st.title("🏥 医疗 AI 辅助分析平台")# 登录模拟(可换成 OAuth、LDAP)
def login():st.sidebar.title("🔐 登录")username = st.sidebar.text_input("用户名")password = st.sidebar.text_input("密码", type="password")if st.sidebar.button("登录"):if username == "admin" and password == "admin123":st.session_state["authenticated"] = Trueelse:st.sidebar.error("用户名或密码错误")# 主体功能
def main_app():st.success("✅ 登录成功!欢迎使用医疗 AI 辅助系统")uploaded_files = st.file_uploader("📂 上传一份或多份 HIS 数据文件(CSV)", type="csv", accept_multiple_files=True)if uploaded_files:dfs = []for f in uploaded_files:df = pd.read_csv(f)df["source_file"] = f.namedfs.append(df)df = pd.concat(dfs, ignore_index=True)st.subheader("📝 数据预览")st.dataframe(df)# 模
http://www.dtcms.com/a/293654.html

相关文章:

  • 在React中,函数式组件和类组件各有优缺点
  • 射频信号(大宽高比)时频图目标检测anchors配置(下)
  • 分布式任务调度实战:XXL-JOB与Elastic-Job深度解析
  • ZKmall开源商城微服务架构实战:Java 商城系统的模块化拆分与通信之道
  • 【音视频学习】五、深入解析视频技术中的像素格式:颜色空间、位深度、存储布局
  • TR-FRET(时间分辨荧光能量共振转移)在药物研发中的热门应用简介
  • 【解决vmware ubuntu不小心删boot分区,进不去系统】
  • 在 Ubuntu 上将 Docker 降级到版本 25.0.5 (二) 降低版本,涉及兼容性问题
  • 在离线 Ubuntu 22.04机器上运行 ddkj_portainer-cn 镜像 其他相关操作也可以复刻 docker
  • centos 配置docker
  • java通过com进行pdf转换docx丢失
  • mongodb的备份和还原(精简)
  • LeetCode11~20题解
  • Visual Studio中部署PaddleOCRv5 (借助ncnn框架)
  • 如何Visual Studio 的配置从 Qt-Debug 切换到 x64-Debug
  • ESP32的ADF详解:5. Streams的API
  • 聊聊 Flutter 在 iOS 真机 Debug 运行出现 Timed out *** to update 的问题
  • GEMINUS 和 Move to Understand a 3D Scene
  • Redis的key过期策略
  • 4.3 激活函数的目的
  • LLM 幻觉一般是由于什么产生的,在模型什么部位产生
  • 计算机组成原理——数据的表示和运算2
  • 手机开启16k Page Size
  • J2EE模式---服务定位器模式
  • JavaEE Spring框架的概述与对比无框架下的优势
  • 关于原车一键启动升级手机控车的核心信息及注意事项
  • 第五章第一节 EXTI 外部中断
  • Adobe全系列下载 官方原版补丁
  • 【Spark征服之路-3.8-Spark-SQL核心编程(七)】
  • 2025獬豸杯WP