MIMIC数据库数据提取教程-提取时间维度数据
更多關于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_id2. 如何獲取入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数据库数据提取教程-提取时间维度数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中encode函数_pyth
- 下一篇: 数据库挖掘入门