cover_image

以MIMIC数据库为例,利用SQL语言进行科研数据提取与处理——入门篇

MIMIC系列数据库是一个公开免费的临床重症医学数据库。该数据库由麻省理工学院、麻省总医院和贝塞斯达国际健康系统共同维护。它包含了数万名重症监护室(ICU)患者的医疗数据。由于包含敏感的个人健康信息,访问MIMIC数据库需要特定的权限。研究人员必须完成一定的伦理培训,并通过相关的考试才能获得访问权限。MIMIC数据库文档和资源详细介绍(详情见附录1)。
1.SQL语言基础
SQL(Structured Query Language)是用于管理数据库的一种编程语言。SQL常见操作包括:数据查询(SELECT语句)、数据操作(插入INSERT、更新UPDATE、删除DELETE)、数据定义(创建CREATE、修改ALTER、删除DROP)、数据控制(授权GRANT和撤销授权REVOKE)4个方面。
熟悉SQL语言基本操作是使用MIMIC数据库的前提,SQL基础格式为:
· SELECT:选择你想查看的数据列。
· FROM:指定数据来源的表格。
· WHERE:用于过滤满足特定条件的数据行。
· JOIN:用于结合两个或多个表中的行。
· GROUP BY:将结果集按照一个或多个列进行分组。
· ORDER BY:按照一个或多个列的升序或降序排列查询结果。
SQL常用逻辑符号包括用于比较值的等号(=)、不等号(<>或!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=);用于组合条件的AND和OR,以及用于否定条件的NOT;用于检查值集合的IN和NOT IN,检查范围的BETWEEN和NOT BETWEEN;用于字符串匹配的LIKE和NOT LIKE;用于检查空值的IS NULL和IS NOT NULL。
MIMIC官方推荐把科研数据,存放在PostgreSQL数据库管理系统中(PostgreSQL详情说明见附录2),所以熟悉PostgreSQL的基本操作对于进行数据查询非常重要。申请到MIMIC数据后,搭建数据库环境详情步骤推荐链接下:
MIMIC数据库安装保姆级教程(上)       
MIMIC数据库安装保姆级教程(下)
搭建完成,成功连接后,数据库结构如下:
图片
2.SQL常用语法结构
2.1 表连接(JOIN)表连接用于从多个表中提取相关数据。MIMIC数据库中有多个相关联的表,通过JOIN可以将这些表中的数据关联起来。语法格式为:
SELECT a.column1, b.column2, ...FROM table1 aJOIN table2 b ON a.common_field = b.common_fieldWHERE condition;
例如要提取特定患者的诊断编码信息和相关描述信息:    
SELECT di.subject_id, di.icd_code, d.long_titleFROM diagnoses_icd diJOIN d_icd_diagnoses d ON di.icd_code = d.icd_codeWHERE di.subject_id = 10000032;


图片
2.2 聚合函数(Aggregations)聚合函数用于计算数据的统计值,例如计数、平均值、总和、最小值和最大值。常见的聚合函数包括 COUNT、AVG、SUM、MIN 和 MAX。语法格式为:
SELECT COUNT(*), AVG(column), SUM(column),MIN(column), MAX(column)FROM table_nameWHERE conditionGROUP BY column;
例如统计患者在ICU首次治疗单元次数排名:
SELECT first_careunit, COUNT(*)FROM icustaysGROUP BY first_careunitORDER BY COUNT(*) DESC;


图片

2.3 分组和过滤(GROUP BY 和 HAVING)分组用于将数据按一个或多个列进行分组,然后对每组数据进行聚合操作。HAVING 子句用于对分组后的结果进行过滤。语法格式为:

SELECT column1, COUNT(*)FROM table_nameWHERE conditionGROUP BY column1HAVING COUNT(*) > value;
例如筛选出2018年期间,住院时间超过10天的患者的信息:
SELECT subject_id, COUNT(*) AS num_admissions,SUM(dischtime - admittime) AS total_stayFROM admissionsWHERE EXTRACT(YEAR FROM admittime) = 2018GROUP BY subject_idHAVING SUM(dischtime - admittime) > INTERVAL '10days';


图片

2.4 子查询(Subqueries)子查询是嵌套在其他查询中的查询,可以用于复杂的过滤条件或数据处理,常见子查询有:在SELECT子句中使用子查询,在WHERE子句中使用子查询,在FROM子句中使用子查询,在FROM子句中使用子查询语法格式为:
SELECT column1, column2, ...FROM (SELECT column1, column2, ... FROMtable_name WHEREcondition) AS subquery;
例如基于每种诊断的患者数量对诊断进行排序。
SELECT icd_code, patient_countFROM ( SELECTicd_code, COUNT(DISTINCT subject_id) AS patient_count FROMdiagnoses_icd GROUP BYicd_code) AS diagnosis_countsORDER BY patient_count DESC;


图片
附录:
1.MIMIC数据库文档和资源

MIMIC官网:https://mimic.mit.edu/

2.PostgreSQL官方文档

PostgreSQL Documentation:https://www.postgresql.org/docs/







继续滑动看下一个
四川大学华西生物医学大数据中心
向上滑动看下一个