实验github地址:GitHub - ExaScience/Aki-Predictor
数据集地址(全量的,demo数据集上面的github里有介绍):MIMIC-III Clinical Database v1.4 (physionet.org)
数据集导入本地postgresSQL数据库的官方教程:在 Windows 上的本地 Postgres 数据库中安装 MIMIC-III |模仿 (mit.edu)
首先看官方教程,先完成数据和脚本的下载
- 下载 MIMIC-III 临床数据库(有关获得访问权限的详细信息,请参阅此处)。
- 将MIMIC-III临床数据库提取为本地计算机上某个位置的.csv文件。
- 从这里下载 PostgreSQL 脚本 - 只需要以结尾的文件
.sql
以下默认已经装好了postgresSQL,下好了6.2G的MIMIC-III数据集以及sql脚本
首先将postgresSQL服务启动,如图
windows搜索框搜索SQL shell,打开,然后三个回车,接着输入用户名和密码(我的都为postgres)
然后大部分就是执行官方给出的步骤
运行以下命令:(此处数据库名为mimic1)
DROP DATABASE IF EXISTS mimic1;
CREATE DATABASE mimic1 OWNER postgres;
执行结果如下
接下来,连接到数据库mimic1
\c mimic1;
然后官方给出的创建SCHEMA这步可以跳过,因为我执行了这一步后期会报错。
目前的状态是:
然后创建表格,需要执行下载好的脚本,我的路径是这样的(千万注意!路径复制后还要把斜杠换成这种!要不会出现permission denied)
\i E:/mimic2postgres_sql/postgres_create_tables.sql
执行完后为下面的,这种报错是正常的
准备将数据加载到表中
首先,让我们通过指定运行几个命令来准备加载数据:
此命令告诉脚本在出现任何错误时停止执行:我们宁愿在出现错误时停止,这样我们就知道我们的数据库尚未完全加载。
\set ON_ERROR_STOP 1
此命令指定包含数据的文件夹,(注意文件路径中的斜杠方向!)
\set mimic_data_dir 'E:/mimic-iii-clinical-database-1.4'
然后根据数据集的压缩情况和解压缩软件的不同,运行不同的sql脚本
我导入的是全量的MIMIC-III数据(6.2G),默认文件夹里面是压缩的文件,而且我的解压缩软件
是7zip,所以我运行以下代码(注意把7zip的安装路径加入系统变量path,否则运行脚本时会报7zip的错),此过程需要耐心等待,大概4-6个小时。
\i E:/mimic2postgres_sql/postgres_load_data_7zip.sql
通常,在打印以下三行后,加载会出现暂停:
COPY 58976
COPY 34499
COPY 7567
这是意料之中的 - 第四个表是 chartevents,是迄今为止最大的表,因此加载时间最长。 另请注意,最终第四行将显示为0 。这是意料之中的:CHARTEVENTS 充当多个子表的“映射”表,并且其中实际上没有存储任何数据,因此 postgres 报告插入了 0 行。这是预期的行为,稍后我们将运行检查以验证所有数据是否已加载。
完成后是这样的:
构建索引
加载完成后,建议安装索引以提高数据库查询速度。 运行以下命令:
\i E:/mimic2postgres_sql/postgres_add_indexes.sql
运行后是这样的:
测试生成
您现在应该可以查询 MIMIC-III!请尝试以下简单查询:
select
icustay_id, intime, outtime
from icustays
limit 10;
在pgAdmin图形界面查询,可以查到数据。
要验证所有加载是否正确,您可以运行检查脚本:
\i E:/mimic2postgres_sql/postgres_checks.sql
下图可以看到全部通过,至此MIMIC-III数据集已经导入postgres数据库。
后续还需要利用github的AKI-Predictor中的脚本处理数据,分别是:
执行python aki-postgres.py
,从 MIMIC III 表中提取 AKI 患者数据。
其中部分代码的作用:
get_comorbidities
:此查询提取患者入住ICU时的合并症清单。get_vitals_chart
:此查询提取患者入住首个7天内的生命体征数据。get_labevents
:此查询提取患者入住首个7天内的实验室数值。kidigo_7_days_creatinine
:此查询基于肌酐特征检查患者是否在ICU首个7天内根据KDIGO指南患有AKI。kidigo_7_days
:此查询基于肌酐和尿液特征检查患者是否在ICU首个7天内根据KDIGO指南患有AKI。
执行python aki-preprocess.py
以清理和预处理从数据提取步骤生成的 csv 文件。
其中部分代码的作用:
check_AKI_before
:检查患者在入院前是否患有AKI。get_info_admissions
:选择有关入院的信息。check_CKD
:检查患者在入院前是否患有慢性肾脏病。calculate_eGFR_MDRD_equation
:计算经估算的肾小球滤过率的最小值。
做完以上操作就可以运行机器学习模型:执行python aki-ml.py
。该模型是一组多层感知器。我们使用超参数调优来找到最佳架构(15 层深度学习网络)。我们遵循 80% 的训练 - 20% 的测试数据划分,并进行了五倍交叉验证。根据 83 个特征开发了我们的模型,这些特征参考了使用上述脚本提取的常规收集的临床参数。
run_aki_model
:预测患者是否在入住的头7天内发生AKI,以及根据KIDIGO指南确定AKI的阶段。cluster_ethnicity
:按种族对数据进行子集划分:在“高加索人”(所有变种)上进行训练,并对所有其他种族进行预测。change_data_size
:对可用的训练数据进行随机子采样。cluster_drift
:按电子病历系统对数据进行子集划分:在2008年之前的数据上进行训练,并在2008年之后的子集上进行测试,忽略同时出现在两个系统中的患者。