Idealisan

在Windows PC上安装MIMIC III数据集(使用PostgreSQL)

数据集概况

首先要想办法获得MIMIC III数据集,以gz压缩包的形式下载得到的2016年的版本是6GB多,解压后有40GB多。gz压缩包和校验文档如下:

  1. ADMISSIONS.csv.gz
  2. CALLOUT.csv.gz
  3. CAREGIVERS.csv.gz
  4. CHARTEVENTS.csv.gz
  5. CPTEVENTS.csv.gz
  6. DATETIMEEVENTS.csv.gz
  7. DIAGNOSES_ICD.csv.gz
  8. DRGCODES.csv.gz
  9. D_CPT.csv.gz
  10. D_ICD_DIAGNOSES.csv.gz
  11. D_ICD_PROCEDURES.csv.gz
  12. D_ITEMS.csv.gz
  13. D_LABITEMS.csv.gz
  14. ICUSTAYS.csv.gz
  15. INPUTEVENTS_CV.csv.gz
  16. INPUTEVENTS_MV.csv.gz
  17. LABEVENTS.csv.gz
  18. LICENSE.txt
  19. MICROBIOLOGYEVENTS.csv.gz
  20. NOTEEVENTS.csv.gz
  21. OUTPUTEVENTS.csv.gz
  22. PATIENTS.csv.gz
  23. PRESCRIPTIONS.csv.gz
  24. PROCEDUREEVENTS_MV.csv.gz
  25. PROCEDURES_ICD.csv.gz
  26. README.md
  27. SERVICES.csv.gz
  28. SHA256SUMS.txt
  29. TRANSFERS.csv.gz
  30. checksum_md5_unzipped.txt
  31. checksum_md5_zipped.txt

安装PostgreSQL

PostgreSQL大概是MySQL之外最流行的,也是越来越被看好的一款RDBMS。官网下载Windows版本(https://www.enterprisedb.com/downloads/postgres-postgresql-downloads)。我使用的安装包的直接连接是https://get.enterprisedb.com/postgresql/postgresql-13.1-1-windows-x64.exe

 

数据集比较大,要考虑好吧数据库放在哪儿,尤其是我的笔记本电脑硬盘并不富裕。所以选择了机械硬盘的F盘,如果SSD够用,自然放在SSD使用更快。

我选择安装所有组件,毕竟不差那点硬盘。

数据存放位置是可以选择的,这比MySQL要人性化。

为管理员用户设置密码,我记录一下我的密码,是家里老台式机的名字。

监听端口就默认吧,其他软件应该会默认识别这个端口,最好别改。

本地化方面,我不知道默认的本地化是什么,所以选择英语(美国),这应该是比较容易获得帮助,不容易出错并且最受支持的语言方案。

最后是概览安装配置。

安装完成后我选择启动stack builder看看有什么能用的工具。此时要把系统的代理(V2N)设置成全局模式,否则有网站证书不信任的错误。

看了一眼,暂时似乎没有要用到的,那就算了吧。

从CSV导入数据到数据库

此处参考了MIMIC官网的教程。https://mimic.physionet.org/tutorials/install-mimic-locally-windows/

从MIMIC的代码中找到buildmimic\postgres文件夹里的sql文件。(我看到有支持MySQL的文件,但是为了减少错误,还是依照推荐的配置使用PostgreSQL)

文件夹里的文件有:

  1. Makefile
  2. README.md
  3. create_mimic_user.sh
  4. postgres_add_comments.sql
  5. postgres_add_constraints.sql
  6. postgres_add_indexes.sql
  7. postgres_checks.sql
  8. postgres_create_tables.sql
  9. postgres_create_tables_pg10.sql
  10. postgres_load_data.sql
  11. postgres_load_data_7zip.sql
  12. postgres_load_data_gz.sql

官方教程里有使用命令行工具直接从gz压缩包里导入数据而无需解压的教程,但是我已经解压了,就跳过这一部分。

按照官方教程,在开始菜单找到PostgreSQL的SQL Shell,打开,开始使用命令行工具了。

一上来有点懵,不过其实只要回车就好,使用默认的主机、数据库和端口配置来连接到数据库服务。毕竟还是CS模式的数据库系统,shell只是相当于客户端。

输入设置过的密码,就登录了。

接下来按照官网上的SQL指令,先确保空的mimic数据库存在:

DROP DATABASE IF EXISTS mimic;

CREATE DATABASE mimic OWNER postgres;

都没有什么异常。

连接到mimic数据库,这部分和MySQL就不一样了。

\c mimic;

创建schema,名叫mimiciii

CREATE SCHEMA mimiciii;

将搜索路径设置为这个schema,官网提示以后每次使用shell都要使用这个命令改变搜索路径。

set search_path to mimiciii;

再创建表,使用提供的SQL文件创建。这又与MySQL不同。

\i D:/work/mimic-code/buildmimic/postgres/postgres_create_tables.sql
										

可以使用相对路径,但是我的shell不是在该文件夹下工作的,所以使用了绝对路径。使用路径的时候如果有空格,要把路径用引号包围,我使用的是单引号,经过测试只能使用单引号,不能用双引号。过程中会出现很多”NOTICE: table does not exist”这是很正常的,因为在创建表之前先试图删除已有的表。

终于准备导入数据了,先来做一些调整。首先开启”出错即停止”。

\set ON_ERROR_STOP 1
								

设置路径变量,指向数据的文件夹。

\set mimic_data_dir 'F:/temp/MIMIC III/mimic-iii-clinical-database-1.4/csv'
								

由于我使用的是已经解压的csv文件,所以使用

\i ‘F:/temp/MIMIC III/mimic-code-master/buildmimic/postgres/postgres_load_data.sql’

导入数据。

然后就出错了,无法载入CHARTEVENTS.csv。经过查询,据说这是因为这个文件太大,无法载入到内存(我的电脑内存16GB),需要使用直接从压缩文件读取的方式导入数据。

考虑到不想使用7zip,我选择gzip,可以从sourceforge下载到windows版本的二进制文件,我选择压缩包版本,免安装。

http://gnuwin32.sourceforge.net/packages/gzip.htm

我把可执行的gzip放在F:\PG\gzip\bin,然后去系统中PATH添加环境变量。

接下来重新打开shell,重新连接数据库(不必重新创建),重新新建表(同时会自动删掉旧表),重新设置选项,导入数据采用gzip版本的sql脚本,数据文件夹也要改成压缩文件所在的位置。

这次可以看到确实在满速、单核执行导入CHARTEVENTS,还能看到gzip已经在运行。这个CPU占用率也说明PostgreSQL转换数据格式来存储要比gzip解压缩慢很多,gzip需要经常等待PostgreSQL。

 

过程中很有可在显示下面三行文字后停留很久,因为第四张表CHARTEVENTS数据量极大,需要很久,这是正常现象。

COPY 58976

COPY 34499

COPY 7567

第四行应该会显示COPY 0这也是正常的,因为第四章表是映射关系,并不真正存储数据。

睡前开始导入,早上起来发现导入完成,没有失败,真是太好了。

这些因为chartevents而发生的现象都是正常的,在查询的时候要查询chartevents而不要使用chartevents_1或者chartevents_2这样的名字。

导入数据后使用sql脚本为数据库创建索引,对CHARTEVENTS这个巨大的表创建索引可能也要花很久。

\i D:/work/mimic-code/buildmimic/postgres/postgres_add_indexes.sql
										

如果愿意的话,还可以使用postgres_add_constraints.sql创建完整性约束,但是我这里就不用了。

尝试查询数据库

导入数据后,可以尝试查询了。

数据量极大,不要像平时的小实验一样不加限制的select整张表。


select

  icustay_id, intime, outtime

from icustays

limit 10;

还可以使用脚本检查数据库是否有错误。

\i D:/work/mimic-code/buildmimic/postgres/postgres_checks.sql
										

还可以添加注释。

\i D:/work/mimic-code/buildmimic/postgres/postgres_add_comments.sql
										

数据表的注释

大量的缩写和简写,以及非英语母语让我觉得还是有必要贴一下数据表的解释,很简洁的一个页面https://mit-lcp.github.io/mimic-schema-spy/

分类

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注