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