OHDSI相关内容整理

  • 前言
  • 一、OHDSI简介
  • 二、工具介绍
    • 1.ATLAS
      • CDM
      • Atlas
      • WebAPI
        • 1. 配置文件修改,需要修改的配置文件主要是 `application.properties`
        • 2. 初始化数据源
    • 2.Athena
    • 3.Achilles
  • 结语

前言

最近在做的工作涉及到医学科研的内容,接触到了不少行业相关的三方软件,甲方爸爸最近强推OHDSI组织相关的软件.这里对整个研究的内容和过程进行一下记录,当前主要记录部署相关的工作


一、OHDSI简介

The Observational Health Data Sciences and Informatics (OHDSI 发音为 Odyssey–奥德赛[ˈɑːdəsi])
program is a multi-stakeholder, interdisciplinary collaborative to bring out the value of health data through large-scale analytics. All our solutions are open-source.
OHDSI has established an international network of researchers and observational health databases with a central coordinating center housed at Columbia University.

简单来说,这是一个基于国外OMOP组织提出的通用数据模型(OMOP-CDM)建立的,集科研队列创建,术语集管理,分析应用的开源组织.

OHDSI

本文中使用的软件版本如下:

  1. ATLAS 2.10.1
  2. WebAPI 2.10.1
  3. CDM 5.4

二、工具介绍

OHDSI软件工具 是目前官方提供的相关的软件列表,里面个人认为比较重要的软件有以下几个:

  • ATLAS 算是这个体系内容核心,主要用于科研数据队列创建,并提供了大量队列分析功能

  • ATHENA 很重要的一部分,术语集查询下载的软件,对应页面上没有找到能维护,修改术语集/术语的位置,可能个人看的还不是很到位,比较遗憾

  • ACHILLES 过程中很关键的一个R包,用于根据标准OMOP-CDM数据,生成可用于ATLAS展示的数据统计描述信息

  • DATA QUALITY DASHBOARD 数据质量仪表盘,名字很有迷惑性,还是个R包,在OMOP-CDM结构下,每个表,每个字段的量化不符合标准的数据

    其他的还有一大堆分析用的R包,以及向OMOP-CDM结构中,导入数据用的设计工具(没错,不是直接导入,而是会给你一个推荐的数据导入的设计,很神奇)

整套内容部署需要的环境,要求需要有java,需要有容器(我这里偷懒选择了tomcat),另外需要有数据库环境,我这里选择的postgreSQL
下面逐一说明几个重要的工具使用方法.


1.ATLAS

整套体系应用的核心,源码在Git上都有,同时提供了打包好的程序.
整个ATLAS可以分为三部分,CDM,WebAPI,Atlas前端

CDM

CDM的处理相对来说很简单,官方的Git上有对应各个版本OMOP-CDM的创建语句,并且有多种数据库的支持,这里需要注意的是,在未导入数据之前,不建议执行SQL中建立约束的部分,不然初始数据导入的时候会非常的麻烦.
通用数据集下载

执行很简单,对应数据库文件夹下,有相应的结构创建语句,直接执行就好了,建议针对CDM结构,单独创建库或者schema

Atlas

Atlas的部署需要依赖WebAPI,但是非常简单,所以放到前面来进行说明.
其实说白了,整个Atlas项目就是基于WebAPI的一套页面展示,编译好的代码,直接放到容器里就可以.
但是这里要注意的是,Atlas编译必须依赖Vue,编译环境上已经有的话,直接执行npm run build等待编译完成,将编译好的内容复制到容器里,修改 js/config/app.js文件中,开头的

appConfig.api = {name: 'Local', //应用展示名称,作用不大,感觉主要多个的情况下用于区分url: 'http://localhost:8080/WebAPI/'  //重要内容,需要修改成后面部署的WebAPI的地址};

WebAPI

重头戏来了,WebAPI.这是个部署起来比较麻烦,坑比较多的东西,官方的文档,还算是相对全面Install the OHDSI WebAPI
建议直接使用 PostgreSQL 作为WebAPI使用的数据库,官方说了,3.0往后不支持其他库
基本按照文档就可以走下来,这里主要说两点需要注意的地方:

1. 配置文件修改,需要修改的配置文件主要是 application.properties

15-22行,用于配置WebAPI的主要数据连接,这里的用户只需要有webapi(配置的schema)的权限就可以

#Primary DataSource
datasource.driverClassName=org.postgresql.Driver   #数据库连接驱动,基本不用动
datasource.url=jdbc:postgresql://host:port/db  #数据库连接地址
datasource.username=username   #数据库用户名
datasource.password=password   #数据库密码
datasource.dialect=postgresql  #数据库类型
datasource.ohdsi.schema=webapi #WebAPI使用的模式名称
datasource.dialect.source=sql server   #感觉是支持SQL的版本,没修改过

31-37行 用于配置临时库,主要用来初始化WebAPI的,这里要注意的是,这个用户,嗯,需要有对应的几个Schema的建表,建模式的权限,所以最好直接给个admin,当然,这是偷懒做法 :>

#Flyway database change management.
#DataSource for Change Managment / Migration
flyway.enabled=true    #是否使用临时库构建的开关
flyway.datasource.driverClassName=org.postgresql.Driver    #数据库连接驱动,基本不用动
flyway.datasource.url=jdbc:postgresql://host:port/db   #数据库连接地址
flyway.datasource.username=username    #数据库用户名
flyway.datasource.password=password    #数据库密码

107-130行 开启安全的话需要配置,安全相关的一大堆参数,这里没做修改,所以略过 :>

2. 初始化数据源

这个是比较容易忽略的一点,因为同Atlas一样,WebAPI部署到容器后,只要没有什么问题,就能自动的初始化对应的程序库,结果库,但是,这时候访问Atlas的话,页面会提示没有配置数据源,需要转到数据源来配置,但是过去后发现没有可以配置的地方.
其实这里的数据源是直接通过WebAPI对应的数据库用户直接在数据库中执行SQL来创建的
CDM-Configuration官方的这个文档,就是说明如何添加数据源的.
示例SQl如下:

Example WebAPI SOURCE and SOURCE_DAIMON Inserts
INSERT INTO webapi.source (source_id, source_name, source_key, source_connection, source_dialect)
SELECT nextval('webapi.source_sequence'), 'My Cdm', 'MY_CDM', ' jdbc:postgresql://server:5432/cdm?user={user}&password={password}', 'postgresql';INSERT INTO webapi.source_daimon (source_daimon_id, source_id, daimon_type, table_qualifier, priority)
SELECT nextval('webapi.source_daimon_sequence'), source_id, 0, 'cdm', 0
FROM webapi.source
WHERE source_key = 'MY_CDM'
;INSERT INTO webapi.source_daimon (source_daimon_id, source_id, daimon_type, table_qualifier, priority)
SELECT nextval('webapi.source_daimon_sequence'), source_id, 1, 'vocab', 1
FROM webapi.source
WHERE source_key = 'MY_CDM'
;INSERT INTO webapi.source_daimon (source_daimon_id, source_id, daimon_type, table_qualifier, priority)
SELECT nextval('webapi.source_daimon_sequence'), source_id, 2, 'results', 1
FROM webapi.source
WHERE source_key = 'MY_CDM'
;INSERT INTO webapi.source_daimon (source_daimon_id, source_id, daimon_type, table_qualifier, priority)
SELECT nextval('webapi.source_daimon_sequence'), source_id, 5, 'temp', 0
FROM webapi.source
WHERE source_key = 'MY_CDM'
;

执行完成后,再转到对应的配置页面的时候就能看到内容,并且Atlas页面能够正常打开了,至此,整个Atlas部署完成,但是要是想使用的话,还需要结合其他内容

2022-04-21 15:52:13 这里大意了,插入完数据后,还必须访问WebAPI的接口,用于刷新焕春中保存额数据源信息 http://${host}:${port}/WebAPI/source/refresh


2.Athena

OHDSI中重要的组成部分,也是Atlas想要跑通的话,必须要使用到的东西,这里建议直接使用官方的环境,
Athena的作用就是提供了一个术语查询下载的平台,官方提供的代码,目前没有发现有可以页面维护术语的地方.
下载好的术语会以多个csv的方式存在,直接使用官方的 OMOP CDM vocabulary load - PostgreSQL.sql加载到WebAPI中配置的CDM库中即可
核心代码如下,当然你需要改成自己的配置

\COPY DRUG_STRENGTH FROM '/Users/mjg994/Documents/source/OncologyWG/etl/naaccr-etl/db/migrate/CommonDataModel-5.3.1/PostgreSQL/VocabImport/DRUG_STRENGTH.csv' WITH DELIMITER E'\t' CSV HEADER QUOTE E'\b' ;
\COPY CONCEPT FROM '/Users/mjg994/Documents/source/OncologyWG/etl/naaccr-etl/db/migrate/CommonDataModel-5.3.1/PostgreSQL/VocabImport/CONCEPT.csv' WITH DELIMITER E'\t' CSV HEADER QUOTE E'\b' ;
\COPY CONCEPT_RELATIONSHIP FROM '/Users/mjg994/Documents/source/OncologyWG/etl/naaccr-etl/db/migrate/CommonDataModel-5.3.1/PostgreSQL/VocabImport/CONCEPT_RELATIONSHIP.csv' WITH DELIMITER E'\t' CSV HEADER QUOTE E'\b' ;
\COPY CONCEPT_ANCESTOR FROM '/Users/mjg994/Documents/source/OncologyWG/etl/naaccr-etl/db/migrate/CommonDataModel-5.3.1/PostgreSQL/VocabImport/CONCEPT_ANCESTOR.csv' WITH DELIMITER E'\t' CSV HEADER QUOTE E'\b' ;
\COPY CONCEPT_SYNONYM FROM '/Users/mjg994/Documents/source/OncologyWG/etl/naaccr-etl/db/migrate/CommonDataModel-5.3.1/PostgreSQL/VocabImport/CONCEPT_SYNONYM.csv' WITH DELIMITER E'\t' CSV HEADER QUOTE E'\b' ;
\COPY VOCABULARY FROM '/Users/mjg994/Documents/source/OncologyWG/etl/naaccr-etl/db/migrate/CommonDataModel-5.3.1/PostgreSQL/VocabImport/VOCABULARY.csv' WITH DELIMITER E'\t' CSV HEADER QUOTE E'\b' ;
\COPY RELATIONSHIP FROM '/Users/mjg994/Documents/source/OncologyWG/etl/naaccr-etl/db/migrate/CommonDataModel-5.3.1/PostgreSQL/VocabImport/RELATIONSHIP.csv' WITH DELIMITER E'\t' CSV HEADER QUOTE E'\b' ;
\COPY CONCEPT_CLASS FROM '/Users/mjg994/Documents/source/OncologyWG/etl/naaccr-etl/db/migrate/CommonDataModel-5.3.1/PostgreSQL/VocabImport/CONCEPT_CLASS.csv' WITH DELIMITER E'\t' CSV HEADER QUOTE E'\b' ;
\COPY DOMAIN FROM '/Users/mjg994/Documents/source/OncologyWG/etl/naaccr-etl/db/migrate/CommonDataModel-5.3.1/PostgreSQL/VocabImport/DOMAIN.csv' WITH DELIMITER E'\t' CSV HEADER QUOTE E'\b' ;
\COPY CONCEPT_NUMERIC FROM '/Users/mjg994/Documents/source/OncologyWG/etl/naaccr-etl/db/migrate/CommonDataModel-5.3.1/PostgreSQL/VocabImport/CONCEPT_NUMERIC.csv' WITH DELIMITER E'\t' CSV HEADER QUOTE E'\b' ;

成功的将术语集加载到数据库后,Atlas页面上才开始能看到东西,但是这还没结束,现在只是看到内容了,具离能用还有很关键的一步------灌入数据
这里主要说明工具软件,如何灌数,这里就不说了,也可以下载公开数据直接导入


3.Achilles

全都准备完成后,就可以使用Achilles,对库中的数据进行基本的统计描述性分析了.
由于Achilles的执行是采用的R包的方式,也就是说你需要一个可以运行R代码的环境,这里建议安装新版本的64位R程序.
Achilles执行代码:

install.packages("remotes")
remotes::install_github("OHDSI/Achilles")
library(Achilles)
#指定数据库驱动存放目录
Sys.setenv(DATABASECONNECTOR_JAR_FOLDER='${your_file_path}')
#下载驱动,并同时创建dbms
downloadJdbcDrivers(dbms = "postgresql",pathToDriver = Sys.getenv("DATABASECONNECTOR_JAR_FOLDER"),method = "auto")
#连接数据库
connectionDetails <- createConnectionDetails(dbms = "postgresql",server = "jdbc:postgresql://${host}:${port}/${db}",user = "${username}",password = "${password}")
#运行achilles
achilles(connectionDetails = connectionDetails,cdmDatabaseSchema = "${cdm_schema}",resultsDatabaseSchema = "${results_schema}",outputFolder = "${output}")
createIndices(connectionDetails = connectionDetails,resultsDatabaseSchema = "${results_schema}",outputFolder = "${output}")

这里可能存在数据库无法连接,执行不了的情况,可以在具体调用的achilles方法中,增加一个参数,生成对应SQL,自己放到CDM的数据库中执行,当然这种方式的话,推荐是在是无法直接通过R代码连接到数据库的情况

结语

到这里OHDSI相关的核心内容部署基本就完成了,当然DQD的内容和Achilles基本类似,所以直接略过了.整体来说,这是一套部署起来比较复杂的程序,当然,后续使用过程中,还会有更多很麻烦的地方

OHDSI 相关内容 1相关推荐

  1. iOS 发布APP关于IDFA的相关内容

    您的 App 正在使用广告标识符 (IDFA).您必须先提供关于 IDFA 的使用信息或将其从 App 中移除,然后再上传您的二进制文件. 如果出现下边这两张图,你就会感到蛋蛋的忧伤 还有这个 怎么解 ...

  2. golang实践LSM相关内容

    LSM LSM(log-structured merge-tree)是一种分层,有序,面向磁盘的数据结构,其核心思想是充分了利用了,磁盘批量的顺序写要远比随机写性能高出很多,在计算机科学中,日志结构的 ...

  3. Assembly--及相关内容

    Assembly--及相关内容 0.2672019.06.04 09:29:26字数 448阅读 88 De novo genome assembly Hybrid error correction ...

  4. Android开发环境——Eclipse ADT相关内容汇总

     Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关 ...

  5. 基于KNN的相关内容推荐

    如果做网站的内容运营,相关内容推荐可以帮助用户更快地寻找和发现感兴趣的信息,从而提升网站内容浏览的流畅性,进而提升网站的价值转化.相关内容 推荐最常见的两块就是"关联推荐"和&qu ...

  6. 【SeeMusic】创建 SeeMusic 工程并编辑相关内容 ( 创建工程 | 导入 MIDI 文件 | 导入音频 | 导入视频 )

    SeeMusic 系列文章目录 [SeeMusic]下载安装并注册 SeeMusic 软件 [SeeMusic]创建 SeeMusic 工程并编辑相关内容 ( 创建工程 | 导入 MIDI 文件 | ...

  7. Android开发环境——模拟器AVD相关内容汇总

    Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关内 ...

  8. DCMTK:OFpath和相关内容的测试程序

    DCMTK:OFpath和相关内容的测试程序 OFpath和相关内容的测试程序 OFpath和相关内容的测试程序 #include "dcmtk/config/osconfig.h" ...

  9. android Wifi开发相关内容

    今天,简单讲讲android里如何使用WifiManager. 之前,我看代码时,看到了wifi相关的代码,发现自己对于这个内容的使用还很不熟悉,所以在网上查找资料,最终解决了问题.这里记录一下. 移 ...

最新文章

  1. MySQL SELECT同时UPDATE同一张表
  2. 实用教程:如何制作学术会议Oral/Spotlight Video?
  3. 计算机的硬件简介,计算机基础之硬件简介(Day2)(示例代码)
  4. LeetCode 632. 最小区间(排序+滑动窗口)
  5. poj 1905 Expanding Rods 二分
  6. OpenCV图像处理篇之边缘检測算子
  7. python3 x版本的默认编码_python3.x设置默认编码(sys.stdout.encoding和sys.defaultencoding)...
  8. 批处理命令——for
  9. Centos 之find详解
  10. 安卓一键新机_新机速递:vivo S7,如7而至;更有Nokia携手一键直达登场
  11. [cadfil] 基于隐形飞机喷气式发动机双S弯喷管的纤维缠绕工艺
  12. 无线充电宝效果怎么样,无线充电实用性大吗
  13. 穷举暴力破解密码(真香版)
  14. 中企海外周报 | 华米在印尼发布两款智能手表;百世集团进军越南市场
  15. docker search - 搜寻镜像
  16. html网站meta标签大全
  17. 用 Visual Studio Code 做基于 .NET MAUI 跨平台移动应用开发
  18. 规则网络上的演化博弈
  19. 华大单片机HC32F460 系列MCU
  20. PS动作制作炫酷火焰烟雾人物照片特效

热门文章

  1. MSTAR屏幕显示接口类-DIB,IBitmap,IDisplay,IDispCanvas,IFont,IImage等
  2. python中表示类的公有成员_Python面向对象 | 类的成员
  3. 2018华为新影像大赛征稿结束,华为手机摄影魅力征服全球用户
  4. 艺点教你制作好看的动画POSE
  5. 帝国CMS仿新版知更鸟自适应源码支持黑夜模式
  6. 互联网不再迷恋北上广
  7. linux查找和压缩
  8. 弘辽科技:春节应该怎么去运营店铺。
  9. JAVA入门零基础小白教程day07_继承抽象
  10. kubernetes 联邦搭建(kubefed)