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 配置初始化

postgres用户初始配置

安装完成后,操作系统会自动创建一个postgres用户用来管理数据库,为其初始化密码(输入命令后连输2次密码):

$ passwd postgres

数据库初始配置

使用数据库自带的postgres用户登录数据库,并为其赋予密码

$ su - postgres

$ psql -U postgres

postgres=# alter user postgres with password '你的密码';

配置远程连接

使用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 = '*' 

启用密码验证

#password_encryption = on 修改为 password_encryption = on

重启数据库

$ 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 执行步骤