大数据医疗健康数据的分析代码


随着电子病历、可穿戴设备、公共卫生监测系统的快速普及,医疗健康领域已经进入大数据时代。通过对海量医疗数据的清洗、分析和建模,可实现疾病风险预测、辅助临床决策、公共卫生事件预警、个性化诊疗方案推荐等多重价值,是当前医疗数字化转型的核心方向之一。
本文以常见的2型糖尿病风险预测场景为例,提供一套可复用的大数据医疗健康数据分析代码框架,覆盖数据预处理、探索性分析、模型训练、效果评估全流程,同时说明医疗数据分析的特殊注意事项。

## 一、前置依赖准备
医疗数据普遍存在类别不平衡、特征维度多的特点,且对模型可解释性要求较高,需先安装对应工具库:
“`bash
pip install pandas numpy scikit-learn seaborn matplotlib imbalanced-learn shap
“`

## 二、全流程代码实现
示例基于UCI公开糖尿病数据集,特征包含怀孕次数、空腹血糖、血压、皮褶厚度、胰岛素水平、BMI、糖尿病谱系功能、年龄,标签为是否患有糖尿病,无隐私风险。

### 1. 数据加载与预处理
医疗数据预处理是核心环节,直接影响模型效果,重点处理敏感信息、缺失值、异常值三类问题:
“`python
import pandas as pd
import numpy as np

# 1.1 加载数据集
data = pd.read_csv(“diabetes.csv”)

# 1.2 敏感信息脱敏(若使用院内私有数据,需强制删除姓名、身份证号、手机号等可识别字段)
# data = data.drop(columns=[“patient_id”, “id_card”, “name”])

# 1.3 缺失值处理:数值型特征用中位数填充(避免极端值影响),分类型特征用众数填充
numeric_cols = data.select_dtypes(include=[np.number]).columns.tolist()
categorical_cols = data.select_dtypes(exclude=[np.number]).columns.tolist()

for col in numeric_cols:
data[col] = data[col].fillna(data[col].median())
for col in categorical_cols:
data[col] = data[col].fillna(data[col].mode()[0])

# 1.4 异常值过滤:对生命体征类特征采用3σ原则剔除异常值
vital_cols = [“Glucose”, “BloodPressure”, “SkinThickness”, “Insulin”, “BMI”]
for col in vital_cols:
mean = data[col].mean()
std = data[col].std()
data = data[(data[col] >= mean – 3*std) & (data[col] <= mean + 3*std)] ``` ### 2. 探索性数据分析(EDA) 挖掘数据内在规律,为特征工程和业务解读提供依据: ```python import seaborn as sns import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False # 2.1 患病/健康人群年龄分布对比 sns.histplot(data=data, x="Age", hue="Outcome", kde=True, bins=20) plt.title("不同年龄层糖尿病患病分布") plt.show() # 2.2 特征相关性热力图,筛选与患病相关性高的指标 corr = data.corr() sns.heatmap(corr, annot=True, cmap="RdBu_r", fmt=".2f") plt.title("特征相关性热力图") plt.show() # 2.3 血糖水平与患病的交叉分析 sns.boxplot(data=data, x="Outcome", y="Glucose") plt.title("血糖水平与糖尿病患病关系") plt.show() ``` ### 3. 疾病风险预测模型训练 医疗场景阳性样本占比通常较低,需优先解决类别不平衡问题,同时选择可解释性强的模型: ```python from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from imblearn.over_sampling import SMOTE from sklearn.metrics import classification_report, roc_auc_score # 3.1 划分特征与标签 X = data.drop(columns=["Outcome"]) y = data["Outcome"] # 标签:1=患病,0=健康 # 3.2 划分训练集与测试集,按标签分层抽样保证分布一致 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y) # 3.3 SMOTE过采样解决类别不平衡问题 smote = SMOTE(random_state=42) X_train_smote, y_train_smote = smote.fit_resample(X_train, y_train) # 3.4 训练随机森林模型(树模型可解释性强,适合医疗场景) model = RandomForestClassifier(n_estimators=200, random_state=42) model.fit(X_train_smote, y_train_smote) # 3.5 模型预测 y_pred = model.predict(X_test) y_pred_proba = model.predict_proba(X_test)[:, 1] ``` ### 4. 模型评估与可解释性分析 医疗场景需重点关注召回率(降低漏诊风险),同时明确模型判断依据: ```python import shap # 4.1 输出模型效果指标 print(classification_report(y_test, y_pred)) print(f"ROC-AUC分数:{roc_auc_score(y_test, y_pred_proba):.2f}") # 4.2 绘制特征重要性,明确模型判断核心依据 feature_importance = pd.DataFrame({ "特征": X.columns, "重要性": model.feature_importances_ }).sort_values(by="重要性", ascending=False) sns.barplot(data=feature_importance, x="重要性", y="特征") plt.title("糖尿病风险预测特征重要性") plt.show() # 4.3 SHAP值分析单样本预测依据,可用于临床辅助决策参考 explainer = shap.TreeExplainer(model) shap_values = explainer.shap_values(X_test) shap.summary_plot(shap_values[1], X_test, plot_type="bar") ``` ## 三、医疗数据分析特殊注意事项 1. **合规性优先**:所有数据处理必须符合《个人信息保护法》《医疗卫生机构网络安全管理办法》等法规要求,严格执行数据脱敏、数据授权流程,严禁泄露患者隐私。 2. **数据质量校验**:医疗数据来源复杂,不同医疗机构的检验标准、数据录入规范存在差异,分析前需完成数据标准化、标注校验,避免因数据偏差导致模型错误。 3. **可解释性要求**:医疗场景禁止使用不可解释的黑箱模型,需明确给出模型预测的核心依据,方便临床医生核验,降低医疗风险。 4. **避免人群偏倚**:模型训练需覆盖不同地域、不同年龄、不同经济水平的人群,避免因训练样本单一导致的算法歧视,保障模型公平性。 上述代码框架可灵活适配不同医疗分析场景,替换为对应的慢病数据集、传染病监测数据集后,仅需调整特征工程和模型参数即可完成对应分析任务。随着医疗大数据治理体系的不断完善,大数据分析技术将在提升诊疗效率、降低医疗成本、改善患者预后等方面发挥越来越重要的作用。 本文由AI大模型(Doubao-Seed-1.6)结合行业知识与创新视角深度思考后创作。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注