MIMIC-OMOP转换
1.数据与环境准备
1.1 MIMIC-III v1.4数据集获取
需从mimic官网注册申请并下载数据
1.2 mimic-omop开源项目源码下载
https://github.com/MIT-LCP/mimic-omop
1.3 PostgreSQL数据库安装配置
1.3.1 下载安装
Linux环境,联网执行以下命令安装即可
# Install the repository RPM:
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# Install PostgreSQL:
yum install -y postgresql96-server
# Optionally initialize the database and enable automatic start:
/usr/pgsql-9.6/bin/postgresql96-setup initdb
systemctl enable postgresql-9.6
systemctl start postgresql-9.6
1.3.2 配置初始化
l postgres用户初始配置
安装完成后,操作系统会自动创建一个postgres用户用来管理数据库,为其初始化密码(输入命令后连输2次密码):
$ passwd postgres
l 数据库初始配置
使用数据库自带的postgres用户登录数据库,并为其赋予密码
$ su - postgres
$ psql -U postgres
postgres=# alter user postgres with password '你的密码';
l 配置远程连接
使用find / -name 'pg_hba.conf'查找到pg_hba.conf,修改pg_hba.conf在最后添加允许访问IP段(全网段可访问)
host all all 0.0.0.0/0
使用find / -name 'postgresql.conf'找到 postgresql.conf找到用户参数listen_address(取消掉注释),改成下面样式
listen_address = '*'
l 启用密码验证
#password_encryption = on 修改为 password_encryption = on
l 重启数据库
$ systemctl restart postgresql-9.6
2. MIMIC-III v1.4数据入库
2.1 创建MIMIC数据库
创建表空间
postgres=# create tablespace mimic_omop_tbs location '/home/postgres9.6/tablespace';
目录分配权限
postgres=# chown postgres:postgres /home/postgres9.6/tablespace
创建数据库
postgres=# create database mimic tablespace mimic_omop_tbs ;
切换到mimic数据库
postgres=# \c mimic;
2.2 数据与项目源码准备
将MIMIC-III v1.4数据上传至/home/mimic-datasource
将mimic-omop源码上传至/home/mimic-omop-code/mimic-omop
2.3 执行数据入库
项目执行前,进入/home/mimic-omop-code/mimic-omop/mimic/build-mimic目录,修改postgres_load_data_gz.sql中mimic数据文件路径
# sed -i 's/:mimic_data_dir/\/home\/mimic-datasource/g' postgres_load_data_gz.sql
进入PostgreSQL数据库,切换到项目源码目录
mimic=# \cd /home/mimic-omop-code/mimic-omop/mimic/build-mimic
执行数据入库sql
mimic=# \i build-mimiciii.sql
3. OMOP CDM建表
3.1 获取CommonDataModel项目
从https://github.com/OHDSI/CommonDataModel下载源码,项目包括Oracle、SQL Server、PostgreSQL等数据库OMOP CDM模型建表DDL、主键、约束等SQL语句,可在数据库中完成OMOP CDM模型建表。
按照mimic-omop/omop/build-omop/postgresql/README.md,进行OMOP CDM模型建表,其主要调用了CommonDataModel项目中DDL建表语句。其中,mimic-omop项目对CommonDataModel中建表语句进行了一些改进,具体按照README.md执行即可。
3.2 修改DDL语句
修改CommonDataModel项目中DDL语句
sed -i 's/^CREATE TABLE \([a-z_]*\)/CREATE UNLOGGED TABLE \1/' "omop/build-omop/postgresql/OMOP CDM postgresql ddl.txt"
3.3 定义PSQL连接变量
定义PSQL连接变量,后面执行语句sql使用
export OMOP_SCHEMA='omop'
export OMOP='dbname=mimic options=--search_path='$OMOP_SCHEMA
3.4 创建schema并建表
数据库中创建omop的schema并执行建表语句
psql "$OMOP" -c "DROP SCHEMA IF EXISTS $OMOP_SCHEMA CASCADE;"
psql "$OMOP" -c "CREATE SCHEMA $OMOP_SCHEMA;"
psql "$OMOP" -f "omop/build-omop/postgresql/OMOP CDM postgresql ddl.txt"
3.5 修改字段
修改某些字段类型为text,NLP表添加字段等
psql "$OMOP" -f "omop/build-omop/postgresql/mimic-omop-alter.sql"
3.6 添加注释
给OMOP表添加注释
psql "$OMOP" -f "omop/build-omop/postgresql/omop_cdm_comments.sql"
3.7 导入标准术语词表
需要先下载词表,地址 https://www.ohdsi.org/analytic-tools/athena-standardized-vocabularies/ ,选择所有词表下载(大小1G多)。下载完成后压缩包内有多个csv文件(CONCEPT相关)与一个java文件(用来导入CPT词表),执行语句将词表导入数据库
psql "$OMOP" -f "omop/build-omop/postgresql/omop_vocab_load.sql"
4. 本地MIMIC-III CONCEPT加载
OMOP CDM的全部内容都被编码为概念(Concepts),所有细节均保存在CONCEPT表。在创建OMOP CDM时已经加载了标准术语词表,这里还需要导入MIMIC数据集中的“本地”概念到CONCEPT表中。参考mimic-omop项目根目录下README-run-etl.md执行,具体操作如下:
4.1 定义PSQL连接变量
定义PSQL连接变量,后面执行语句sql使用
export OMOP_SCHEMA='omop'
export OMOP='dbname=mimic options=--search_path='$OMOP_SCHEMA
export MIMIC='dbname=mimic options=--search_path= mimiciii'
4.2 字典表生成concept_id
先给mimiciii所有表添加mimic_id
psql "$MIMIC" -f mimic/build-mimic/postgres_create_mimic_id.sql
OMOP预留2000000000+作为本地概念编码,因此所有d_开头的字典表都添加了该范围的mimic_id字段作为concept_id
4.3 本地csv文件导入
mimic-omop项目还提供了额外的本地concepts位于extras/concept/*.csv,项目提供R脚本将csv文件入库到mimic
l 安装R环境
使用如下命令安装并启用 EPEL (如果已经安装过则忽略)
yum install epel-release
使用如下命令安装R
yum install R
从GitHub上安装RPostgres包
install.packages("remotes")
remotes::install_github("r-dbi/RPostgres")
注意,过程中可能需安装yum -y install postgresql-devel 不用再安装libpq否则包冲突
l cfg配置文件
主要用于postgres数据库连接配置
l 执行R脚本
Rscript etl/ConceptTables/loadTables.R mimiciii
4.4 *导入CONCEPT表*
执行etl/StandardizedVocabularies/CONCEPT/etl.sql脚本,将mimiciii数据集字典表concepts与本地cencepts全部导入OMOP中CONCEPT表(这一步可不单独执行,可在下一步ETL中批量执行)
psql "$MIMIC" --set=OMOP_SCHEMA="$OMOP_SCHEMA" -f "etl/StandardizedVocabularies/CONCEPT/etl.sql"
5. MIMIC-OMOP ETL
前面步骤全部完成后,执行以下语句,进行mimic-omop数据映射转换(包括concepts加载)
psql "$MIMIC" --set=OMOP_SCHEMA="$OMOP_SCHEMA" -f "etl/etl.sql"
注意:执行过程中,omop有些字段not null约束导致无法转换,建议根据实际情况将not null约束去除。
附录
mimic-omop项目功能
1. mimic数据入库
1.1 模块功能
l 生成mimiciii、mimic两个schema的ddl,建立表结构;
l 加载mimiciii v1.4数据集到mimiciii数据库;
l 加载若干患者的子集以模拟测试ETL;
1.2 执行步骤
1. 执行sql文件build-mimiciii.sql(图中文件编号1,会先后调用1.1,1.2),将建设mimiciii数据库并加载所有数据;
2. 执行sql文件build-mimic.sql(图中文件编号2,会先后调用2.1,2.2,2.3,2.4),将建设mimic数据库并加载mimiciii中部分数据用于ETL测试;
每个sql文件功能已在图中标出,可根据需要单独执行单个文件;
2. OMOP CDM建表
2.1 模块功能
l 在omop的schema中建立OMOP CDM表结构;
l 修改OMOP CDM表结构;
l 加载标准术语词表;
2.2 执行步骤
略
3. 本地Concept加载
3.1 模块功能
l d_开头的字典表加载到CONCEPT;
l 本地CSV加载到CONCEPT;
3.2 执行步骤
略
4. ETL
4.1 模块功能
l 将mimiciii数据集映射转换到OMOP CDM(包括concepts加载);
4.2 执行步骤
略