当前位置: 首页 > 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.lryc.cn/news/596833.html

相关文章:

  • 【计算机三级网络】——选择题高频考点(第一篇)
  • SQL基础⑧ | 表格篇
  • Python设计模式 - 桥接模式
  • 腾讯iOA:企业软件合规与安全的免费守护者
  • 炬森精密:缓冲滑轨的创新力量,重塑家居静音与安全新体验
  • LeetCode二叉树的公共祖先
  • 亚远景-传统功能安全VS AI安全:ISO 8800填补的标准空白与实施难点
  • 漏洞生命周期管理:从发现到防护的全流程方案
  • 基于Python(Django)+MongoDB实现的(Web)新闻采集和订阅系统
  • #C语言——学习攻略:操作符的探索(二)
  • ES6 标签模板:前端框架的灵活利器
  • mongodb的备份和还原(精简)
  • HarmonyOS Flutter Boost完全接入手册:爬完所有坑的实战指南
  • DeepSeek-R1大模型实战:AI编程助手如何提升开发效率
  • JVM、Dalvik、ART区别
  • 用Python实现卷积神经网络(一)
  • 电子电气架构 --- 汽车软件全生命周期
  • Java 堆(优先级队列)
  • 226.翻转二叉树
  • JAVA_EVLEN-面向对象高级二
  • 【C语言进阶】动态内存管理(2)
  • 新手向:Idea的使用技巧
  • 10. isaacsim4.2教程-RTX Lidar 传感器
  • AWS Lambda IoT数据处理异常深度分析:从告警到根因的完整排查之路
  • Vue3 面试题及详细答案120道(61-75 )
  • Python学习:函数的使用
  • webrtc整体架构
  • LeetCode热题100--205
  • Visual Studio中部署PaddleOCRv5 (借助ncnn框架)
  • Flink 状态管理设计详解:StateBackend、State、RocksDB和Namespace