謝松,周衛(wèi),李文林,楊秦
南京中醫(yī)藥大學(xué),江蘇 南京 210023
基于VB與MATLAB混合編程的數(shù)據(jù)可視化與數(shù)據(jù)挖掘軟件的研究
謝松,周衛(wèi),李文林*,楊秦
南京中醫(yī)藥大學(xué),江蘇 南京 210023
基于VB和MATLAB混合編程技術(shù),在自動分詞系統(tǒng)與共詞分析的基礎(chǔ)上,設(shè)計開發(fā)了可應(yīng)用于中醫(yī)藥等領(lǐng)域的數(shù)據(jù)可視化與數(shù)據(jù)挖掘軟件系統(tǒng),對346個中醫(yī)外用復(fù)方的組成成分與主治病癥進行統(tǒng)計分析與數(shù)據(jù)挖掘,為相關(guān)領(lǐng)域的研究提供快捷便利的分析工具。
VB;MATLAB;數(shù)據(jù)可視化;數(shù)據(jù)挖掘
數(shù)據(jù)挖掘可以從大量數(shù)據(jù)中發(fā)現(xiàn)隱藏的特定模式和規(guī)律,從而可以為商業(yè)活動、科學(xué)探索和醫(yī)學(xué)研究等諸多領(lǐng)域提供必需的信息知識。數(shù)據(jù)與信息知識之間的巨大差距迫切需要系統(tǒng)地開發(fā)數(shù)據(jù)挖掘工具,幫助實現(xiàn)將大量的數(shù)據(jù)轉(zhuǎn)化為知識財富。擁有幾千年文化積淀的傳統(tǒng)中醫(yī)藥學(xué)積累了豐富的經(jīng)驗,擁有大量的文獻。中醫(yī)藥系統(tǒng)是一個非線性、多維、復(fù)雜而龐大的系統(tǒng),將數(shù)據(jù)挖掘技術(shù)應(yīng)用于中醫(yī)藥領(lǐng)域中的相關(guān)數(shù)據(jù)進行整理、提取和挖掘,可以更好地獲取其中蘊藏的知識精華,加速中醫(yī)藥學(xué)的前進步伐。
VB是Windows環(huán)境下最快捷和易用的可視化集成開發(fā)工具,通過它可以編寫出具有各種風(fēng)格且界面友好的軟件產(chǎn)品。MATLAB是一套集數(shù)值分析、矩陣運算、信號處理和圖形顯示于一體的高性能數(shù)學(xué)軟件,計算能力十分突出。由于MATLAB編寫復(fù)雜的人機交換界面的功能相對較弱,而VB提供的計算能力和繪圖函數(shù)有限。因此,本研究設(shè)計在VB環(huán)境下調(diào)用 MATLAB,充分發(fā)揮各自的優(yōu)勢,開發(fā)應(yīng)用于中醫(yī)藥領(lǐng)域的數(shù)據(jù)可視化與聚類分析系統(tǒng)。
VB與MATLAB進行混合編程,有以下5種方法,分別具體敘述如下:
DDE是在 Windows環(huán)境下支持客戶/服務(wù)器(client/server)計算模式重要技術(shù)之一。VB支持DDE客戶端功能,MATLAB提供DDE服務(wù)功能。VB應(yīng)用程序首先通過確定服務(wù)器名和主題建立與 MATLAB的 DDE會話,服務(wù)器名和主題的唯一確定了這次會話,在會話期間VB應(yīng)用程序作為客戶端,MATLAB作為服務(wù)器端,客戶端與服務(wù)器端可以就確定的條目(Item)交換數(shù)據(jù)[1]。
ActiveX技術(shù)是微軟公司提供的一種用于模塊集成的新的協(xié)議,Activex部件是VB工具箱的補充。MATLAB也支持Activex技術(shù),即可以在MATLAB環(huán)境下運行其他程序的Activex部件,也可以在其他程序中運行MATLAB的Activex部件。因此,在VB中利用Activex自動化接口可將 MATLAB作為 VB的一個Activex部件來調(diào)用。這樣就可以在VB程序中調(diào)用MATLAB的命令,向MATLAB傳送或從MATLAB中接收數(shù)據(jù),本研究采用的即為這種方式,在第三節(jié)中將詳細說明如何應(yīng)用ActiveX技術(shù)調(diào)用MATLAB。
通過Matcom工具把MATLAB編寫的函數(shù)(M文件)編譯為 VB可以調(diào)用的 DLL文件。Matcom是一個從MATLAB到C++的編譯器,它借助C++編譯器將MATLAB下的M文件編譯為可被VB調(diào)用的DLL動態(tài)鏈接庫或者是獨立的可執(zhí)行文件。這樣大大提高了程序的運行效率,也降低了對系統(tǒng)資源的占用[2]。
MATLAB的M文件不能直接在VB中調(diào)用,可利用MCC將M文件直接編譯成可執(zhí)行的EXE文件,然后在VB中聲明3個API函數(shù),最后使用shell命令即可實現(xiàn)VB與MATLAB的無縫集成[3]。
MatrixVB是MathWorks公司專門為VB提供的編程接口,它實際上是一個內(nèi)化到VB中的功能豐富的數(shù)學(xué)函數(shù)庫,實現(xiàn)編程也很簡單,在計算機上安裝MatrixVB后,啟動VB,建立一個新的程序,打開工程/引用菜單項,選中Matrix項,就可以在VB直接調(diào)用MATLAB函數(shù)來進行程序的設(shè)計[4]。
在VB中創(chuàng)建MATLAB的ActiveX對象后,就可以使用這個對象所包含的各種方法,實現(xiàn)對MATLAB的調(diào)用。首先創(chuàng)建ActiveX對象:
Dim Mlab as Object
Set Mlab= CreateObject ("MATLAB. Application")
常用的Mlab.Application 方法有5個。
BSTR表示寬字符串類型,該方法接收字符串命令,將調(diào)用 MATLAB,執(zhí)行一條由 Command字符串所決定的一條MATLAB命令,同時返回命令的執(zhí)行情況,如在VB的文本框Text1中輸入MATLAB語句,在命令按鈕中輸入如下程序即可執(zhí)行查看結(jié)果。也可以在VB中將MATLAB語句賦值給變量,然后傳遞給MATLAB執(zhí)行。
Dim Mlab as object
Dim Result as string
Set Mlab= CreateObject ("MATLAB.Application")
Cmd= Text1.Text
Result= Mlab.Execute (Cmd)
GetFullMatrix ([in] BSTR Name, [in] BSTR Workspace, [in, out] SAFEARRAY (double) * pr,[in, out] SAFEARRAY (double) * pi)
GetFullMatrix方法將MATLAB中的一個矩陣變量傳送到VB中的一個一維或二維數(shù)組中,其中Name指定了MATLAB中的矩陣變量名,Workspace指定了該矩陣所在的MATLAB所在的工作區(qū),pr是VB程序中的實部,pi是VB程序中的虛部。
PutFullMatrix([in] BSTR Name, [in] BSTR Workspace,[in, out] SAFEARRAY (double) * pr,[in, out] SAFEARRAY (double) * pi)
PutFullMatrix方法是將VB程序中的一個一維或二維數(shù)組傳遞到指定的MATLAB空間,各參數(shù)的意義和調(diào)用方法與GetFullMatrix方法類似。
該方法使MATLAB的命令窗口最小化。
該方法使MATLAB的命令窗口最大化。
本研究前期根據(jù)《中華人民共和國藥典(2005版)》搜集整理了中醫(yī)常用的141個單味藥信息,包括藥物名稱、漢語拼音、基原、性狀、鑒別、用途、炮制方法、性味、歸經(jīng)、功效、主治、用法用量、用藥禁忌等多個字段,以及346個外用復(fù)方,包含復(fù)方名稱、別名、處方來源、藥物組成、加減、功效、主治、制備方法、用法用量、用藥禁忌、臨床應(yīng)用、藥理、各家論述等。并根據(jù)復(fù)方劑型、主治的病癥規(guī)范統(tǒng)一,存進SQL Server數(shù)據(jù)庫,作為實驗數(shù)據(jù)。數(shù)據(jù)庫詳細設(shè)計在此略過。
數(shù)據(jù)可視化與數(shù)據(jù)挖掘軟件的研究主要包括兩個功能模塊,中醫(yī)外用藥數(shù)據(jù)庫模塊以及數(shù)據(jù)可視化與數(shù)據(jù)挖掘模塊。其中,主要的數(shù)據(jù)可視化與數(shù)據(jù)挖掘模塊如圖1所示。
3.2.1 數(shù)據(jù)預(yù)處理模塊 對需可視化和數(shù)據(jù)挖掘的源數(shù)據(jù)進行規(guī)范化處理,處理完成后存進數(shù)據(jù)庫。文本分詞系統(tǒng)根據(jù)《全國中草藥匯編》所建的詞表對特定的文獻資料進行分詞處理,本研究針對中藥外用藥領(lǐng)域的復(fù)方組成成分,使用逆向最長匹配算法,切分出復(fù)方的各個藥物組成,并進行統(tǒng)計處理,分詞結(jié)果可以作為可視化與數(shù)據(jù)挖掘的對象之一。
圖1 系統(tǒng)功能模塊圖
3.2.2 數(shù)據(jù)可視化模塊 對數(shù)據(jù)對象進行二維或三維可視化顯示,數(shù)據(jù)對象來源不限,可以為既有數(shù)據(jù),或新處理的分詞結(jié)果。根據(jù)適用對象的不同,可視化的方式也可繪出柱狀圖、餅狀圖、散點圖、火柴桿圖、面積圖、階梯圖等多種形式。
3.2.3 數(shù)據(jù)挖掘模塊 系統(tǒng)采用基于共詞分析的聚類分析方法,對現(xiàn)有數(shù)據(jù)進行高頻字段統(tǒng)計,計算得出共詞矩陣,通過計算Ochiia系數(shù),將共詞矩陣轉(zhuǎn)化為相似矩陣和相異矩陣,最后進行聚類分析,畫出聚類樹形圖。
3.3.1 二維柱狀圖 在程序中調(diào)用 MATLAB繪制二維柱狀圖的代碼如下,生成的圖形如圖2所示。
Set Mlab = CreateObject ("MATLAB.Application")
Mlab.Execute (cmdMATLAB)
’ 前面已經(jīng)給字符串變量cmdMATLAB賦值,通過MATLAB執(zhí)行命令創(chuàng)建數(shù)據(jù)矩陣或向量。
Mlab.Execute ("bar(X),'stacked'")
’ 通過函數(shù)bar()繪制二維柱狀圖。
Mlab.Execute ("title('" & vXlabel & "柱狀圖', 'FontSize',15 )")
’ 給圖形添加標(biāo)題,設(shè)置字體字號。
Mlab.Execute ("Ylabel('it " & vYlabel &"’, ’FontSize',12 )")
Mlab.Execute ("Xlabel('" & vXlabel & "序號 ’, 'FontSize',12 )")
’ 給圖形縱坐標(biāo)、橫坐標(biāo)添加標(biāo)簽,設(shè)置字體字號。
Mlab.Execute ("set (gca, ’xtick’, 1∶1∶" & vRcnt & ")")
圖2 復(fù)方劑型統(tǒng)計二維柱狀圖
’ 給坐標(biāo)軸添加向量刻度。從圖2可以直觀地看出,在整理出的346個外用復(fù)方中,采用散劑作為劑型的復(fù)方有128個,膏劑有113個,丸劑有52個,液劑有38個,餅劑有6個,片劑有2個,霜劑只有1個,其他不可直接判斷是何種劑型的復(fù)方有6個。
3.3.2 三維火柴桿圖 與繪制柱狀圖類似,給變量cmdMATLAB賦值之后傳遞給MATLAB,創(chuàng)建數(shù)據(jù)矩陣或向量,即可通過命令Mlab.Execute ("stem3(X)")繪制三維火柴桿圖,如圖3所示。如圖3所示,數(shù)據(jù)來源也是346個外用復(fù)方,然后根據(jù)劑型繪制出三維火柴桿圖。
圖3 復(fù)方劑型統(tǒng)計三維火柴桿圖
3.3.3 聚類分析 本研究中的數(shù)據(jù)挖掘是基于共詞研究的聚類分析。聚類分析法對于共詞關(guān)系網(wǎng)絡(luò)中的詞與詞之間的距離進行數(shù)學(xué)運算分析,將距離較近的主題詞聚集起來,形成一個個概念相對獨立的類團,使得類團內(nèi)屬性相似性最大,類團間相似性最小[5]。
本研究對于中藥復(fù)方中的藥材進行切分統(tǒng)計之后,再根據(jù)復(fù)方功效總結(jié)其對應(yīng)的主治病癥,一起進行高頻關(guān)鍵詞統(tǒng)計,并計算得出共詞矩陣。再利用Ochiia系數(shù)計算出相似矩陣和相異矩陣,并作聚類分析,可以得知針對某些病癥的用藥規(guī)律。
圖4 中藥外用復(fù)方組成藥材主治聚類分析圖
在高頻關(guān)鍵詞中按頻次從高到低的順序,排前30位的依次是冰片、白礬、乳香、雄黃、輕粉、瘡瘍、沒藥、麝香、黃柏、黃連、白芷、濕疹、當(dāng)歸、甘草、石膏、朱砂、癰疽、青黛、大黃、龍骨、血竭、防風(fēng)、五倍子、骨病關(guān)節(jié)病、硫黃、細辛、潰瘍、川芎、體癬、白及。在圖4中對應(yīng)的編號從1依次到30。將這些關(guān)鍵詞進行聚類分析,結(jié)果如圖4所示。以圖舉例來說,編號15、17、20、30即表示石膏、癰疽、龍骨、白及,較早地聚為一類,很好地解釋了在治療癰疽時的用藥特點。
本研究采用VB和MATLAB混合編程開發(fā)的數(shù)據(jù)可視化與數(shù)據(jù)挖掘軟件,提供友好的用戶交互界面,并以數(shù)據(jù)預(yù)處理、自動分詞切詞處理、共詞分析研究等完整的流程,進行外用復(fù)方藥材與病癥的聚類分析。應(yīng)用此軟件的優(yōu)勢在于,以前復(fù)雜煩瑣的依據(jù)文獻內(nèi)容人工進行藥材摘錄、統(tǒng)計等工作,現(xiàn)在可以用程序自動完成,大大簡化了不必要的勞動,并且對數(shù)據(jù)進行分析挖掘,將結(jié)果以多種形式可視化地展現(xiàn)出來,為開發(fā)中醫(yī)藥和其他領(lǐng)域的應(yīng)用程序積累了經(jīng)驗,并為科研工作提供了有力的技術(shù)支持與新的方法。
[1]崔桂彬,王汝霖,李春梅,等.基于VB與MATLAB的圖像處理軟件設(shè)計[J].微計算機信息,2006,22(30):260-262.
[2]譚炎,張凌燕.MATLAB與VB混合編程技術(shù)研究[J].微計算機信息,2006,22(15):247-249.
[3]陳麗君,任文濤,趙萍.基于VB和MATLAB的苗田圖像實時處理軟件設(shè)計[J].農(nóng)機化研究,2009,31(11):145-147.
[4]盧振,曹屹,范永.基于VB與MATLAB混合編程數(shù)據(jù)庫圖形顯示方法[J].制導(dǎo)與引信,2009,30(3):36-40.
[5]黃詠梅.讀者需求分析中的數(shù)據(jù)挖掘技術(shù)[J].大學(xué)圖書情報學(xué)刊,2006,24(4):48-50.
A Research on Data Visualization and Data Mining Software Based on VB and MATLAB Hybrid Programming
Xie Song, Zhou Wei, Li Wenlin*, Yang Qin
(Nanjing University of Traditional Chinese Medicine, Nanjing Jiangsu 210023, China)
The research designed and developed a data visualization and data mining software which can be applied in Traditional Chinese Medicine(TCM) field based on VB and MATLAB hybrid programming, with the development of automatic segmentation system and co-word analysis. It statistically analyzed composition and effects of 346 TCM compounds for external use, which can be used as a convenient analysis tool in related study field.
VB; MATLAB; data visualization; data mining
10.3969/j.issn.2095-5707.2014.02.003
南京中醫(yī)藥大學(xué)哲學(xué)社會科學(xué)基金(11XSK15);南京中醫(yī)藥大學(xué)青年自然科學(xué)基金(11XZR19)
謝松,助理館員,研究方向:中醫(yī)藥數(shù)據(jù)分析與挖掘。E-mail:phoenixtech@163.com
*通訊作者:李文林,研究館員,研究方向:中醫(yī)藥數(shù)據(jù)分析與挖掘。E-mail: njutcmli@126.com
2013-10-24,編輯:魏民)