跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Python 常用医疗 AI 库及案例解析

Python 在医疗 AI 领域已成为首选开发语言,涵盖数据处理、模型训练、大模型集成及系统部署。 2025 年主流 Python 库,包括 Polars、scikit-learn、PyTorch、LangChain、FastAPI 等,并提供三个实战案例:利用 MONAI 进行医学图像分割与 3D 处理;结合 Pandas、Polars 与 PyGWalker 探索电子病历数据;使用 RDKit 计算分子指纹与相似度以辅助药物发现。内容涉及数据预处理、模型构建、可视化及优化建议,适用于医疗 AI 开发者参考。

开源信徒发布于 2026/4/8更新于 2026/5/2320 浏览
Python 常用医疗 AI 库及案例解析

随着人工智能在医疗领域的持续深入发展,Python 已经成为医疗 AI 项目的首选开发语言。从数据处理、模型训练、大模型集成到系统部署与可视化,Python 社区在过去几年中涌现出大量功能强大且持续演进的开源工具。本指南整理了在 2025 年医疗 AI 项目中广泛使用的 Python 库,涵盖了机器学习、深度学习、大语言模型(LLM)、数据可视化、Web API 构建、Agent 自动化等多个模块。

🔍 一、数据科学与机器学习
库名说明
Polars高性能 DataFrame 库,性能远超 Pandas,支持多线程、懒执行。2025 年非常流行。
scikit-learn 1.5+经典 ML 库,持续更新中,新增更多模型评估工具和高阶调参接口。
XGBoost / LightGBM / CatBoost树模型三大王者,依旧是 Kaggle 和工业界主力。
skops用于将 scikit-learn 模型转换为可部署格式的库,2025 年较为热门。
H2O Wave可快速构建 ML Web 应用的库,适合原型展示。
🤖 二、深度学习
库名说明
PyTorch 2.2+加入了更完整的 torch.compile 支持,大幅提升训练速度。
Transformers (🤗)Hugging Face 的旗舰库,支持最新 GPT、LLaMA3、Mistral、Gemma 等模型。
Diffusers (🤗)文生图、图生图的标准库,2025 年继续火爆。
Keras 3.x完全支持 PyTorch 和 JAX 后端,统一 API,变得更强大。
FastAI 2.8+PyTorch 封装库,便捷构建深度学习模型,教学使用友好。
🌐 三、大语言模型 (LLM) 与 RAG
库名说明
LangChain构建 LLM 工作流的库,支持 OpenAI、Anthropic、Claude 等模型调用。
LlamaIndex构建向量索引与检索增强生成(RAG)系统的核心库。
Haystack来自 Deepset 的 RAG 框架,支持多种后端。2025 年持续更新。
InstructorEmbedding微调 embedding 模型,效果比 OpenAI embeddings 更准。
VLLM / TGI / LMDeploy
高效部署大模型的库,在企业部署中非常关键。
📊 四、数据可视化
库名说明
Plotly 5.x交互式图表,支持 Jupyter 和 Web,持续流行。
Altair 5+基于 Vega 的声明式可视化工具,支持 Pandas 和 Polars。
PyGWalker类似 Tableau 的数据探索工具,2025 年新晋热门。
Seaborn v0.13+经典静态图工具,仍常用。
🕸️ 五、Web 开发 & API
库名说明
FastAPI异步、类型注解友好的 API 框架,2025 年依旧最火。
Litestar (前身为 Starlite)FastAPI 替代者,架构更现代、性能更强。
Reflex (前身为 Pynecone)用 Python 写前端和后端,生成完整 Web 应用,2025 年大热。
NiceGUI用 Python 写交互式 GUI,基于 Vue + Tailwind,快速开发界面。
🧠 六、自动化 & AI Agent
库名说明
Autogen (Microsoft)构建多智能体协作系统,支持代码写作、任务规划等。
CrewAI用 LLM 构建多角色 AI 工作流系统,支持角色分工、任务追踪。
LangGraph基于 LangChain 的图结构 LLM 流程管理库,适合构建复杂逻辑。
🛠 七、其他值得关注的工具库
库名说明
Rich / Textual用于终端 UI 的现代化库,支持彩色日志、表格、进度条等。
Pydantic v2类型验证神器,性能提升巨大,广泛用于 FastAPI 和数据校验。
Typer用于构建 CLI 工具的库,语法优美、支持类型注解。
Uvicorn / Gunicorn / Hypercorn常用 Python Web 服务器,支持异步。

练手案例

🧬 案例一、医学图像处理与分析
1. MONAI(Medical Open Network for AI)

专为医学影像(CT/MRI)打造的 PyTorch 库。

  • 基本示例:加载并处理 MRI 图像

安装命令:

pip install monai nibabel 

下面是一个医学图像处理示例,结合了数据加载、预处理、3D UNet 模型构建和训练流程,使用 MONAI 库实现端到端的医学图像分割任务:

from monai.transforms import (
    LoadImaged, AddChanneld, Spacingd, Orientationd,
    ScaleIntensityRanged, RandCropByPosNegLabeld, Compose, EnsureTyped
)
from monai.networks.nets import UNet
from monai.losses import DiceLoss
from monai.metrics import DiceMetric
from monai.data import Dataset, DataLoader, decollate_batch
from monai.inferers import sliding_window_inference
import torch
import numpy as np
import matplotlib.pyplot as plt

# 1. 数据准备与预处理
data_dir = "./medical_images/"
train_files = [
    {"image": data_dir + "patient1_CT.nii.gz", "label": data_dir + "patient1_mask.nii.gz"},
    {"image": data_dir + "patient2_CT.nii.gz", "label": data_dir + "patient2_mask.nii.gz"}
]

# 医学图像预处理流程
train_transforms = Compose([
    LoadImaged(keys=["image", "label"]),
    AddChanneld(keys=["image", "label"]),
    Spacingd(keys=["image", "label"], pixdim=(1.0, 1.0, 2.0), mode=("bilinear", "nearest")),
    Orientationd(keys=["image", "label"], axcodes="RAS"),
    ScaleIntensityRanged(keys=["image"], a_min=-1000, a_max=1000, b_min=0.0, b_max=1.0, clip=True),
    RandCropByPosNegLabeld(keys=["image", "label"], label_key="label", spatial_size=(96, 96, 64), pos=1, neg=1, num_samples=4),
    EnsureTyped(keys=["image", "label"], dtype=torch.float32)
])

# 创建数据集和数据加载器
train_ds = Dataset(data=train_files, transform=train_transforms)
train_loader = DataLoader(train_ds, batch_size=2, shuffle=True)

# 2. 构建 3D 分割模型
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = UNet(
    spatial_dims=3, in_channels=1, out_channels=2,
    channels=(16, 32, 64, 128, 256), strides=(2, 2, 2, 2), num_res_units=2
).to(device)

# 3. 设置训练参数
loss_function = DiceLoss(to_onehot_y=True, softmax=True)
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
dice_metric = DiceMetric(include_background=False, reduction="mean")

# 4. 训练循环
max_epochs = 50
for epoch in range(max_epochs):
    model.train()
    epoch_loss = 0
    for batch_data in train_loader:
        inputs, labels = batch_data["image"].to(device), batch_data["label"].to(device)
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = loss_function(outputs, labels)
        loss.backward()
        optimizer.step()
        epoch_loss += loss.item()
    epoch_loss /= len(train_loader)

    # 验证步骤 (简化版)
    model.eval()
    with torch.no_grad():
        metric_sum = 0.0
        for val_data in train_loader:
            val_images, val_labels = val_data["image"].to(device), val_data["label"].to(device)
            val_outputs = sliding_window_inference(val_images, (96, 96, 64), 4, model)
            val_outputs = [torch.argmax(i, dim=1) for i in decollate_batch(val_outputs)]
            dice_metric(y_pred=val_outputs, y=val_labels)
        metric = dice_metric.aggregate().item()
        dice_metric.reset()
    print(f"Epoch {epoch+1}/{max_epochs}, Loss: {epoch_loss:.4f}, Dice: {metric:.4f}")

# 5. 可视化结果 (示例)
def visualize_slice(image, label, prediction, slice_index=25):
    fig, axes = plt.subplots(1, 3, figsize=(15, 5))
    axes[0].imshow(image[0, 0, :, :, slice_index], cmap="gray")
    axes[0].set_title("Input Image")
    axes[0].axis("off")
    axes[1].imshow(label[0, 0, :, :, slice_index], cmap="jet")
    axes[1].set_title("Ground Truth")
    axes[1].axis("off")
    axes[2].imshow(prediction[0, 0, :, :, slice_index], cmap="jet")
    axes[2].set_title("Prediction")
    axes[2].axis("off")
    plt.show()

test_data = train_ds[0]
image = test_data["image"].unsqueeze(0).to(device)
with torch.no_grad():
    prediction = sliding_window_inference(image, (96, 96, 64), 4, model)
    prediction = torch.argmax(prediction, dim=1, keepdim=True)
    visualize_slice(image.cpu().numpy(), test_data["label"].unsqueeze(0).numpy(), prediction.cpu().numpy())
关键组件说明:
  1. 数据预处理流程:
    • Spacingd:标准化不同扫描仪的分辨率差异
    • Orientationd:统一图像方向(RAS 坐标系)
    • ScaleIntensityRanged:CT 值标准化(-1000 到 1000 HU)
    • RandCropByPosNegLabeld:基于标签的智能裁剪
  2. 3D UNet 架构:
    • 专门处理体积数据(如 CT/MRI)
    • 残差单元提升梯度流动
    • 多尺度特征提取能力
  3. 医学图像特定技术:
    • Dice 损失函数:处理类别不平衡
    • Sliding Window 推理:处理大尺寸体积数据
    • 体素间距保留:保持物理尺寸一致性
  4. 可视化:
    • 三视图对比(原始图像/真实标签/预测结果)
    • 多平面重建(轴向/冠状/矢状面)
实际应用场景:
  1. 器官分割(肝脏/肾脏/肿瘤)
  2. 病变检测
  3. 手术规划
  4. 放射治疗剂量计算
进阶优化建议:
# 添加数据增强
from monai.transforms import RandRotated, RandFlipd, RandZoomd
train_transforms.insert(6, Compose([
    RandRotated(keys=["image", "label"], range_x=0.3, prob=0.5),
    RandFlipd(keys=["image", "label"], spatial_axis=0, prob=0.5),
    RandZoomd(keys=["image", "label"], min_zoom=0.9, max_zoom=1.1, prob=0.5)
]))

# 使用更先进的模型
from monai.networks.nets import SwinUNETR
model = SwinUNETR(img_size=(96, 96, 64), in_channels=1, out_channels=2, feature_size=48).to(device)

# 添加学习率调度
lr_scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=max_epochs)

# 混合精度训练
scaler = torch.cuda.amp.GradScaler()

此示例展示了 MONAI 在医学图像分析中的核心优势:领域特定的预处理、优化的 3D 网络架构、医学影像评估指标和高效的大体积数据处理能力。实际应用中需根据具体临床任务调整网络结构和处理参数。

2. Pandas + Polars + PyGWalker

快速探索表格型 EHR 数据(如病人记录、药品记录等)。

  • 示例:用 PyGWalker 交互式探索电子病历

安装命令:

pip install pandas polars pygwalker 

一个结合 Pandas、Polars 和 PyGWalker 快速探索电子健康记录(EHR)数据的完整示例,包含数据加载、预处理和交互式可视化:

import pandas as pd
import polars as pl
import pygwalker as pyg
from datetime import datetime

# 示例 EHR 数据结构 (若需加载真实数据,替换为 read_csv/read_parquet)
data = {
    "patient_id": [1001, 1002, 1003, 1001, 1004],
    "visit_date": ["2023-01-15", "2023-02-20", "2023-01-05", "2023-03-10", "2023-02-28"],
    "diagnosis": ["Hypertension", "Diabetes", "Hypertension", "Asthma", "Diabetes"],
    "medication": ["Lisinopril", "Metformin", "Amlodipine", "Albuterol", "Insulin"],
    "age": [45, 62, 58, 36, 70],
    "blood_pressure": ["140/90", "130/85", "150/95", "120/80", "145/88"],
    "lab_result": [None, 6.5, 7.1, None, 8.0]
}

# 方案 1: 使用 Pandas 加载数据
df_pd = pd.DataFrame(data)
df_pd["visit_date"] = pd.to_datetime(df_pd["visit_date"])

# 方案 2: 使用 Polars 加载大数据(更高效)
df_pl = pl.DataFrame(data).with_columns(pl.col("visit_date").str.to_date("%Y-%m-%d"))

# 转换为 Pandas 供 PyGWalker 使用(Polars 处理+PyGWalker 可视化)
df_processed = df_pl.to_pandas()

# 使用 PyGWalker 进行交互式分析
walker = pyg.walk(
    df_processed,
    spec="./ehr_analysis.json",
    dark="light",
    show_cloud_tool=False,
    field_specs={
        "age": {"analyticType": "dimension"},
        "lab_result": {"analyticType": "measure"}
    }
)
关键功能说明:
  • 小数据:直接使用 pd.read_csv("ehr.csv")
  • 大数据:用 Polars 加速处理 → 转 Pandas
  1. PyGWalker 交互技巧:
    • 拖拽分析:将字段拖到 X/Y 轴、颜色、大小等通道
    • 图表推荐:智能识别字段类型推荐图表
    • 一键生成:患者年龄分布直方图、疾病类型环形图、实验室指标趋势线、多指标散点矩阵

高级分析支持:

# 在 PyGWalker 界面中直接使用 Pandas 语法
walker.set_global_query("""
systolic = blood_pressure.split('/')[0].astype(int)
diastolic = blood_pressure.split('/')[1].astype(int)
hypertension_flag = (systolic >= 140) | (diastolic >= 90)
""")

数据加载优化

df_pl = pl.scan_parquet("large_ehr.parquet").collect()  # 惰性加载
典型工作流:
  1. 数据加载:Polars 处理百万级记录(比 Pandas 快 5-10 倍)
  2. 预处理:在 Polars 中完成清洗/转换
  3. 交互探索:
    • 步骤 1:拖拽 diagnosis 到行 → 自动生成疾病分布
    • 步骤 2:拖拽 age 到 Y 轴 → 自动切换箱线图
    • 步骤 3:添加 medication 到颜色通道 → 多维度对比
优势场景:
场景PandasPolarsPyGWalker
数据加载速度★★☆★★★-
内存效率★★☆★★★-
交互式可视化--★★★
复杂分析支持★★★★★★★★☆

💡 提示:对于超大数据集(>1GB),推荐:

🧪 三、药物发现与分子模拟

3. RDKit

用于化合物表示、分子指纹计算、QSAR 模型等。

  • 示例:分子指纹和相似度

安装命令:(推荐用 conda 安装)

conda install -c rdkit rdkit 

使用 RDKit 计算分子指纹和相似度的完整示例代码,并附带详细解释:

from rdkit import Chem
from rdkit.Chem import AllChem, DataStructs
from rdkit.Chem.Draw import MolsToGridImage
import matplotlib.pyplot as plt

# 1. 分子创建与可视化
ethanol = Chem.MolFromSmiles("CCO")  # 乙醇
ethylamine = Chem.MolFromSmiles("CCN")  # 乙胺

# 可视化分子
img = MolsToGridImage([ethanol, ethylamine], legends=["Ethanol (CCO)", "Ethylamine (CCN)"], subImgSize=(300, 300))
plt.imshow(img)
plt.axis('off')
plt.show()

# 2. 分子指纹生成
# 使用 Morgan 指纹算法(圆形指纹),半径=2,生成 2048 位的位向量
fp_ethanol = AllChem.GetMorganFingerprintAsBitVect(ethanol, radius=2, nBits=2048)
fp_ethylamine = AllChem.GetMorganFingerprintAsBitVect(ethylamine, radius=2, nBits=2048)

# 3. 相似度计算
# 计算 Tanimoto 系数(Jaccard 相似度)
similarity = DataStructs.TanimotoSimilarity(fp_ethanol, fp_ethylamine)

# 4. 结果输出
print("="*50)
print(f"Tanimoto Similarity: {similarity:.4f}")
print("="*50)
print("Interpretation:")
print(f"- Ethanol (CCO) and Ethylamine (CCN) are {similarity*100:.1f}% similar")
print("- Similarity range: 0.0 (完全不同) to 1.0 (完全相同)")
print("- Value >0.5 suggests significant structural similarity")
print("- Difference due to terminal group: -OH vs -NH₂")
代码解析:
  1. 分子创建:
    • MolFromSmiles() 将 SMILES 字符串转换为分子对象
    • 乙醇:CCO(羟基化合物)
    • 乙胺:CCN(胺类化合物)
  2. 分子指纹:
    • 使用 Morgan 指纹算法(圆形指纹)
    • radius=2:考虑原子周围两键范围内的结构特征
    • nBits=2048:生成 2048 位的二进制指纹向量
    • 算法原理:通过迭代扩展识别每个原子周围的独特子结构
  3. 相似度计算:
    • Tanimoto 系数 = 共有特征数 / (特征 A 总数 + 特征 B 总数 - 共有特征数)
    • 数学表示:T(A,B) = |A∩B| / (|A| + |B| - |A∩B|)
    • 取值范围:0.0(完全不同)到 1.0(完全相同)
  4. 结果解释:
    • 典型输出:Tanimoto Similarity: 0.25-0.35
    • 相似度约 30%:两个分子有相同的乙基骨架(-CH₂-CH₃),但不同末端基团(-OH vs -NH₂)
    • 在药物发现中:
      • 0.3-0.7:中等相似
      • <0.2:结构差异大
    • 0.85:高度相似化合物
应用场景:
  1. 虚拟筛选:快速筛选大型化合物数据库
  2. 先导化合物优化:评估结构修饰后的相似性变化
  3. 聚类分析:对化合物库进行结构分组
  4. ADMET 预测:基于相似性的性质预测
扩展建议:
# 尝试不同分子对
aspirin = Chem.MolFromSmiles("CC(=O)OC1=CC=CC=C1C(=O)O")
ibuprofen = Chem.MolFromSmiles("CC(C)CC1=CC=C(C=C1)C(C)C(=O)O")

# 比较不同指纹算法
fp1 = AllChem.GetMACCSKeysFingerprint(mol)  # MACCS 密钥
fp2 = Chem.RDKFingerprint(mol)  # RDKit 拓扑指纹

注意事项:相似度值高度依赖指纹参数(半径、位长度)。结构相似 ≠ 活性相似(需结合生物实验验证)。对小分子效果最佳(分子量 < 800 Da)。

运行此代码需要预先安装 RDKit(建议通过 Anaconda 安装):

conda install -c conda-forge rdkit matplotlib 

目录

  1. 随着人工智能在医疗领域的持续深入发展,Python 已经成为医疗 AI 项目的首选开发语言。从数据处理、模型训练、大模型集成到系统部署与可视化,Python 社区在过去几年中涌现出大量功能强大且持续演进的开源工具。本指南整理了在 2025 年医疗 AI 项目中广泛使用的 Python 库,涵盖了机器学习、深度学习、大语言模型(LLM)、数据可视化、Web API 构建、Agent 自动化等多个模块。
  2. 🔍 一、数据科学与机器学习
  3. 🤖 二、深度学习
  4. 🌐 三、大语言模型 (LLM) 与 RAG
  5. 📊 四、数据可视化
  6. 🕸️ 五、Web 开发 & API
  7. 🧠 六、自动化 & AI Agent
  8. 🛠 七、其他值得关注的工具库
  9. 练手案例
  10. 🧬 案例一、医学图像处理与分析
  11. 1. MONAI(Medical Open Network for AI)
  12. 1. 数据准备与预处理
  13. 医学图像预处理流程
  14. 创建数据集和数据加载器
  15. 2. 构建 3D 分割模型
  16. 3. 设置训练参数
  17. 4. 训练循环
  18. 5. 可视化结果 (示例)
  19. 关键组件说明:
  20. 实际应用场景:
  21. 进阶优化建议:
  22. 添加数据增强
  23. 使用更先进的模型
  24. 添加学习率调度
  25. 混合精度训练
  26. 2. Pandas + Polars + PyGWalker
  27. 示例 EHR 数据结构 (若需加载真实数据,替换为 readcsv/readparquet)
  28. 方案 1: 使用 Pandas 加载数据
  29. 方案 2: 使用 Polars 加载大数据(更高效)
  30. 转换为 Pandas 供 PyGWalker 使用(Polars 处理+PyGWalker 可视化)
  31. 使用 PyGWalker 进行交互式分析
  32. 关键功能说明:
  33. 在 PyGWalker 界面中直接使用 Pandas 语法
  34. 典型工作流:
  35. 优势场景:
  36. 🧪 三、药物发现与分子模拟
  37. 3. RDKit
  38. 1. 分子创建与可视化
  39. 可视化分子
  40. 2. 分子指纹生成
  41. 使用 Morgan 指纹算法(圆形指纹),半径=2,生成 2048 位的位向量
  42. 3. 相似度计算
  43. 计算 Tanimoto 系数(Jaccard 相似度)
  44. 4. 结果输出
  45. 代码解析:
  46. 应用场景:
  47. 扩展建议:
  48. 尝试不同分子对
  49. 比较不同指纹算法
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 自然语言处理在法律领域的应用与实战
  • Meta Quest 一体机 SideQuest 安装 APK 及 OBB 数据包教程
  • 贝尔曼 - 福特算法:负权图最短路径计算详解
  • FPGA 核心硬件资源详解:LUT、FF、BRAM、DSP、PLL 及综合报告解读
  • 教育领域 NLP 应用与智能问答系统实战
  • Python 核心语法速查:数据类型与基础操作
  • OpenFPGA 完全指南:快速上手开源 FPGA IP 生成器
  • 机器学习:KNN 算法详解
  • Android ImageView scaleType 属性详解:不同缩放模式的适用场景
  • OpenCode 集成 Kimi K2.5 配置与使用指南
  • 【VSCode Copilot登录失败终极指南】:9大常见问题与高效解决方案
  • AI 驱动的产品全流程落地实践:从需求挖掘到灰度发布
  • FPGA 经典面试题目及参考答案汇总
  • FPGA 入门实战:利用 LED 实现 2 选 1 多路选择器
  • Android Framework 源码深度解析:系统架构与核心机制
  • Python 报错 ModuleNotFoundError: No module named 'distutils' 解决办法
  • DeepFace + OpenCV 实现实时情绪分析器
  • CherryStudio 使用指南
  • OpenCode 开源 AI 编程助手使用指南
  • 模型版本控制:管理 Llama Factory 微调成果

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online