mimic数据库中有非常多的指标是需要根据时间计算出来, 跟时间有关的指标都需要通过官方的时间函数进行计算得出
MIMIC数据库常用的几个时间计算函数如下
一、DATETIME_DIFF函数
1.1 实例:获取某个患者在ICU待了多少个小时
如果要以天为单位,datepart参数换成'DAY'
结果保留两位小数
结果保留整数
1.2 实例:统计同等大小入院组的入院人数 (等宽直方图展示)
这段SQL代码如果在python里面怎么写?
我们这里还是直接用sql查出来的,只是把navicat展示换成了python打印出来。
我们简化一下SQL, 只查数据,分组的事情交给python
关注公众号【科研收录】, 回复"分组入院人数sql", 获取SQL代码
回复"直方图", 获取python代码
1.2.1 WIDTH_BUCKET 桶宽度
构造等宽直方图,其中直方图范围被划分为相同大小的区间(桶),并在求值后返回表达式的值所属的桶号。该函数返回一个整数值或 null(如果有任何输入为 null)。
另外,低于低存储桶的值返回0
高于高存储桶的值返回bucket_count +1
返回一个整数值
-
WIDTH_BUCKET 将数据集划分为宽度相等的桶。例如,年龄 = 0–20、20–40、40–60、60–80。这称为等宽直方图。
-
使用 WIDTH_BUCKET 时请注意最小和最大边界值。每个存储桶包含的值等于或大于该存储桶的基值,因此 0-20、20-40 等年龄范围实际上是 0-19.99 和 20-39.999。
-
WIDTH_BUCKET 接受以下数据类型:(FLOAT 和/或 INTEGER)、(TIMESTAMP 和/或 DATE 和/或 TIMESTAMPTZ)或(INTERVAL 和/或 TIME)。
1.2.2 拓展:等宽直方图
直方图(histogram)是数据库中的一种重要的统计信息,可以描述列中的数据分布情况。
Equi-width Histogram(等宽直方图)是将数据最大、小值之间的区间等分为N份,每个桶中最大、小值之差都为整体数据最大、小值之差/N,既所谓“等宽”。我们以 N=20 为例,在按照该曲线随机生成的数据上可以得到如下结果:
Equi-width Histogram 最大的缺陷是在数据频次较高的桶中统计信息不够清晰,比如在桶 [55, 60] 中,我们只知道它的总频次是40,却不知道是55、56、57、58、59各出现了8次,还是55出现了36次而其他值都只有一次。因此,当桶数量远小于列中 distinct value 数量、单个桶中 distinct value 过多且分布不均时,Equi-width Histogram 很有可能做出错误的估算并影响优化结果。
二、DATETIME_SUB函数
2.1 实例:提取患者入ICU24小时内的实验室指标
注意:入ICU前6个小时跟入ICU后24小时内采集的指标都属于24小时内的指标。
-
使用DATETIME_SUB函数把入ICU时间减去6个小时
-
使用DATETIME_ADD函数把入ICU时间加上24个小时
得出了一个时间范围,最后再通过这个时间范围,判断实验室指标的采集时间是不是在这个时间范围内就能提取出入ICU24小时内的指标了