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 執行步驟
略