前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MIMIC数据提取教程 - 官方提供的时间函数(一)

MIMIC数据提取教程 - 官方提供的时间函数(一)

原创
作者头像
科研收录
发布2023-12-12 14:11:08
3070
发布2023-12-12 14:11:08
举报
文章被收录于专栏:mimic数据库mimic数据库
图片
图片

mimic数据库中有非常多的指标是需要根据时间计算出来, 跟时间有关的指标都需要通过官方的时间函数进行计算得出

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

 一、DATETIME_DIFF函数

图片
图片
图片
图片
图片
图片

1.1 实例:获取某个患者在ICU待了多少个小时

图片
图片

如果要以天为单位,datepart参数换成'DAY'

图片
图片

结果保留两位小数

图片
图片

结果保留整数

图片
图片

1.2 实例:统计同等大小入院组的入院人数 (等宽直方图展示)

图片
图片
图片
图片
代码语言:javascript
复制
with base1 as (SELECT        mimiciv_derived.datetime_diff (P.dod, ad.admittime,  'YEAR' ) AS age FROM        mimiciv_hosp.admissions ad        INNER JOIN mimiciv_hosp.patients P ON ad.subject_id = P.subject_id), base2 as (
                SELECT age, WIDTH_BUCKET ( age,0, 100, 100 ) AS bucket FROM base1)        
SELECT bucket  , count(*), round ( min ( age ), 1), round ( max ( age ), 1 )from base2 GROUP BY  bucket ORDER BY bucket

这段SQL代码如果在python里面怎么写?

代码语言:javascript
复制
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport psycopg2
schema_name = 'mimic'# 连接到MIMIC-IV数据库conn = psycopg2.connect(dbname='mimiciv', user='postgres', password='mimic',                        host='10.234.211.51', port=5432)query_schema = 'SET search_path to ' + schema_name + ';'


# # # 设置查询语句# # # 我们选择从mimiciv_hosp.admissions表中提取hadm_id等于10006的行。# # # 在写sql代码时,最好先执行“set search_path to mimiciv" 随后的所有操作均不需要指明表格的位置;否则,任何操作都应该在表格名前面加前缀mimiciv# query1 = query_schema + 'SELECT subject_id, hadm_id, admittime, dischtime, admission_type FROM  mimiciv_hosp.admissions'## # 运行查询并将结果分配给变量# admissions_pd = pd.read_sql_query(query1,conn)# admissions_pd.head()# print(admissions_pd.head())
query = """with base1 as (SELECT        mimiciv_derived.datetime_diff (P.dod, ad.admittime,  'YEAR' ) AS age FROM        mimiciv_hosp.admissions ad        INNER JOIN mimiciv_hosp.patients P ON ad.subject_id = P.subject_id), base2 as (
                SELECT age, WIDTH_BUCKET ( age,0, 100, 100 ) AS bucket FROM base1)        
SELECT bucket  , count(*), round ( min ( age ), 1), round ( max ( age ), 1 )from base2 GROUP BY  bucket ORDER BY bucket;"""
ce = pd.read_sql_query(query,conn)
# OPTION 2: load chartevents from a CSV file# ce = pd.read_csv('data/example_chartevents.csv', index_col='HOURSSINCEADMISSION')print(ce.head(20))
图片
图片

我们这里还是直接用sql查出来的,只是把navicat展示换成了python打印出来。

我们简化一下SQL, 只查数据,分组的事情交给python

图片
图片
图片
图片

关注公众号【科研收录】, 回复"分组入院人数sql", 获取SQL代码

回复"直方图", 获取python代码

1.2.1 WIDTH_BUCKET 桶宽度

构造等宽直方图,其中直方图范围被划分为相同大小的区间(桶),并在求值后返回表达式的值所属的桶号。该函数返回一个整数值或 null(如果有任何输入为 null)。

另外,低于低存储桶的值返回0

高于高存储桶的值返回bucket_count +1

返回一个整数值

代码语言:javascript
复制
WIDTH_BUCKET( <expr> , <min_value> , <max_value> , <num_buckets/bins> ) -- expr : 创建直方图的表达式。此表达式的计算结果必须为数值或日期时间值,或者可以隐式转换为数值或日期时间值的值。如果表达式的计算结果为 null,则表达式返回 null。-- min_value 最小组数: 解析为存储桶 1 的下边界的表达式。还必须计算为数值或日期时间值,并且不能计算为 null。-- max_value 最大历史记录: 解析为存储桶bucket_count 的上限的表达式。还必须计算为数字或日期时间值,并且不能计算为 null。-- num_buckets/bins 桶数:  解析为常量的表达式,指示存储桶的数量。该表达式的计算结果始终为正 INTEGER。
  • 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小时内的指标了

图片
图片

三、DATETIME_ADD

图片
图片
图片
图片

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  •  一、DATETIME_DIFF函数
    • 1.1 实例:获取某个患者在ICU待了多少个小时
      • 1.2 实例:统计同等大小入院组的入院人数 (等宽直方图展示)
        • 1.2.1 WIDTH_BUCKET 桶宽度
        • 1.2.2 拓展:等宽直方图
    • 二、DATETIME_SUB函数
    • 三、DATETIME_ADD
    相关产品与服务
    AI 临床助手
    腾讯基于大数据、自然语言理解、病历结构化等AI技术,打造集“辅助决策、合理用药、前置审方、处方点评、用药助手”于一体的智慧解决方案,为单体医院、区域医联体、基层医疗机构等提供智慧服务支持。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档