本發(fā)明屬于數(shù)據(jù)集成技術(shù)領(lǐng)域,特別涉及實現(xiàn)了一個自動化程度高、適應(yīng)能力強的tranSMART臨床數(shù)據(jù)集成工具。
背景技術(shù):
近年來隨著精準(zhǔn)醫(yī)療概念的提出與相關(guān)行業(yè)的蓬勃發(fā)展,在醫(yī)療過程中產(chǎn)生的臨床數(shù)據(jù),基因數(shù)據(jù)等被逐漸積累,而有效地分析這些數(shù)據(jù)里蘊藏的醫(yī)學(xué)信息在醫(yī)療領(lǐng)域開始顯得越來越重要。
tranSMART(轉(zhuǎn)化醫(yī)學(xué)分析平臺)最初是給制藥公司和藥物研發(fā)結(jié)構(gòu)提供一個數(shù)據(jù)協(xié)同管理平臺。隨后,tranSMART逐步被轉(zhuǎn)為開源軟件。并由tranSMART Foundation組織來接手進(jìn)行持續(xù)地開發(fā)和維護(hù)。這個平臺是基于I2B2臨床醫(yī)療數(shù)據(jù)倉庫開發(fā)的,因此tranSMART可以對結(jié)構(gòu)化的臨床數(shù)據(jù),如人口學(xué)信息和臨床病理數(shù)據(jù)等進(jìn)行數(shù)據(jù)管理。
tranSMART可以讓不同的群體用同一個數(shù)據(jù)倉庫來整合內(nèi)部和外部的數(shù)據(jù)資源。并且提供了系統(tǒng)級工具來檢索,查看和分析倉庫里的數(shù)據(jù)。tranSMART包含下面多個特色功能:
搜索工能。通過使用Solr搜索服務(wù)可以讓研究者像使用谷歌、百度這樣的搜索工具來搜索感興趣的資源信息,搜索的功能包括搜索一個獨特的種類,例如疾病、基因或者臨床路徑等其他種類。建立復(fù)雜的搜索條件,可以自定義要搜索的種類的復(fù)雜條件,并可以保存起來。
數(shù)據(jù)集管理功能。以I2B2設(shè)計為基礎(chǔ)??梢灾С肿约憾x研究的子集。可以定義條件,比較兩個子集的差異。數(shù)據(jù)管理器的特色功能包括保存用于構(gòu)建子集的條件??梢灾С钟枚喾N分析算法來對數(shù)據(jù)分析。比如可以用主成分分析來減少數(shù)據(jù)集的維數(shù)。
基因印記向?qū)Чδ堋ranSMART提供一個向?qū)磔o助創(chuàng)建和定義基因印記和基因列表。保存的標(biāo)記的基因可以用來在數(shù)據(jù)集管理器的分析功能。基因標(biāo)記向?qū)У墓δ馨?,私有的基因印記,這樣只有自己可以訪問私有的基因,同時也可以將基因改為公有讓所有用戶都可以用??梢钥寺∫粋€存在的基因印記。
tranSMART基于Groovy語言開發(fā),Groovy可以理解成為一種可以運行在Jvm上的腳本語言。它和Java語言之間可以相互調(diào)用并且很好地融合在一起。同時它又具有腳本語言方便靈活的特性。尤其是其中的閉包概念,可以使程序簡短并且易讀性不會減弱。Groovy語言的許多特性可以大大減少代碼量,尤其重要的是Groovy中的閉包概念,在用它實現(xiàn)的項目中,閉包被廣泛應(yīng)用。Groovy語言允許省略掉括號,省略掉分號。由此可以看到使用Groovy語言可以在很大程度上提高編程的效率。同時Groovy語言可以無縫調(diào)用Java已經(jīng)有的一些框架以及一些工具包,事實上由于某些特性它和Spring框架結(jié)合的非常好。
tranSMART的設(shè)計是典型的N-Tier架構(gòu),分為數(shù)據(jù)處理層、業(yè)務(wù)處理層和展示層。tranSMART所使用的Grails框架,遵循一種約定大于配置的原則,只需要簡單的幾行配置就可以區(qū)分開發(fā)、生產(chǎn)、測試幾種不同環(huán)境,并可以在啟動系統(tǒng)時指定是哪種環(huán)境,有一些經(jīng)過驗證的良好預(yù)先設(shè)定,并提供大量的API,使開發(fā)可以很順暢不需要過度關(guān)注已經(jīng)很成熟的技術(shù)細(xì)節(jié)。同時依靠Grails產(chǎn)生的Web應(yīng)用可以兼容如今的J2EE容器。Grails最為人稱道的一點是它有豐富的插件,有一個專門的插件社區(qū),并且這個社區(qū)一直在壯大。此外Grails還有對ORM以及NoSQL的支持。
tranSMART現(xiàn)有的數(shù)據(jù)集成技術(shù)有幾種不同的實現(xiàn)方式。包括基于Kettle的tranSMART Data工具、tranSMART ICE工具以及腳本方式,還有使用存儲過程的方式。這些工具在設(shè)計時只考慮了一次性導(dǎo)入數(shù)據(jù)的情況,而不能滿足增量式地添加數(shù)據(jù)的需求,即滿足數(shù)據(jù)的可更新性。而且二次開發(fā)的難度較大。最終選擇了可以提供數(shù)據(jù)更新支持且基于Spring Batch開發(fā)的tranSMART Batch項目為基礎(chǔ),用于構(gòu)建自主數(shù)據(jù)集成工具。
tranSMART Batch是以Spring Batch為框架的數(shù)據(jù)導(dǎo)入程序??梢詫?dǎo)入不同類型的程序。如適用于臨時研究的一次性導(dǎo)入的臨床科研數(shù)據(jù)、基因數(shù)據(jù)、維度數(shù)據(jù)、I2B2數(shù)據(jù)等等。其中導(dǎo)入I2B2形式的數(shù)據(jù),是可以滿足數(shù)據(jù)的更新,以及解決數(shù)據(jù)向維度表分散的問題。
tranSMART Batch的實現(xiàn)是采用了Groovy語言。在自動化工具構(gòu)建方面,tranSMART Batch使用了基于Ant和Maven概念的自動化構(gòu)建工具Gradle。Gradle基于Groovy的特定領(lǐng)域語言(DSL)來聲明項目設(shè)置。相對于Maven和Ant,Gradle拋棄了Ant和Maven的繁瑣的XML配置。其他的Gradle的特性還有很多。比如將工程依賴的地位放得高。并支持局部構(gòu)建。此外Gradle支持多方式的依賴構(gòu)建。包括Maven倉庫、Nexus私服、Ivy倉庫以及本地文件系統(tǒng)的jars或者dirs。使用Gradle管理項目可以達(dá)到事半功倍的效果。在配置好數(shù)據(jù)庫的連接信息以后,需要執(zhí)行命令./GradlewSetupSchema來創(chuàng)建Spring Batch需要的數(shù)據(jù)庫中的Schema,用于記錄批處理的信息,以便回滾、記錄等操作。tranSMART Batch是通過打好的jar包來執(zhí)行導(dǎo)入數(shù)據(jù)的。通過執(zhí)行定義好的capsule任務(wù)??梢缘玫揭粋€用于導(dǎo)入數(shù)據(jù)的jar包。接下來需要配置數(shù)據(jù)庫連接的配置信息。是一些常規(guī)的jdbc配置。包括所使用的driver、服務(wù)的位置、用戶名、密碼等。
使用tranSMARTBatch集成技術(shù)的數(shù)據(jù)導(dǎo)入方法說明如下:
步驟一:準(zhǔn)備文件。準(zhǔn)備的文件包括:
11)數(shù)據(jù)文件:即要導(dǎo)入到tranSMART(轉(zhuǎn)化醫(yī)學(xué)分析平臺,以下稱為平臺)的數(shù)據(jù)文件,文件中第一行是表頭行,用于對數(shù)據(jù)說明。從第二行開始,每一行代表一條數(shù)據(jù),行中每個具體數(shù)據(jù)以制表符(’/t’)分隔。
12)列映射文件:列映射文件有固定的六列內(nèi)容。分別為數(shù)據(jù)文件的文件名、數(shù)據(jù)列號、這個數(shù)據(jù)是否可以是空值、數(shù)據(jù)變量、數(shù)據(jù)類型(數(shù)值型數(shù)據(jù)或者文本型數(shù)據(jù)或是自然語言類型)、數(shù)據(jù)單位(如g、ml等單位)。其中數(shù)據(jù)變量就是用來描述數(shù)據(jù)含義的。數(shù)據(jù)變量的取值為一些預(yù)先定義的符號或者是代表著一個概念的概念路徑。其中預(yù)先定義的符號包括有PAT_ID、PAT_SEX、VISIT_ID等。分別用于描述患者的ID,年齡、性別以及來訪的ID。概念由概念路徑和概念類型構(gòu)成。概念路徑是一個將概念以斜線分隔的文本,如‘\開放研究\心內(nèi)疾病研究\’。
13)文本替換文件:文本替換文件的作用是將一些不符合預(yù)定義規(guī)范的數(shù)據(jù)清洗掉。因此這個文件需要指定哪個數(shù)據(jù)文件中的哪列需要從什么值替換為什么值。這個文件由四列,分別為文件名、數(shù)據(jù)列的列號、原來的值、想要替換成的值。如數(shù)據(jù)列“患者基本檢查文件,1,男,m”。代表的意思是將患者基本檢查文件的第一列中所有“男”的數(shù)據(jù)替換成“m”。步驟二:將在列映射文件中的出現(xiàn)概念的路徑和概念的類型手工插入到tranSMART數(shù)據(jù)庫中的概念表中,除了插入概念表外還需要插入相關(guān)的內(nèi)容到I2B2表中。
步驟三:讀入列映射文件:驗證列映射文件中的數(shù)據(jù)是否滿足設(shè)定的規(guī)則,如驗證映射文件中給出的概念是否已經(jīng)存在于數(shù)據(jù)庫中的概念表中,用來保證數(shù)據(jù)的正確性的。
步驟四:第一次讀取并處理數(shù)據(jù):讀取數(shù)據(jù)文件中的數(shù)據(jù),首先根據(jù)文本替換文件中的定義將該數(shù)據(jù)替換成規(guī)范的值;然后對數(shù)據(jù)的正確性驗證;補充一些數(shù)據(jù)的缺失信息。在遍歷的過程中提取出病人的ID信息即在列映射文件中該列的數(shù)據(jù)變量為‘PAT_ID’的數(shù)據(jù),以及來訪的ID數(shù)據(jù)即在列映射文件中該列的數(shù)據(jù)變量為‘VIS_ID’的數(shù)據(jù)。
步驟五:將病人ID、來訪ID數(shù)據(jù)導(dǎo)入到平臺數(shù)據(jù)庫并第二次讀取數(shù)據(jù)文件中的數(shù)據(jù)。按行讀取這些數(shù)據(jù)。根據(jù)文本替換文件中的定義,將定義列的不符合要求的數(shù)據(jù)替換成符合要求的數(shù)據(jù);根據(jù)列映射文件中定義的列序號以及數(shù)據(jù)變量,標(biāo)識出每條數(shù)據(jù)中的每個數(shù)據(jù)的具體表示含義;將病人信息數(shù)據(jù)與病人ID對應(yīng)插入到平臺數(shù)據(jù)庫中的病人信息表中,將來訪數(shù)據(jù)與來訪ID對應(yīng)插入到平臺數(shù)據(jù)庫中的來訪信息表中,將數(shù)據(jù)變量中的概念類型的變量標(biāo)識的數(shù)據(jù)與概念路徑本身以及在列映射文件中定義的其他類型的數(shù)據(jù)單位、數(shù)據(jù)類型等相關(guān)數(shù)據(jù)插入到平臺數(shù)據(jù)庫中的觀測事實表中,即完成數(shù)據(jù)導(dǎo)入。
上述的方法存在以下問題:
1.自動化程度不高。在步驟二中需要手工編輯大量數(shù)據(jù)。繁瑣而且容易出錯。
2.支持導(dǎo)入的數(shù)據(jù)組織形式只能為每列數(shù)據(jù)為同一個概念的形式。根據(jù)現(xiàn)有的列映射文件的設(shè)計與變量類型。無法集成概念與數(shù)值存在于同一行中的數(shù)據(jù)組織形式情況。
3.數(shù)據(jù)源支持單一。步驟一中需要準(zhǔn)備要導(dǎo)入的數(shù)據(jù)文件。這個文件是文本形式。該方法不能直接從醫(yī)院數(shù)據(jù)庫中抽取數(shù)據(jù)。
4.在步驟第二次遍歷數(shù)據(jù)中缺少異常處理機制。對于一些可以跳過的異常不會跳過,而是直接導(dǎo)致程序崩潰。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是為克服已有技術(shù)的不足之處,提出一種基于轉(zhuǎn)化醫(yī)學(xué)分析平臺(tranSMART)的臨床數(shù)據(jù)集成技術(shù)的數(shù)據(jù)導(dǎo)入方法,該方法具有自動化程度高、適應(yīng)能力強的特點。
本發(fā)明提出的一種基于轉(zhuǎn)化醫(yī)學(xué)分析平臺的臨床數(shù)據(jù)集成技術(shù)數(shù)據(jù)導(dǎo)入方法,其特征在于,該方法用于文本型的數(shù)據(jù)的導(dǎo)入,具體包括以下步驟:
步驟一:準(zhǔn)備文件,準(zhǔn)備的文件包括:
11)數(shù)據(jù)文件:即要導(dǎo)入到平臺的數(shù)據(jù)文件,文件中第一行是表頭行,用于對數(shù)據(jù)說明;從第二行開始,每一行代表一條數(shù)據(jù),行中每個具體數(shù)據(jù)以制表符(’/t’)分隔;
數(shù)據(jù)文件還包括數(shù)據(jù)值一列對應(yīng)不同的概念的數(shù)據(jù),但對應(yīng)不同的概念的數(shù)據(jù);12)列映射文件:列映射文件有固定的六列內(nèi)容。分別為數(shù)據(jù)文件的文件名、數(shù)據(jù)列號、這個數(shù)據(jù)是否可以是空值、數(shù)據(jù)變量、數(shù)據(jù)類型、數(shù)據(jù)單位;其中數(shù)據(jù)變量就是用來描述數(shù)據(jù)含義的。數(shù)據(jù)變量的取值為預(yù)先定義的符號或者是代表著一個概念的概念路徑;概念由概念路徑和概念類型構(gòu)成;概念路徑是一個將概念以斜線分隔的文本;
還包括在數(shù)據(jù)變量中增加一個自定義的標(biāo)識,體現(xiàn)一行中存在多個概念的數(shù)據(jù)變量的層級關(guān)系;
13)文本替換文件:用于是將一些不符合預(yù)定義規(guī)范的數(shù)據(jù)清洗掉;該文件由四列,分別為文件名、數(shù)據(jù)列的列號、原來的值、想要替換成的值;
14)用于構(gòu)建概念樹的文件:該文件有概念路徑和概念類別兩列,概念路徑將概念分為不同層級,不同層級之間之間以斜線“\”分隔,概念類別包括類別型和數(shù)值型兩類;步驟二:根據(jù)步驟一中構(gòu)建的概念樹文件的概念路徑和概念類別中的層級,構(gòu)建概念樹;將概念樹中的每個節(jié)點中的概念路徑與概念類型插入到平臺數(shù)據(jù)庫中的概念表中,將概念路徑與概念類型以及節(jié)點在概念樹中的相對位置插入到平臺數(shù)據(jù)庫的I2B2表中;
步驟三:讀入列映射文件,驗證列映射文件中的數(shù)據(jù)是否滿足設(shè)定的規(guī)則,用來保證數(shù)據(jù)的正確性的;
步驟四:第一次讀取并處理數(shù)據(jù):首先根據(jù)文本替換文件中的定義將該數(shù)據(jù)替換成規(guī)范的值;然后對數(shù)據(jù)的正確性驗證;補充數(shù)據(jù)的缺失信息;提取出病人的ID信息即在列映射文件中該列的數(shù)據(jù)變量為‘PAT_ID’的數(shù)據(jù),以及來訪的ID數(shù)據(jù)即在列映射文件中該列的數(shù)據(jù)變量為‘VIS_ID’的數(shù)據(jù);
加入自定義變量的標(biāo)識。根據(jù)自定義標(biāo)識的概念路徑變量構(gòu)造概念路徑。根據(jù)自定義標(biāo)識的概念類型變量構(gòu)造概念類型。再次構(gòu)造概念樹,并將該概念樹插入到平臺數(shù)據(jù)庫對應(yīng)的表中;
步驟五:將病人ID、來訪ID數(shù)據(jù)導(dǎo)入到平臺數(shù)據(jù)庫并第二次讀取數(shù)據(jù)文件中的數(shù)據(jù):按行讀取這些數(shù)據(jù),根據(jù)文本替換文件中的定義,將指定列的不符合要求的數(shù)據(jù)替換成符合要求的數(shù)據(jù);根據(jù)列映射文件中定義的列序號以及數(shù)據(jù)變量,標(biāo)識出每條數(shù)據(jù)中的每個數(shù)據(jù)的具體表示含義,將病人信息數(shù)據(jù)與病人ID對應(yīng)插入到平臺數(shù)據(jù)庫中的病人信息表中,將來訪數(shù)據(jù)與來訪ID對應(yīng)插入到平臺數(shù)據(jù)庫中的來訪信息表中,將數(shù)據(jù)變量中的概念類型的變量標(biāo)識的數(shù)據(jù)與概念路徑本身以及在列映射文件中定義的其他類型的數(shù)據(jù)單位、數(shù)據(jù)類型等相關(guān)數(shù)據(jù)插入到平臺數(shù)據(jù)庫中的觀測事實表中;如果導(dǎo)入數(shù)據(jù)出現(xiàn)異常情況,只做相關(guān)記錄供以后查看;如果是網(wǎng)絡(luò)異常或平臺數(shù)據(jù)庫系統(tǒng)異常,則回滾事物,并記錄當(dāng)前導(dǎo)入的狀態(tài);即完成數(shù)據(jù)導(dǎo)入。
本發(fā)明還包括用于源數(shù)據(jù)庫中數(shù)據(jù)的導(dǎo)入。
本發(fā)明的特點及有益效果:
本發(fā)明的技術(shù)特點是:在tranSMART Batch基礎(chǔ)上1.通過給出概念樹文件。利用適當(dāng)數(shù)據(jù)結(jié)構(gòu)在內(nèi)存中構(gòu)建概念樹,并自動填充tranSMART數(shù)據(jù)庫中概念表和I2B2表的內(nèi)容;2.通過在列映射文件中增加四個自定義變量,并實現(xiàn)根據(jù)自定義變量處理數(shù)據(jù)的功能,完成對原方法中不能集成的數(shù)據(jù)組織形式的集成;3.通過增加可以從數(shù)據(jù)庫中讀入數(shù)據(jù)的功能實現(xiàn)直接從數(shù)據(jù)庫讀入數(shù)據(jù);4.通過在步驟第二次遍歷數(shù)據(jù)中增加異常處理機制,使一些可以跳過的異常直接能跳過。
本發(fā)明的有益效果是:
本方法不但能將文本數(shù)據(jù)形式的臨床數(shù)據(jù)正確、全面地導(dǎo)入到tranSMART分析平臺中,還能導(dǎo)入源數(shù)據(jù)庫中的數(shù)據(jù),進(jìn)而可以利用tranSMART的各種算法進(jìn)行數(shù)據(jù)分析。
本方法在數(shù)據(jù)導(dǎo)入過程中沒有損失醫(yī)學(xué)上關(guān)鍵的信息,每一條臨床科研數(shù)據(jù)都可以溯源。在發(fā)生特殊情況,如網(wǎng)絡(luò)異常、數(shù)據(jù)庫系統(tǒng)異常時,可以記錄此次導(dǎo)入任務(wù)的成敗,并選擇是提交事務(wù)、還是回滾事務(wù)。保證了數(shù)據(jù)導(dǎo)入的正確性。
本方法的數(shù)據(jù)導(dǎo)入的自動化程度高。
本方法可以選擇不同的數(shù)據(jù)源的形式,如文本或者是數(shù)據(jù)庫。有完善的異常處理機制??梢詫?dǎo)入數(shù)據(jù)值一列對應(yīng)不同的概念的數(shù)據(jù),適應(yīng)能力強。
附圖說明
圖1是本發(fā)明的方法的總體流程框圖。
圖2是本發(fā)明與概念樹構(gòu)建相關(guān)的示意圖。
具體實施方式
本發(fā)明提出的基于tranSMART平臺的臨床數(shù)據(jù)集成方法結(jié)合附圖及實施方式做以下說明:
本發(fā)明方法是在tranSMART Batch基礎(chǔ)上以Spring Batch為框架實現(xiàn)的。發(fā)明的具體實施方法如圖1所示,用于文本型的數(shù)據(jù)的導(dǎo)入,具體包括以下步驟:
步驟一:準(zhǔn)備文件,準(zhǔn)備的文件包括:
11)數(shù)據(jù)文件:即要導(dǎo)入到平臺的數(shù)據(jù)文件,文件中第一行是表頭行,用于對數(shù)據(jù)說明。從第二行開始,每一行代表一條數(shù)據(jù),行中每個具體數(shù)據(jù)以制表符(’/t’)分隔。
本方法的數(shù)據(jù)文件還可以包括數(shù)據(jù)值一列對應(yīng)不同的概念的數(shù)據(jù)。但對應(yīng)不同的概念的數(shù)據(jù)。如表1中24.6數(shù)值對應(yīng)的概念是凝血酶原時間活動度,而30.2這個數(shù)值對應(yīng)的概念為凝血酶原時間。
表1發(fā)明可以集成的樣例數(shù)據(jù)
12)列映射文件:列映射文件有固定的六列內(nèi)容。分別為數(shù)據(jù)文件的文件名、數(shù)據(jù)列號、這個數(shù)據(jù)是否可以是空值、數(shù)據(jù)變量、數(shù)據(jù)類型(數(shù)值型數(shù)據(jù)或者文本型數(shù)據(jù)或是自然語言類型)、數(shù)據(jù)單位(如g、ml等單位)。其中數(shù)據(jù)變量就是用來描述數(shù)據(jù)含義的。數(shù)據(jù)變量的取值為一些預(yù)先定義的符號或者是代表著一個概念的概念路徑。其中預(yù)先定義的符號包括有PAT_ID、PAT_SEX、VISIT_ID等。分別用于描述患者的ID,年齡、性別以及來訪的ID。概念由概念路徑和概念類型構(gòu)成。概念路徑是一個將概念以斜線分隔的文本,如‘\開放研究\心內(nèi)疾病研究\’。
本方法在列映射文件的數(shù)據(jù)變量中增加一個自定義的標(biāo)識,在這個標(biāo)識中體現(xiàn)一行中存在多個概念的數(shù)據(jù)變量的層級關(guān)系。以解決已有技術(shù)不能導(dǎo)入數(shù)據(jù)值一列對應(yīng)不同的概念的數(shù)據(jù)。本實施例的列映射文件中數(shù)據(jù)變量的標(biāo)識分為表示概念類型的數(shù)據(jù)變量的標(biāo)識,表示數(shù)值的數(shù)據(jù)變量的標(biāo)識,以及表示數(shù)值單位的數(shù)據(jù)變量的標(biāo)識。
13)文本替換文件:文本替換文件的作用是將一些不符合預(yù)定義規(guī)范的數(shù)據(jù)清洗掉。因此這個文件需要指定哪個數(shù)據(jù)文件中的哪列需要從什么值替換為什么值。這個文件由四列,分別為文件名、數(shù)據(jù)列的列號、原來的值、想要替換成的值。如數(shù)據(jù)列“患者基本檢查文件,1,男,m”。代表的意思是將患者基本檢查文件的第一列中所有“男”的數(shù)據(jù)替換成“m”。
14)用于構(gòu)建概念樹的文件:該文件有概念路徑和概念類別兩列,概念路徑將概念分為不同層級,不同層級之間之間以斜線“\”分隔,概念類別包括類別型和數(shù)值型兩類。如表2所示是一個概念的概念樹文件例子。
表2構(gòu)建概念樹文件例子
步驟二:根據(jù)步驟一中構(gòu)建的概念樹文件的概念路徑和概念類別中的層級,構(gòu)建概念樹。如圖2是根據(jù)表2中的數(shù)據(jù)構(gòu)建出的概念樹的樣例。將概念樹中的每個節(jié)點中的概念路徑與概念類型插入到平臺數(shù)據(jù)庫中的概念表中,將概念路徑與概念類型以及節(jié)點在概念樹中的相對位置插入到平臺數(shù)據(jù)庫的I2B2表中。
步驟三:讀入列映射文件,驗證列映射文件中的數(shù)據(jù)是否滿足設(shè)定的規(guī)則,如驗證映射文件中給出的概念是否已經(jīng)存在于數(shù)據(jù)庫中的概念表中,用來保證數(shù)據(jù)的正確性的。
步驟四:第一次讀取并處理數(shù)據(jù)。首先根據(jù)文本替換文件中的定義將該數(shù)據(jù)替換成規(guī)范的值;然后對數(shù)據(jù)的正確性驗證;補充一些數(shù)據(jù)的缺失信息。提取出病人的ID信息即在列映射文件中該列的數(shù)據(jù)變量為‘PAT_ID’的數(shù)據(jù),以及來訪的ID數(shù)據(jù)即在列映射文件中該列的數(shù)據(jù)變量為‘VIS_ID’的數(shù)據(jù)。
在讀入的時候,加入自定義變量的標(biāo)識。根據(jù)自定義標(biāo)識的概念路徑變量構(gòu)造概念路徑。根據(jù)自定義標(biāo)識的概念類型變量構(gòu)造概念類型。再構(gòu)造如圖2的形式的概念樹,并將該概念樹插入到平臺數(shù)據(jù)庫對應(yīng)的表中。
步驟五:將病人ID、來訪ID數(shù)據(jù)導(dǎo)入到平臺數(shù)據(jù)庫并第二次讀取數(shù)據(jù)文件中的數(shù)據(jù):按行讀取這些數(shù)據(jù),根據(jù)文本替換文件中的定義,將指定列的不符合要求的數(shù)據(jù)替換成符合要求的數(shù)據(jù);根據(jù)列映射文件中定義的列序號以及數(shù)據(jù)變量,標(biāo)識出每條數(shù)據(jù)中的每個數(shù)據(jù)的具體表示含義,將病人信息數(shù)據(jù)與病人ID對應(yīng)插入到平臺數(shù)據(jù)庫中的病人信息表中,將來訪數(shù)據(jù)與來訪ID對應(yīng)插入到平臺數(shù)據(jù)庫中的來訪信息表中,將數(shù)據(jù)變量中的概念類型的變量標(biāo)識的數(shù)據(jù)與概念路徑本身以及在列映射文件中定義的其他類型的數(shù)據(jù)單位、數(shù)據(jù)類型等相關(guān)數(shù)據(jù)插入到平臺數(shù)據(jù)庫中的觀測事實表中;如果導(dǎo)入數(shù)據(jù)出現(xiàn)異常情況,如某些數(shù)據(jù)項目的缺失,某些數(shù)據(jù)項目的重復(fù),只做相關(guān)記錄供以后查看;如果是網(wǎng)絡(luò)異?;蚱脚_數(shù)據(jù)庫系統(tǒng)異常,則回滾事物,并記錄當(dāng)前導(dǎo)入的狀態(tài),包括配置信息、時間、異常情況等;即完成數(shù)據(jù)導(dǎo)入。
本發(fā)明還包括用于源數(shù)據(jù)庫中數(shù)據(jù)的導(dǎo)入:
當(dāng)要導(dǎo)入的數(shù)據(jù)是存在源數(shù)據(jù)庫表中時,首先要在該源數(shù)據(jù)庫中寫好存儲過程,存儲過程返回想要導(dǎo)入數(shù)據(jù)的游標(biāo);同時對文本數(shù)據(jù)讀入單元替換成從數(shù)據(jù)庫中的存儲過程讀取數(shù)據(jù)的讀入單元,并保證與文本讀入單元讀入后的結(jié)果相同;具體導(dǎo)入的步驟如下:
步驟一:準(zhǔn)備文件:準(zhǔn)備的文件包括:
11)列映射文件:列映射文件有固定的六列內(nèi)容。分別為源數(shù)據(jù)庫中預(yù)定義的存儲過程名、數(shù)據(jù)列號、這個數(shù)據(jù)是否可以是空值、數(shù)據(jù)變量、數(shù)據(jù)類型(數(shù)值型數(shù)據(jù)或者文本型數(shù)據(jù)或是自然語言類型)、數(shù)據(jù)單位(如g、ml等單位)。其中數(shù)據(jù)變量就是用來描述數(shù)據(jù)含義的。數(shù)據(jù)變量的取值為一些預(yù)先定義的符號或者是代表著一個概念的概念路徑。其中預(yù)先定義的符號包括有PAT_ID、PAT_SEX、VISIT_ID等。分別用于描述患者的ID,年齡、性別以及來訪的ID。概念由概念路徑和概念類型構(gòu)成。概念路徑是一個以斜線分隔的文本,如‘\開放研究\心內(nèi)疾病研究\’。
本方法在列映射文件的數(shù)據(jù)變量中增加一個自定義的標(biāo)識,在這個標(biāo)識中體現(xiàn)一行中存在多個概念的數(shù)據(jù)變量的層級關(guān)系。以解決已有技術(shù)不能導(dǎo)入數(shù)據(jù)值一列對應(yīng)不同的概念的數(shù)據(jù)。本實施例的列映射文件中數(shù)據(jù)變量的標(biāo)識分為表示概念類型的數(shù)據(jù)變量的標(biāo)識,表示數(shù)值的數(shù)據(jù)變量的標(biāo)識,以及表示數(shù)值單位的數(shù)據(jù)變量的標(biāo)識。
12)文本替換文件:文本替換文件的作用是將一些不符合預(yù)定義規(guī)范的數(shù)據(jù)清洗掉。因此這個文件需要指定哪個數(shù)據(jù)文件中的哪列需要從什么值替換為什么值。這個文件由四列,分別為文件名、數(shù)據(jù)列的列號、原來的值、想要替換成的值。如數(shù)據(jù)列“患者基本檢查文件,1,男,m”。代表的意思是將患者基本檢查文件的第一列中所有“男”的數(shù)據(jù)替換成“m”。
13)源數(shù)據(jù)庫連接配置文件:包括源數(shù)據(jù)庫的用戶名、密碼、是否自動重新連接等信息。
14)用于構(gòu)建概念樹的文件:該文件有概念路徑和概念類別兩列,概念分為不同層級,不同層級之間之間以斜線“\”分隔,概念類別包括類別型和數(shù)值型兩類。如表2所示是一個概念的概念樹文件例子。
表2構(gòu)建概念樹文件例子
步驟二:根據(jù)步驟一中構(gòu)建的概念樹文件的概念路徑和概念類別中的層級,構(gòu)建概念樹。如圖2是根據(jù)表2中的數(shù)據(jù)構(gòu)建出的概念樹的樣例。將概念樹中的每個節(jié)點中的概念路徑與概念類型插入到平臺數(shù)據(jù)庫中的概念表中,將概念路徑與概念類型以及節(jié)點在概念樹中的相對位置插入到平臺數(shù)據(jù)庫的I2B2表中。
步驟三:讀入列映射文件,驗證列映射文件中的數(shù)據(jù)是否滿足設(shè)定的規(guī)則,如驗證映射文件中給出的概念是否已經(jīng)存在于數(shù)據(jù)庫中的概念表中,用來保證數(shù)據(jù)的正確性的。
步驟四:第一次遍歷要導(dǎo)入的源數(shù)據(jù)庫中的數(shù)據(jù)。首先根據(jù)文本替換文件中的定義將該數(shù)據(jù)替換成規(guī)范的值;然后對數(shù)據(jù)的正確性驗證;補充一些數(shù)據(jù)的缺失信息。在遍歷的過程中提取出病人的ID信息即在列映射文件中該列的數(shù)據(jù)變量為‘PAT_ID’的數(shù)據(jù),以及來訪的ID信息即在列映射文件中該列的數(shù)據(jù)變量為‘VIS_ID’的數(shù)據(jù)。
在讀入的時候,加入自定義變量的標(biāo)識。根據(jù)自定義標(biāo)識的概念路徑變量構(gòu)造概念路徑。根據(jù)自定義標(biāo)識的概念類型變量構(gòu)造概念類型。再構(gòu)造如圖2的形式的概念樹,并將樹插入到平臺數(shù)據(jù)庫對應(yīng)的表中。
步驟五:將病人ID、來訪ID數(shù)據(jù)導(dǎo)入到平臺數(shù)據(jù)庫并第二次遍歷源數(shù)據(jù)庫中的數(shù)據(jù):按行讀取源數(shù)據(jù)庫中的數(shù)據(jù),根據(jù)文本替換文件中的定義,將指定列的不符合要求的數(shù)據(jù)替換成符合要求的數(shù)據(jù);根據(jù)列映射文件中定義的列序號以及數(shù)據(jù)變量,標(biāo)識出每條數(shù)據(jù)中的每個數(shù)據(jù)的具體表示含義,將病人信息數(shù)據(jù)與病人ID對應(yīng)插入到平臺數(shù)據(jù)庫中的病人信息表中,將來訪數(shù)據(jù)與來訪ID對應(yīng)插入到平臺數(shù)據(jù)庫中的來訪信息表中,將數(shù)據(jù)變量中的概念類型的變量標(biāo)識的數(shù)據(jù)與概念路徑本身以及在列映射文件中定義的其他類型的數(shù)據(jù)單位、數(shù)據(jù)類型等相關(guān)數(shù)據(jù)插入到平臺數(shù)據(jù)庫中的觀測事實表中;如果導(dǎo)入數(shù)據(jù)出現(xiàn)異常,如某些數(shù)據(jù)項目的缺失,某些數(shù)據(jù)項目的重復(fù),只做相關(guān)記錄供以后查看;如果是網(wǎng)絡(luò)異?;蚱脚_數(shù)據(jù)庫系統(tǒng)異常,則回滾事物,并記錄當(dāng)前導(dǎo)入的狀態(tài),包括配置信息、時間、異常情況等;即完成數(shù)據(jù)導(dǎo)入。