从MIMIC学习组织自己的数据

相对于SEER数据库(我们得到的是几乎可以直接进行分析的数据),MIMIC 数据库在数据采集后虽然经过了一定的处理,但是保留了数据库原始的样貌,所以我们除了对MIMIC数据进行分析外,还可以从MIMIC数据库中学习怎样设计数据库,怎样组织数据,用在我们构建自己的数据库的过程中。

存储数据的组织形式:星状设计、长表和宽表

  • MIMIC数据库属于关系型数据库,是星状结构(star schema)设计,MIMIC数据库中admission 表格是核心,是中心表格,包含了可供分析的信息,其余表格为附属表格,包含的信息是对主表格信息的注释、分类和描述,可以用来分组、过滤主表格信息。主附表格通过共同的ID将相关得数据联系在一起。
    • 这是我们可以借鉴的信息。我们可以将数据库设计为星状结构,来组织我们的数据。
    • 查询:使用SQL的join命令将分散在多个表格中的相关的数据拼接在一起,其中的一种变化是with临时表形成过渡表格,对某一个表格中的数据进行初步的处理,然后在主查询中对数据进行二次处理(用join语句拼接)。以MIMIC数据库为例,假设我们想要查询每个住院患者的年龄、性别、入院类型、入院诊断和死亡时间(如果有的话)。我们需要从多个表格中获取这些数据,如patients, admissions, icustays等。我们可以用以下SQL语句来实现:
 --创建一个临时表格,计算每个患者的年龄
with age as (selectp.subject_id,p.gender,a.hadm_id,a.admittime,a.dischtime,a.deathtime,a.admission_type,a.diagnosis,-- 计算年龄round((cast(a.admittime as date) - cast(p.dob as date))/365.242, 2) as agefrom patients pinner join admissions aon p.subject_id = a.subject_id
)-- 主查询,使用join语句拼接临时表格和其他表格
selecta.subject_id,a.gender,a.hadm_id,a.admittime,a.dischtime,a.deathtime,a.admission_type,a.diagnosis,-- 处理年龄异常值casewhen a.age > 89 then '>89'else cast(a.age as varchar)end as age,i.first_careunit as icu
from age a
left join icustays i
on a.hadm_id = i.hadm_id
order by a.subject_id, a.hadm_id;
  • 有的表属于纵向结构,代表记录条目的ID列是有重复的。每个表格内的变量的组织也是有主有次,往往有且只有一个变量是核心变量,其他是都是符号关键变量的注释或者解释,这种结构组织的数据,便于录入,但是不便于分析。有些临床数据可以使用这种形式来进行组织。比如MIMIC数据库中有多个长表格,例如:

    • chartevents: 包含患者在ICU期间的各种生理测量和护理记录
    • labevents: 包含患者在住院期间的各种实验室检查结果
    • microbiologyevents: 包含患者在住院期间的各种微生物检查结果
    • outputevents: 包含患者在ICU期间的各种出液记录
    • inputevents_cv: 包含使用CareVue系统的患者在ICU期间的各种入液记录
    • inputevents_mv: 包含使用MetaVision系统的患者在ICU期间的各种入液记录
    • procedureevents_mv: 包含使用MetaVision系统的患者在ICU期间的各种操作记录
    • 如何查询,需要将多条变量变成一条变量,通过取mean,max等。以MIMIC数据库为例,假设我们想要从chartevents表中提取以下信息:每个患者在ICU期间的平均心率(心率的item_id为211);每个患者在ICU期间的平均血压(血压的item_id为220045);每个患者在ICU期间的平均体温(体温的item_id为223761);每个患者的性别(性别在patients表中).我们可以用以下SQL语句来实现:
-- 创建一个临时表格,筛选出心率、血压和体温的数据
with vital_signs as (selectsubject_id,itemid,valuenumfrom charteventswhere itemid in (211, 220045, 223761)
)-- 主查询,使用join语句连接临时表格和patients表,使用aggregate函数计算平均值
selectv.subject_id,p.gender,-- 计算平均心率avg(case when v.itemid = 211 then v.valuenum else null end) as avg_hr,-- 计算平均血压avg(case when v.itemid = 220045 then v.valuenum else null end) as avg_bp,-- 计算平均体温avg(case when v.itemid = 223761 then v.valuenum else null end) as avg_temp
from vital_signs v
inner join patients p
on v.subject_id = p.subject_id
group by v.subject_id, p.gender
order by v.subject_id;
  • 有的表属于宽表,代表记录条目的ID列是唯一的,也是我们组织自己数据的一种形式。从宽表格中提取数据相对简单。MIMIC数据库中的宽表格有以下几个:admissions: 包含了每个患者的入院信息,如入院时间、出院时间、入院类型、死亡标志等;patients: 包含了每个患者的基本信息,如性别、出生日期、死亡日期等;transfers: 包含了每个患者在医院内部的转移信息,如转移时间、转移前后的位置、转移类型等;icustays: 包含了每个患者在重症监护病房的停留信息,如停留时间、停留时长、停留位置等;services: 包含了每个患者在重症监护病房的服务信息,如服务类型、服务开始时间、服务结束时间等;prescriptions: 包含了每个患者在重症监护病房的药物处方信息,如药物名称、药物剂量、药物开始时间、药物结束时间等。以MIMIC数据库为例,假设我们想要从admissions表中提取以下信息:每个患者的入院次数;每个患者的平均住院天数;每个患者的死亡率;我们可以用以下SQL语句来实现:
-- 主查询,使用aggregate函数计算入院次数、平均住院天数和死亡率
selectsubject_id,-- 计算入院次数count(*) as admission_count,-- 计算平均住院天数avg(datediff(day, admittime, dischtime)) as avg_los,-- 计算死亡率sum(case when hospital_expire_flag = 1 then 1 else 0 end) * 1.0 / count(*) as mortality_rate
from admissions
group by subject_id
order by subject_id;

从MIMIC学习组织自己的数据相关推荐

  1. AI:人工智能领域主要方向(技术和应用)、与机器学习/深度学习的关系、数据科学关键技术与知识发现/数据挖掘/统计学/模式识别/神经计算学/数据库的关系(几张图理清之间的暧昧关系)

    AI:人工智能领域主要方向(技术和应用).与机器学习/深度学习的关系.数据科学关键技术与知识发现/数据挖掘/统计学/模式识别/神经计算学/数据库的关系(几张图理清之间的暧昧关系) 目录 人工智能主要领 ...

  2. 《大数据》2015年第3期“网络大数据专题”——基于特征学习的文本大数据内容理解及其发展趋势...

    基于特征学习的文本大数据内容理解及其发展趋势 袁书寒,向 阳,鄂世嘉 (同济大学计算机科学与技术系 上海 201804) 摘要:大数据中蕴含着重要的价值信息,文本大数据作为大数据的重要组成部分,是人类 ...

  3. 【深度学习】【物联网】深度解读:深度学习在IoT大数据和流分析中的应用

    作者|Natalie 编辑|Emily AI 前线导读:在物联网时代,大量的感知器每天都在收集并产生着涉及各个领域的数据.由于商业和生活质量提升方面的诉求,应用物联网(IoT)技术对大数据流进行分析是 ...

  4. 数据可视化 工具_卓越中心和数据可视化工具2020中的组织中的数据聚合

    数据可视化 工具 人工智能 (ARTIFICIAL INTELLIGENCE) Data consumption is rising steadily in 2020 with estimates s ...

  5. 【干货】Entity Embeddings : 利用深度学习训练结构化数据的实体嵌入

    [导读]本文是数据科学家Rutger Ruizendaal撰写的一篇技术博客,文章提出深度学习在非结构数据中有不错的表现,当前通过实体嵌入也可以使之在结构化数据中大放异彩.具体讲解了如何利用深度学习训 ...

  6. 【深度学习】深度解读:深度学习在IoT大数据和流分析中的应用

    来源:网络大数据(ID:raincent_com) 摘要:这篇论文对于使用深度学习来改进IoT领域的数据分析和学习方法进行了详细的综述. 在物联网时代,大量的感知器每天都在收集并产生着涉及各个领域的数 ...

  7. 如何判断你的数据集是否适合使用深度学习模型?如果数据量太小有什么解决办法?

    如何判断你的数据集是否适合使用深度学习模型?如果数据量太小有什么解决办法? deep learning is a data hungry problem 数据集太小,数据样本不足时,深度学习相对其它机 ...

  8. 深度学习遇上稀缺数据就无计可施?这里有几个好办法

    2019-12-07 05:30:39 作者 | Tyler Folkman 编译 | 杨晓凡 对于深度学习而言,在有很多数据的情况下,再复杂的问题也不在话下,然而没有这么多数据呢?本文作者 Tyle ...

  9. python学习音频-Python 音频数据扩充的技巧

    经典的深度学习网络AlexNet使用数据扩充(Data Augmentation)的方式扩大数据集,取得较好的分类效果.在深度学习的图像领域中,通过平移. 翻转.加噪等方法进行数据扩充.但是,在音频( ...

最新文章

  1. 数据包发包工具bittwist
  2. iOS网络编程之同步、异步、请求队列
  3. 01.elasticsearch请求使用的基本语法
  4. Java进阶之光!javaunicode码转字符
  5. Java-进阶:Java-File--IO—1
  6. Eclipse导出可执行JAR文件的方法
  7. Android SDK实例之Snake游戏深入解析(一)
  8. php 图片文件转base64编码格式,php如何将图片转为base64编码格式
  9. 第三,四章 数据库和数据表的(增删改查,重命名等)基本操作
  10. 汉字笔顺口诀_一帮40后理工男编出新型字典,《笔顺码字典》在汉首发
  11. 二、将mysql用作一个简单的计算器
  12. 用maven骨架新建项目以及解决速度慢的问题
  13. 太极 免ROOT使用Xposed模块
  14. 用 Python 写出 Gameboy 模拟器,这位丹麦小哥的大学项目火了!
  15. IEEE文献高级检索
  16. SQLite 使用(针对Android)
  17. 原创整理《考研英语词汇的逻辑》精选词汇-思维导图
  18. Linux系统中errno对应的中文意思 errno.h
  19. CornerNet: Detecting Objects as Paired Keypoints 论文笔记
  20. c# 串口通信 DataReceived 事件触发方法的使用

热门文章

  1. 蔬菜购物网站设计【协同过滤的推荐算法】
  2. sql语句给表添加datetime类型列,并设置默认值
  3. Python爬虫案例:结合Matplotlib分析天气数据
  4. 微软的可疑更新DhMachineSvc.exe
  5. a推b等价于非a或b_探究正方形网格中互相垂直的两条直线(非网格线)
  6. 几个HTML的单标签,HTML常用的几个标签
  7. php 防ddos,网站服务器如何防范CC/ddos攻击?php防攻击代码部署
  8. Python二分查找库bisect
  9. shiro入门8:Shiro前几章复习
  10. C++ STL 体系结构与内核分析 P8-P15(list源码,迭代器设计原则)