更多关于mimic数据库的知识,欢迎大家关注我的公众号:科研杂录

针对MIMIC数据库的研究,例如小编之前跟大家分享的MIMIC数据库+中介效应=Critical Care(IF: 9分),往往会涉及到一些时间维度的数据,例如:入ICU后第一天测量的实验室指标、入ICU后每天的静脉输液总量、入ICU后第一天与第三天实验室指标(血乳酸/肌酐等)最大值的差值等。这些数据的共同点都是要对指标测量的记录时间与入ICU时间进行计算。那么,在MIMIC数据库中,我们应该如何进行时间计算呢?

官方视图基于基本的PostgreSQL时间计算函数封装了几个函数,我们在提取这类数据时,直接使用封装好后的函数即可。

MIMIC数据库常用的几个时间计算函数如下

  • datetime_diff(endtime,starttime,'HOUR'): 求endtime-starttime,单位是小时

    (单位可以根据需要换成'SECOND','MINUTE','DAY','YEAR')

  • datetime_add(datetime, '1 day'::interval day): 求datetime+1天的时间点,可以根据需要换需要加的时间如datetime_add(datetime, '2 year'::interval year)

  • datetime_sub(datetime, '6 hour'::interval hour): 求datetime前6小时的时间点

下面我们用几个例子来讲解一下这几个函数的应用

1. 如何提取入ICU后第一天测量的血液样本中lymphocytes的最大值、最小值以及平均值

首先我们要提取患者入院后的每次测量的lymphocytes值,可以参考上一篇推文提取实验室指标

提取之后,为了方便后续的查询,我们可以存放在一个物化视图里面

-- 创建名为lymphocytes的视图
create materialized view lymphocytes as
select subject_id,hadm_id,charttime,specimen_id,
max(valuenum) valuenum from
mimic_hosp.labevents
where itemid in (51244,51245)
group by subject_id,hadm_id,charttime,specimen_id

由于labevents表记录的是患者住院过程中所有的测量数据,因此没有stay_id,那么如何知道所测量的数据哪些是患者入ICU后第一天内测量的呢?

MIMIC的官方firstday视图使用labevents与mimic_icu.icustays进行连表,当labevents中的记录时间(charttime)在入ICU时间(intime)的前6至后24小时之间,则认为这些数据是患者入ICU后第一天的测量数据。

因此我们需要计算intime的前6小时与24小时,这时要用到datetime_sub与datetime_add函数。因此获取入ICU后第一天测量的血液样本中lymphocytes的最大值、最小值以及平均值的SQL如下

SELECT t1.stay_id,
min(t2.valuenum) AS lymphocytes_min,
max(t2.valuenum) AS lymphocytes_max,
avg(t2.valuenum) AS lymphocytes_avg
FROM mimic_icu.icustays t1
LEFT JOIN lymphocytes t2
ON (t1.subject_id = t2.subject_id
AND t2.charttime >= datetime_sub(t1.intime, '6 hour'::interval hour)
AND t2.charttime <= datetime_add(t1.intime, '1 day'::interval day))
GROUP BY t1.stay_id

2. 如何获取入ICU后每天静脉输液总量

MIMIC数据库中的mimic_icu.inputevents表记录了患者入ICU后静脉输液数据,我们的思路是,首先计算开始输液时间starttime与intime的差值,如果小于等于1天,我们则认为是第一天输液的数据,同理,如果大于1小于等于2,则认为是第二天输液的数据,最后根据天数分组求和,得出每天静脉输液总量。

用SQL表示,我们可以用datetime_diff计算开始输液时间和入ICU时间的差值,再用ceil函数(SQL自带的函数)向上取整,比如差值是0.4天,那么取整为1,也就是此时输液时间是入ICU的第一天,最后再根据时间分组求和。

select t1.stay_id,ceil(public.datetime_diff(t1.starttime,t2.intime,'DAY')) as date_num,
sum(t1.totalamount)
from mimic_icu.inputevents t1
left join
mimic_icu.icustays t2
on t1.stay_id = t2.stay_id
where t1.totalamount is not null
and t1.totalamount > 0 and t1.starttime > t2.intime
GROUP BY t1.stay_id, date_num;

查询结果如下,我们查出来了入ICU后每一天的静脉输液总量

3. 如何提取入ICU后第一天与第三天血乳酸/肌酐最大值的差值

相信大家看过上面两个例子后,应该也会有思路去提取这个指标。我们可以参考例1提取第一天的最大值,然后修改charttime的时间范围为intime + 2 day至intime + 3 day提取第三天的最大值。有兴趣的小伙伴们可以根据这个思路,仿照上文代码用SQL实现,公众号回复"时间SQL"获取提取入ICU后第一天与第三天血乳酸/肌酐最大值的差值代码。


更多关于临床公共数据库挖掘相关知识可同时关注以下公众号

MIMIC数据库数据提取教程-提取时间维度数据相关推荐

  1. Kettle使用_17 计算器生成时间维度数据

    Kettle使用_17 计算器生成时间维度数据 需求: 通过Kettle的组件自动生成时间维的数据. 解决方法:结合增加序列.计算器.选择字段等组件解决,这里主要是通过计算器里的支持的计算类型来实现的 ...

  2. 大数据系列教程001-初识大数据

    声明:大数据系列教程文章由Java潘老师辛苦原创,免费公开供java爱好者学习.如需转载请获得潘老师授权并保留原文链接,如有疑问或建议,可以联系潘老师: Q:1562691348 V:A1562691 ...

  3. python matplotlib数据可视化教程_matplotlib的Python数据可视化和探索——入门指南

    matplotlib--最受欢迎的Python库,用于数据可视化和探索 我喜欢在Python中使用matplotlib.这是我学会掌握的第一个可视化库,此后一直存在.matplotlib是最受欢迎的用 ...

  4. backtrader利用小时间粒度数据动态合成大时间粒度数据:replay功能

    扫地僧backtrader技术教程获取方法 =========================== 看过我教程的同学都知道,backtrader中可以用重采样resample功能来将小粒度数据合成大粒 ...

  5. MIMIC数据库数据提取教程-提取实验室或生命体征指标

    视图安装好之后,我们利用blood_differential.chemistry.enzyme等视图,配合常用的查询语句,便可以提取患者在每次入院时,整个住院过程中的实验室或者生命体征指标.但是如果我 ...

  6. kettle案例1-计算器生成时间维度数据

     

  7. python大数据使用教程_python时空大数据

    时空大数据至少带有三个信息:用户id,时间,空间 一.由GPS生成OD 1.读取数据 importpandas as pd#读取数据 data = pd.read_csv(r'data-sample/ ...

  8. 计算机二级数据透视图教程,计算机二级语言数据透视表做法

    导语:数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等.所进行的计算与数据跟数据透视表中的排列有关.下面是计算机二级语言数据透视表考点,欢迎参考! 数据透视表 注 ...

  9. mysql数据入库时间的统计_MySQL按时间统计数据的方法总结

    在做数据库的统计时,经常会需要根据年.月.日来统计数据,然后配合echarts来制作可视化效果. 数据库:MySQL 思路 按照时间维度进行统计的前提是需要数据库中有保留时间信息,建议是使用MySQL ...

  10. MIMIC数据库下载的问题

    MIMIC数据库下载的问题 求教做医疗数据的大佬,为什么Physiobank ATM在线显示工具(https://physionet.org/cgi-bin/atm/ATM)不能用了,点击显示404, ...

最新文章

  1. 周志华:“数据、算法、算力”人工智能三要素,在未来要加上“知识”| CCF-GAIR 2020...
  2. linux磁盘管理原理,Linux操作系统中磁盘存储区管理的原理与技巧
  3. 泰拉瑞亚服务器权限文件,泰拉瑞亚云服务器权限
  4. 用C++/CLI搭建C++和C#之间的桥梁(一)—— 简介
  5. SpringMVC REST 风格静态资源访问配置
  6. java 多线程并发 问题_JAVA多线程和并发基础面试问答
  7. Thinkphp3.23 关联模型relation方法不存在解决方法
  8. 【Luogu3932】浮游大陆的68号岛
  9. 4.3串的模式匹配算法(BF算法)
  10. 二维数组各行求和_JS数组reduce()方法详解及高级技巧
  11. jquery-1.10.2_d88366fd.js和jquery-3.1.0.min.js 在用touch事件时候, event.changedTouches[0]报错的问题。...
  12. 《疯狂的程序员》经典语录
  13. 五道口男子计算机职业技术学院,哈哈!双鸭山大学、五道口男子职业技术学校…盘点高校那些“天雷滚滚”的绰号...
  14. java导论pdf下载,人工智能导论 PDF 下载
  15. 使用Spider提取数据(爬取起点中文网)
  16. 基于Lumerical fdtd的超透镜设计(介质天线结构和金属谐振结构)
  17. 如何查看计算机关闭原因,电脑总是自动重启关机怎么样查找原因
  18. 西游记笔记与想法(2)
  19. SMB CIFS DOMIAN
  20. [译]C++中的内存同步模式(memory order)

热门文章

  1. 打开office word 2003 时出现了“出现问题需要关闭,是否发送错误报告”
  2. 信息安全密码学:古典密码
  3. 重新学习Python的第二天_列表及字符串的学习与练习
  4. 网络工程师考试知识点[必考知识点]--必看
  5. pmp是什么意思啊?
  6. 【U3D方向专职猎头】 大厂、高薪职位资源多 非U3D资深勿扰 工作地点北京、深圳、上海、杭州、广州、成都、加微信17512088053
  7. 关于selenium配置Chrome驱动(Windows系统)
  8. 电脑和ubuntu开发板用网线连接的方法
  9. 3. 空实例对象调用静态方法的结果
  10. 博客中 Flex4/Flash mp3音乐播放器实例 含演示地址