何志仁,黃家杰,鄒 川,傅昊陽,劉旭生**
(1.廣東省中醫(yī)院腎內(nèi)科 廣州 51000;2.廣東省中醫(yī)院信息科 廣州 510000;3.廣州中醫(yī)藥大學(xué)第二臨床醫(yī)學(xué)院 廣州 510000)
隨著醫(yī)院臨床業(yè)務(wù)的信息化不斷深入,從掛號、就診、檢查、繳費(fèi)、取藥、治療等各個日常醫(yī)療流程都已經(jīng)出現(xiàn)不同程度的信息化。臨床業(yè)務(wù)系統(tǒng)協(xié)助我們完成臨床工作。大量的臨床數(shù)據(jù)在完成這些流程的過程中產(chǎn)生并保存。這些臨床業(yè)務(wù)流程積累的數(shù)據(jù)是我們進(jìn)行臨床科研的寶貴素材。如何整合這些臨床資料近期成為研究的熱點(diǎn)[1]。
真實(shí)世界研究是近年來興起的新的研究方法[2,3],要求廣泛地收集真實(shí)世界的信息,進(jìn)而對某一種臨床治療的療效進(jìn)行評價[4]。真實(shí)世界研究需要收集患者在診療過程中盡可能詳盡的臨床數(shù)據(jù),因此需要在醫(yī)院各個業(yè)務(wù)系統(tǒng)中對特定患者群的數(shù)據(jù)進(jìn)行收集和處理。由于不同業(yè)務(wù)系統(tǒng)的構(gòu)造邏輯和基礎(chǔ)軟件不同,導(dǎo)致統(tǒng)一提取和整理這些數(shù)據(jù)存在困難。難怪有學(xué)者認(rèn)為,目前由不同開發(fā)商、不同臨床科室、不同臨床需求開發(fā)出來的臨床業(yè)務(wù)系統(tǒng)組合而成的醫(yī)院信息化構(gòu)架,正在遭遇“信息孤島”的尷尬[5]。
為解決上述問題,我們在現(xiàn)有的臨床業(yè)務(wù)系統(tǒng)的基礎(chǔ)上,構(gòu)建一個用于??婆R床科研的數(shù)據(jù)倉庫。整合院內(nèi)不同業(yè)務(wù)系統(tǒng)的病人身份信息,做到根據(jù)每個病人的唯一編碼,就可以查詢院內(nèi)各個業(yè)務(wù)系統(tǒng)中該病人的數(shù)據(jù),同時根據(jù)業(yè)務(wù)系統(tǒng)中某一個數(shù)據(jù)點(diǎn),可反向查詢其所屬的病人信息,進(jìn)而實(shí)現(xiàn)對整個數(shù)據(jù)倉庫資料的篩選。在此數(shù)據(jù)倉庫的基礎(chǔ)上加入中醫(yī)特色,構(gòu)建有中醫(yī)藥特色的臨床科研數(shù)據(jù)倉庫。實(shí)現(xiàn)某一個病人的信息在整個醫(yī)院各個系統(tǒng)中互聯(lián)互通。
數(shù)據(jù)倉庫[1]為支持決策管理建立的,是面向主題、集成的、穩(wěn)定的、隨時間變化的數(shù)據(jù)集合。通過針對國內(nèi)外對醫(yī)療信息數(shù)據(jù)倉庫的調(diào)研表明,目前多數(shù)文獻(xiàn)報(bào)道的數(shù)據(jù)倉庫涉及到的疾病一般局限在糖尿病、腫瘤、精神疾病、胃病、慢性腎小球腎炎等常見疾病,缺乏對整個科室或者整個醫(yī)院病人數(shù)據(jù)整合的數(shù)據(jù)倉庫[6]。中醫(yī)界也缺乏在西醫(yī)臨床數(shù)據(jù)的基礎(chǔ)上結(jié)合中醫(yī)辨證、方藥因素的臨床數(shù)據(jù)庫。
圖1 數(shù)據(jù)倉庫的總體設(shè)計(jì)概覽
Python語言是一個結(jié)合解釋性、編譯性、互動性和面向?qū)ο蟮哪_本語言[7]。Python語言的Django框架是目前流行的整合數(shù)據(jù)庫和Web交互的程序設(shè)計(jì)語言框架[8],被廣泛應(yīng)用于各種輕量級的數(shù)據(jù)管理平臺的建設(shè)。MySQL是一款開源的關(guān)系型數(shù)據(jù)庫系統(tǒng),目前被廣泛使用的關(guān)系型數(shù)據(jù)庫[9]。
我們以Python+Django+MySQL為框架在院內(nèi)構(gòu)建一個這樣的數(shù)據(jù)倉庫,收集從2008年至今在我院腎內(nèi)科住院病人的相關(guān)臨床數(shù)據(jù)。為目前科內(nèi)多個臨床研究提供大量數(shù)據(jù)支持。下面我們試圖描述數(shù)據(jù)倉庫中的數(shù)據(jù)結(jié)構(gòu),說明其構(gòu)造過程并展示其應(yīng)用成果。整個數(shù)據(jù)庫的構(gòu)建以及數(shù)據(jù)提取的過程都是通過Python語言編寫的代碼完成,讀者如有興趣了解進(jìn)一步的技術(shù)細(xì)節(jié)可以聯(lián)系作者查看源代碼。
利用Python+Django+MySQL構(gòu)造一個獨(dú)立于醫(yī)院各種業(yè)務(wù)系統(tǒng)的統(tǒng)一的臨床數(shù)據(jù)倉庫,運(yùn)行在醫(yī)院內(nèi)部網(wǎng)絡(luò)的獨(dú)立服務(wù)器上,實(shí)現(xiàn)一下三大功能:(1)從各個業(yè)務(wù)系統(tǒng)提取的數(shù)據(jù)接口提取數(shù)據(jù);(2)把所提取的數(shù)據(jù)按照預(yù)設(shè)模型進(jìn)行整理保存;(3)按照臨床科研的需求對數(shù)據(jù)庫進(jìn)行檢索并輸出所需要的數(shù)據(jù)。
基于Django構(gòu)造與醫(yī)院業(yè)務(wù)系統(tǒng)相匹配的數(shù)據(jù)模型。我院同時存在多個臨床業(yè)務(wù)系統(tǒng)(住院病歷、門診病歷、實(shí)驗(yàn)室檢查、影像學(xué)檢查、病理檢查系統(tǒng)),根據(jù)各個業(yè)務(wù)系統(tǒng)可以提供的數(shù)據(jù)接口、臨床研究可能需要的查詢邏輯,對各個數(shù)據(jù)表的結(jié)構(gòu)進(jìn)行設(shè)計(jì)。大部分的數(shù)據(jù)表結(jié)構(gòu)直接模仿對應(yīng)業(yè)務(wù)系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)即可??紤]中醫(yī)辨證處方、手術(shù)、有創(chuàng)操作可能是臨床研究的關(guān)鍵節(jié)點(diǎn)。因此我們對住院病歷接口輸出的xml文件進(jìn)行了文本分析,提取了其中中醫(yī)辨證處方記錄、手術(shù)記錄、有創(chuàng)操作記錄單獨(dú)構(gòu)造了相應(yīng)的數(shù)據(jù)表。
結(jié)合中醫(yī)院的特點(diǎn),在住院情況數(shù)據(jù)表中專門加入了中醫(yī)辨證以及中醫(yī)診斷部分,以便記錄,病人住院的中醫(yī)情況。專門設(shè)置住院中醫(yī)辨證處方數(shù)據(jù)表記錄住院期間中藥湯劑使用情況。
表1 臨床科研數(shù)據(jù)平臺數(shù)據(jù)庫具體模型設(shè)計(jì)
圖2 各個數(shù)據(jù)表之間的鏈接互查關(guān)系
上述的各種數(shù)據(jù)表之間,通過外鍵將各個數(shù)據(jù)庫,與病人總索引數(shù)據(jù)表、住院情況數(shù)據(jù)表、門診病歷數(shù)據(jù)表相關(guān)聯(lián)。各個數(shù)據(jù)表之間的關(guān)聯(lián)如圖。
住院病歷系統(tǒng)的接口提供住院病歷的xml文檔。其中包含入院記錄、首次病程記錄、中醫(yī)辨證處方記錄、病程記錄、手術(shù)記錄、有創(chuàng)操作記錄、出院記錄、死亡記錄等常規(guī)的病歷內(nèi)容信息。通過Python的xml庫提取這些記錄的內(nèi)容。通過簡單的文本匹配可以提取病人的中醫(yī)辨證依據(jù),中醫(yī)診斷,中醫(yī)證候的記錄。具體的提取字段,可以參見表1中提到的相關(guān)項(xiàng)目。
實(shí)驗(yàn)室檢查系統(tǒng)以及門診病歷系統(tǒng)接口為Web Service形式,提供病人的門診號、住院號以及設(shè)定日期范圍后即可返回該病人在制定時間內(nèi)的實(shí)驗(yàn)室檢查結(jié)果以及門診病歷信息。利用Python的suds庫讀取相應(yīng)的Web Service接口。通過文本匹配可以提取門診病歷信息中的中醫(yī)診斷、中藥處方等細(xì)分內(nèi)容也可以提取實(shí)驗(yàn)室檢查中的項(xiàng)目名稱、結(jié)果參考范圍等內(nèi)容。
影像檢查系統(tǒng)以及病理系統(tǒng)通過HTML文本分析提取影像檢查結(jié)果數(shù)據(jù)以及病理數(shù)據(jù)。利用urllib、HTMLParser、xml、re庫可以通過網(wǎng)頁爬蟲的方式讀取網(wǎng)頁報(bào)告形式影像學(xué)及病理報(bào)告。
考慮到信息安全,以及日常業(yè)務(wù)系統(tǒng)的負(fù)載,我們在院內(nèi)設(shè)立了獨(dú)立的數(shù)據(jù)倉庫服務(wù)器,在臨床業(yè)務(wù)系統(tǒng)負(fù)載較輕的時候分批從各個業(yè)務(wù)系統(tǒng)的數(shù)據(jù)接口讀取數(shù)據(jù)。由于各個業(yè)務(wù)系統(tǒng)的數(shù)據(jù)接口不同,讀取接口數(shù)據(jù)的時候需要使用的軟件工具不盡相同,這個時候Python的靈活性就能解決大量的問題。Python有現(xiàn)成的各種讀取接口的工具,可以方便地實(shí)現(xiàn)與各個業(yè)務(wù)系統(tǒng)接口的對接。數(shù)據(jù)的轉(zhuǎn)換,由于不同接口的數(shù)據(jù)格式不同,同一個項(xiàng)目可能有多種表達(dá)方法,如性別,某些數(shù)據(jù)接口直接標(biāo)識男、女,某些數(shù)據(jù)接口則標(biāo)識M、F。我們自己構(gòu)建了一個轉(zhuǎn)義字典。統(tǒng)一這類數(shù)據(jù)標(biāo)識的差異,在寫入數(shù)據(jù)倉庫的時候使用本倉庫統(tǒng)一的標(biāo)識。抽取過程中建立數(shù)據(jù)提取日志,防止數(shù)據(jù)的重復(fù)提取。
對整個數(shù)據(jù)倉庫的資料進(jìn)行檢索耗費(fèi)大量的計(jì)算資源,因此在業(yè)務(wù)系統(tǒng)滿足日常工作的情況下,難以應(yīng)付復(fù)雜的科研數(shù)據(jù)查詢工作。由于我們的數(shù)據(jù)中心與臨床業(yè)務(wù)系統(tǒng)是相互獨(dú)立的,因此我們的大規(guī)模檢索并不影響醫(yī)院日常業(yè)務(wù)的開展。我們的數(shù)據(jù)查詢工作主要包括篩選與提取兩個步驟。
所謂的篩選,就是設(shè)定特定的條件,選擇數(shù)據(jù)庫中的病人。由于數(shù)據(jù)庫中各個數(shù)據(jù)表都可以通過病人主索引表進(jìn)行連接。所以前面論述的表1中提到的各種數(shù)據(jù)表字段,都可以作為我們篩選的條件。例如我們可以根據(jù)病歷中記載的中醫(yī)證候、舌脈、過敏史、主訴等特征對病人進(jìn)行篩選,也可以根據(jù)住院或者門診檢查中特定的檢查結(jié)果的范圍進(jìn)行篩選,也可以根據(jù)手術(shù)、有創(chuàng)操作的種類和時間進(jìn)行篩選,也可以根據(jù)中醫(yī)辨證處方中特定的用藥組合進(jìn)行篩選。上述的多種維度可以同時或者先后根據(jù)邏輯關(guān)系對數(shù)據(jù)庫中的病人進(jìn)行篩選,最后得出一個病人名單。
數(shù)據(jù)提取就是按照臨床研究的需求,提取上述名單病人的特定數(shù)據(jù)表字段。同樣的原則上前面論述的表1總的各種字段都可以作為數(shù)據(jù)提取項(xiàng)目。例如某些實(shí)驗(yàn)室檢查結(jié)果,某些影像學(xué)檢查結(jié)果,特定的手術(shù)、特定原因的住院等臨床事件,例如特定中藥處方或者藥對的使用??梢岳肞yhton的數(shù)據(jù)處理能力根據(jù)科研需求輸出CSV、Excel、SPSS、SASS等的數(shù)據(jù)文件格式,以便進(jìn)一步進(jìn)行數(shù)據(jù)分析。
數(shù)據(jù)提取的過程通過Python腳本完成,截止2016年12月31日我們建成的數(shù)據(jù)庫文件達(dá)2.3 GB。各個數(shù)據(jù)模型的記錄情況如下表:
數(shù)據(jù)提取過程需要通過編寫Python代碼完成。篩選超過30 000人的住院以及門診記錄和其相關(guān)的實(shí)驗(yàn)室以及影像學(xué)檢查結(jié)果。從編寫代碼到執(zhí)行代碼輸出結(jié)果的平均時間可以縮短到1天,數(shù)據(jù)篩選和提取的效率有巨大的提高。具體的數(shù)據(jù)篩選以及提取流程如下:
慢性腎臟病3-4期合并高尿酸血癥住院患者的中醫(yī)癥候、舌脈特點(diǎn)以及血脂情況。
首先對住院情況數(shù)據(jù)表進(jìn)行篩選,找到出院診斷中同時存在慢性腎臟病3-4期以及高尿酸血癥的病人,把對應(yīng)的住院情況記錄列出,生成符合上述條件的病人列表。
然后根據(jù)其住院情況記錄讀取相關(guān)的中醫(yī)證候及舌脈情況。由于住院情況記錄與實(shí)驗(yàn)室檢查結(jié)果有關(guān)聯(lián),因此我們可以提取每一次住院情況對應(yīng)的血脂情況的檢驗(yàn)結(jié)果,將需要提取的數(shù)據(jù)就整理為一個數(shù)據(jù)表,進(jìn)而進(jìn)行數(shù)據(jù)分析。
本數(shù)據(jù)倉庫建立在我院多年來信息化的數(shù)據(jù)積累的基礎(chǔ)上[10],根據(jù)我們醫(yī)院的實(shí)際情況進(jìn)行模型設(shè)計(jì)和構(gòu)建。由于各個醫(yī)院的具體情況不盡相同,因此本系統(tǒng)的接口部分的可推廣性不足。然而從各個系統(tǒng)中提取出數(shù)據(jù),匯總后構(gòu)成的新的數(shù)據(jù)模型(圖2),經(jīng)過我們的實(shí)踐證明是一種行之有效的解決方案。可以高效地整合醫(yī)院各個子系統(tǒng)的數(shù)據(jù)到一個統(tǒng)一平臺進(jìn)行查詢和管理。在建設(shè)數(shù)據(jù)模型的過程中,我們發(fā)現(xiàn)統(tǒng)一的病人索引是我們整合各子系統(tǒng)數(shù)據(jù)的重要依據(jù)。在醫(yī)院各個子系統(tǒng)設(shè)計(jì)時就需要考慮病人身份識別這個問題[11]。目前比較常用的處理方法就是通過病人的身份證號碼作為鑒別身份的唯一標(biāo)識。在門診、住院、隨訪等分系統(tǒng)中均需要記錄病人的身份信息。
本系統(tǒng)整合了醫(yī)院中各個主要的臨床業(yè)務(wù)系統(tǒng)的數(shù)據(jù)。目前國內(nèi)的中醫(yī)腎臟病臨床數(shù)據(jù)庫的建設(shè)多以文獻(xiàn)數(shù)據(jù)庫[12-14]或?qū)2?shù)據(jù)庫為主[15]。我們的數(shù)據(jù)庫收集了從2008年至今在我院腎內(nèi)科住院的所有住院病人的門診、住院、檢驗(yàn)、影像學(xué)檢查數(shù)據(jù),并記錄了病人的各種臨床事件。由于所有數(shù)據(jù)在一個平臺上,可以對大量的病人進(jìn)行多維度的檢索和篩選,極大地提高了真實(shí)世界回顧性研究數(shù)據(jù)檢索和收集的效率。結(jié)合我們中醫(yī)院的特點(diǎn),在西醫(yī)相關(guān)業(yè)務(wù)數(shù)據(jù)的基礎(chǔ)上增加了相應(yīng)的中醫(yī)模塊,對中醫(yī)的辨證、用藥等客觀的中醫(yī)臨床實(shí)踐進(jìn)行詳細(xì)的記錄。使得中醫(yī)藥的辨證和用藥有據(jù)可查。
本系統(tǒng)的特點(diǎn)就是數(shù)據(jù)直接來源于臨床業(yè)務(wù)系統(tǒng),無手工錄入過程,盡可能挖掘現(xiàn)有數(shù)據(jù)的潛力,并不增加臨床工作的負(fù)擔(dān),且數(shù)據(jù)的準(zhǔn)確性得到保證,數(shù)據(jù)提取的效率得到有效提高。這樣做可以在短時間內(nèi)建立一個規(guī)模龐大的數(shù)據(jù)庫。且臨床資料隨著日常的臨床工作不斷積累的,數(shù)據(jù)庫的規(guī)??梢圆粩鄶U(kuò)大,然后進(jìn)行更大規(guī)模的研究。但是由于數(shù)據(jù)庫的回顧特性以及未加入研究設(shè)計(jì),不可避免的存在回顧性研究的種種問題[16]。在設(shè)計(jì)研究和定義篩選以及提取規(guī)則的時候需要認(rèn)真考慮這些這些數(shù)據(jù)的真實(shí)性。
表2 數(shù)據(jù)倉庫內(nèi)各個數(shù)據(jù)表的記錄條數(shù)
本系統(tǒng)存在以下不足。由于國內(nèi)目前政策情況的局限,目前這個數(shù)據(jù)庫并沒有能夠整合中西醫(yī)醫(yī)囑數(shù)據(jù),因此對病人的干預(yù)措施以及用藥劑量方面數(shù)據(jù)整理無法進(jìn)行。受限于國內(nèi)病人流動性較大的特點(diǎn),一家醫(yī)院難以收集病人的所有臨床事件。我們認(rèn)為規(guī)范、規(guī)律的隨訪數(shù)據(jù)依然是臨床研究必不可少的素材,全面系統(tǒng)的隨訪系統(tǒng)是臨床研究必不可少的素材。目前我院也在開發(fā)相應(yīng)的病人隨訪系統(tǒng)。通過對隨訪系統(tǒng)中數(shù)據(jù)整合,對臨床數(shù)據(jù)記性跟進(jìn)一步的整合。
本數(shù)據(jù)系統(tǒng)基于Python語言設(shè)計(jì),臨床研究者需要從數(shù)據(jù)庫中調(diào)閱數(shù)據(jù),需要編寫Python語言代碼來實(shí)現(xiàn)提取邏輯和定制提取的項(xiàng)目,對于臨床研究者來說有一定的難度。開發(fā)交互式檢索以及數(shù)據(jù)提取界面是我們下一步開發(fā)的方向。
本數(shù)據(jù)庫整合的依然是自然語言記錄的醫(yī)療記錄,雖然實(shí)驗(yàn)室檢查、影像學(xué)檢查、病理學(xué)檢查的結(jié)果實(shí)現(xiàn)了相當(dāng)部分的結(jié)構(gòu)化。然而病歷資料的數(shù)據(jù)粒度還非常低,對病歷資料的分析需要使用大量的自然語言處理技術(shù),對普通的研究者有一定的門檻。而且如何利用自然語言處理技術(shù)分析病歷記錄恐怕是今后研究的一個重要方向。
1 吳瓊.以臨床數(shù)據(jù)倉庫為核心的醫(yī)院大數(shù)據(jù)平臺構(gòu)建.電腦知識與技術(shù),2017,13(10):6-7.
2 Dormer L.How can real-world evidence be used in practice to demonstrate drug value and improve patient care.J Comp Eff Res,2017,6(3):183-184.
3 Sherman R E,Anderson S A,Dal Pan G J,et al.Real-World Evidence-What Is It and What Can It Tell Us.N Engl J Med,2016,375(23):2293-2297.
4 黃卓山,羅艷婷,劉金來.真實(shí)世界研究的方法與實(shí)踐.循證醫(yī)學(xué),2014,14(6):364-368.
5 董方杰,蒲立新,曲建明,等.醫(yī)療信息院內(nèi)交互與區(qū)域共享的架構(gòu)及其技術(shù)研究.生物醫(yī)學(xué)工程學(xué)雜志,2014,(4):788-792.
6 秦慎強(qiáng).面向中醫(yī)證候的慢性腎小球腎炎數(shù)據(jù)倉庫的研究.成都:電子科技大學(xué)碩士學(xué)位論文:2016.
7 高昂.Django及國內(nèi)Python社區(qū)進(jìn)展.程序員,2009(9):23.
8 肖旻,陳行.基于Python語言編程特點(diǎn)及應(yīng)用之探討.電腦知識與技術(shù),2014(34):8177-8178.
9 胡敏.Web系統(tǒng)下提高M(jìn)ySQL數(shù)據(jù)庫安全性的研究與實(shí)現(xiàn).北京:北京郵電大學(xué)碩士學(xué)位論文,2015.
10 易傳亮,黃家杰,徐飛龍,等.中醫(yī)臨床科研共享平臺建設(shè).中國信息界(e醫(yī)療),2014(2):36-37.
11 李征.數(shù)據(jù)倉庫統(tǒng)一身份認(rèn)證系統(tǒng)的研究與實(shí)現(xiàn).北京:北京郵電大學(xué)碩士學(xué)位論文,2006.
12 孔麗婭,柴可夫,牛永寧.數(shù)據(jù)挖掘方法在中醫(yī)證候?qū)W中的應(yīng)用.浙江中醫(yī)藥大學(xué)學(xué)報(bào),2014,38(6):825-828.
13 魏立良.現(xiàn)代名中醫(yī)尿血醫(yī)案的數(shù)據(jù)挖掘研究.廣州:廣州中醫(yī)藥大學(xué)碩士學(xué)位論文,2014.
14 李鑫頡,賈振華,吳以嶺.數(shù)據(jù)挖掘方法在中醫(yī)醫(yī)案研究中的現(xiàn)狀分析.中國中醫(yī)基礎(chǔ)醫(yī)學(xué)雜志,2012(1):117-118.
15 李開龍,張建國.腎臟病臨床數(shù)據(jù)庫簡介.中國中西醫(yī)結(jié)合腎病雜志,2003,4(3):180-182.
16 王祥配,宋毅鵬,何麗云,等.醫(yī)院病歷信息數(shù)據(jù)化的路徑與方法研究.世界科學(xué)技術(shù)-中醫(yī)藥現(xiàn)代化,2015(2):389-393.