李大碩,張宏軍,程愷,徐有為,王航,李逸林
(1.陸軍工程大學(xué)指揮控制工程學(xué)院,江蘇 南京 210000;2.南京中醫(yī)藥大學(xué))
在中醫(yī)藥領(lǐng)域,中藥方劑數(shù)據(jù)規(guī)模不斷擴(kuò)大,怎樣更準(zhǔn)確、更全面的管理及分析中藥方劑數(shù)據(jù)也成為當(dāng)下中醫(yī)藥領(lǐng)域的重要研究需求[1]。當(dāng)今中醫(yī)藥領(lǐng)域的研究模式正從臨床驗(yàn)證總結(jié)、醫(yī)案整理,逐步發(fā)展為通過結(jié)構(gòu)化方劑數(shù)據(jù)采集,利用數(shù)據(jù)挖掘方法對中藥方劑的診治特點(diǎn)、用藥規(guī)律進(jìn)行多維度的模式[2]。這也符合《中醫(yī)藥發(fā)展戰(zhàn)略規(guī)劃綱要(2016-2030)》中對當(dāng)前中醫(yī)藥數(shù)據(jù)分析提出的需求。
為研究中藥方劑潛在的配伍規(guī)律,優(yōu)化中藥方劑數(shù)據(jù)分析流程,需要完成以下工作:①研究中醫(yī)藥領(lǐng)域數(shù)據(jù)資源特點(diǎn),分析系統(tǒng)建設(shè)需求;②由給出系統(tǒng)從總體架構(gòu)到技術(shù)細(xì)節(jié)的設(shè)計(jì)方案,包括系統(tǒng)功能設(shè)計(jì)和數(shù)據(jù)的混合存儲策略;③以中藥方劑“方-藥-證-癥”作為數(shù)據(jù)源,建立中藥方劑網(wǎng)絡(luò);④運(yùn)用復(fù)雜網(wǎng)絡(luò)的方法,對方劑配伍過程中各要素之間的復(fù)雜相互作用進(jìn)行分析,保證中藥方劑數(shù)據(jù)分析的合理性;⑤方劑網(wǎng)絡(luò)構(gòu)建、可視化、系統(tǒng)應(yīng)用等工程實(shí)現(xiàn)方法實(shí)踐。
我國傳統(tǒng)中醫(yī)藥具有悠久的歷史,它以其特殊的知識體系和診治方法,為人類的健康事業(yè)做出貢獻(xiàn)。
1.1.1 數(shù)據(jù)資源特點(diǎn)
中藥方劑是中醫(yī)藥預(yù)防疾病的重要手段,是中醫(yī)藥“理、法、方、藥”理論體系的重要組成部分,具有以“方-藥-證-癥”為核心的多維結(jié)構(gòu)。傳統(tǒng)的數(shù)據(jù)挖掘技術(shù)大多只對中醫(yī)藥數(shù)據(jù)表層規(guī)律進(jìn)行分析,對其深層復(fù)雜關(guān)系的研究存在局限性。中藥方劑在遵循基本的組方結(jié)構(gòu)和配伍規(guī)則下,針對不同的“證”或“癥”,按照“君、臣、佐、使”的原則來配伍,達(dá)到整體調(diào)節(jié)的作用[3]。同時(shí),藥材又蘊(yùn)含功效、藥性、藥味、歸經(jīng)等復(fù)雜屬性,中醫(yī)在辨證論治和方劑配伍方面都要綜合考慮病癥和藥材復(fù)雜性及其高度非線性關(guān)系的特點(diǎn),因此,中藥方劑系統(tǒng)屬于典型的復(fù)雜系統(tǒng)[4]。
1.1.2 研究現(xiàn)狀分析
根據(jù)中醫(yī)藥領(lǐng)域業(yè)務(wù)需求,結(jié)合中藥方劑數(shù)據(jù)資源特點(diǎn)進(jìn)行分析,可以發(fā)現(xiàn),當(dāng)前中藥方劑應(yīng)用存在以下需解決的問題。
一是復(fù)雜關(guān)系難以分析。中藥方劑是理法方藥的數(shù)據(jù)集合,具有獨(dú)特的配伍規(guī)律及非線性關(guān)系。方劑中藥材的劑量、藥味的隨證加減都有著相應(yīng)規(guī)范,但因涉及的數(shù)據(jù)關(guān)系復(fù)雜,傳統(tǒng)研究方法難以對其進(jìn)行全面又深層的分析。
二是分析角度不足。在探討藥材聯(lián)系時(shí)單從藥材頻次等角度衡量,未考慮中藥方劑中藥材本身屬性對實(shí)際藥方配伍的影響,忽略了整體的相互作用,其分析存在片面性。缺少完整可靠的中藥方劑分析工具,難以得到更深層次的藥材配伍規(guī)律。
根據(jù)現(xiàn)實(shí)中藥方劑的數(shù)據(jù)特點(diǎn)及存在問題,中藥方劑數(shù)據(jù)分析系統(tǒng)需要將中醫(yī)藥領(lǐng)域的多元數(shù)據(jù)整合成結(jié)構(gòu)化的數(shù)據(jù)資源進(jìn)行數(shù)據(jù)分析,其中涉及到“癥狀、證候、方劑、藥材”等眾多因素,這些因素之間蘊(yùn)含豐富的復(fù)雜關(guān)系,傳統(tǒng)的數(shù)據(jù)處理方法難以有效地對數(shù)據(jù)資源進(jìn)行整合。本系統(tǒng)基于復(fù)雜網(wǎng)絡(luò)理論構(gòu)建中藥方劑數(shù)據(jù)模型,構(gòu)建中藥方劑領(lǐng)域?qū)I(yè)規(guī)范的復(fù)雜網(wǎng)絡(luò),并通過復(fù)雜網(wǎng)絡(luò)中的分析算法實(shí)現(xiàn)中藥方劑的數(shù)據(jù)分析。將用戶角色分為系統(tǒng)管理員和系統(tǒng)用戶,系統(tǒng)管理員負(fù)責(zé)維護(hù)和管理系統(tǒng)的基礎(chǔ)數(shù)據(jù),主要包括用戶數(shù)據(jù)、臨床診斷數(shù)據(jù)以及中藥方劑數(shù)據(jù);系統(tǒng)用戶可以查詢方劑相關(guān)數(shù)據(jù)信息及獲取方劑的多種數(shù)據(jù)表達(dá)結(jié)果,并通過構(gòu)建方劑復(fù)雜網(wǎng)絡(luò)模型獲取關(guān)鍵藥材節(jié)點(diǎn)以及實(shí)現(xiàn)藥材社團(tuán)劃分等,進(jìn)而實(shí)現(xiàn)中醫(yī)藥領(lǐng)域的智能推薦、智能問答等功能。具體需求如圖1所示。
圖1 系統(tǒng)建設(shè)需求
考慮到系統(tǒng)的可靠性和工作效率,本節(jié)著重介紹系統(tǒng)架構(gòu)、中藥方劑資源庫數(shù)據(jù)模型設(shè)計(jì)以及系統(tǒng)功能。
根據(jù)系統(tǒng)建設(shè)需求,按照高內(nèi)聚、低耦合的系統(tǒng)設(shè)計(jì)原則,并充分考慮系統(tǒng)的可靠性、安全性、實(shí)用性等問題。在系統(tǒng)設(shè)計(jì)中,我們采用三層架構(gòu)搭建系統(tǒng)的整體框架,他們分別是數(shù)據(jù)層、業(yè)務(wù)層以及應(yīng)用層,如圖2所示。
圖2 系統(tǒng)架構(gòu)圖
數(shù)據(jù)層利用混合存儲策略,存儲方劑網(wǎng)絡(luò)構(gòu)建分析全生命周期中的各類數(shù)據(jù),主要包括用戶基本數(shù)據(jù)、臨床診斷數(shù)據(jù)和方劑資源庫。用戶基本數(shù)據(jù)包括用戶數(shù)據(jù)、管理員數(shù)據(jù)等;臨床診斷數(shù)據(jù)包括病例數(shù)據(jù)、診斷記錄等;方劑資源庫負(fù)責(zé)記錄中藥方劑包含的藥材、癥狀、證候等信息,是中藥方劑復(fù)雜網(wǎng)絡(luò)分析的基礎(chǔ)數(shù)據(jù)來源,實(shí)現(xiàn)對系統(tǒng)建設(shè)需求的支撐。業(yè)務(wù)層提供系統(tǒng)實(shí)現(xiàn)的具體業(yè)務(wù)邏輯,主要包括系統(tǒng)用到的自然語言處理技術(shù)與復(fù)雜網(wǎng)絡(luò)構(gòu)建技術(shù),將臨床診斷數(shù)據(jù)與方劑資源庫數(shù)據(jù)進(jìn)一步處理成結(jié)構(gòu)化,體系化的數(shù)據(jù),為中藥方劑數(shù)據(jù)分析提供支撐。應(yīng)用層在中藥方劑復(fù)雜網(wǎng)絡(luò)構(gòu)建的基礎(chǔ)上,主要負(fù)責(zé)系統(tǒng)的方劑分析、藥材推薦[5]、智能問答等應(yīng)用。
中藥方劑資源庫數(shù)據(jù)模型設(shè)計(jì)是實(shí)現(xiàn)中藥方劑數(shù)據(jù)分析系統(tǒng)的重要一步,中藥方劑數(shù)據(jù)從各類形式轉(zhuǎn)變?yōu)闃?biāo)準(zhǔn)化、規(guī)范化的數(shù)據(jù)庫數(shù)據(jù),需要建立相應(yīng)的數(shù)據(jù)模型。根據(jù)上述中藥方劑數(shù)據(jù)資源特點(diǎn)和系統(tǒng)需求分析,對系統(tǒng)數(shù)據(jù)進(jìn)行數(shù)據(jù)模型設(shè)計(jì)。以中藥方劑資源庫的概念模型為例展示系統(tǒng)數(shù)據(jù)模型設(shè)計(jì)方法,資源庫ER圖3如下。
圖3 資源庫ER圖
系統(tǒng)的用戶主要分為兩類。普通用戶只能查看系統(tǒng)數(shù)據(jù)庫中存儲的內(nèi)容以及對方劑數(shù)據(jù)進(jìn)行分析。而系統(tǒng)管理員除了能查看數(shù)據(jù)以外,還擁有數(shù)據(jù)管理的權(quán)限。根據(jù)系統(tǒng)需求分析的結(jié)果,將系統(tǒng)功能模塊分為以下四個(gè)部分,系統(tǒng)的功能模塊圖如圖4所示。
圖4 系統(tǒng)功能模塊圖
基礎(chǔ)數(shù)據(jù)管理模塊包括用戶數(shù)據(jù)管理、臨床診斷數(shù)據(jù)管理、方劑數(shù)據(jù)管理和方劑分析數(shù)據(jù)管理等子功能模塊。用戶數(shù)據(jù)模塊用于管理系統(tǒng)用戶相關(guān)數(shù)據(jù),以支持用戶對系統(tǒng)的使用;臨床診斷數(shù)據(jù)模塊用于存儲中醫(yī)臨床診斷過程中的病例數(shù)據(jù)及相關(guān)用藥記錄;方劑數(shù)據(jù)模塊負(fù)責(zé)管理數(shù)據(jù)庫中的中藥方劑數(shù)據(jù)信息,主要包括藥方涉及到的癥狀、證候、疾病等數(shù)據(jù);分析數(shù)據(jù)模塊用于存儲中藥方劑分析過程中產(chǎn)生的相關(guān)方劑數(shù)值。
藥方數(shù)據(jù)表達(dá)模塊主要負(fù)責(zé)對系統(tǒng)基礎(chǔ)方劑數(shù)據(jù)進(jìn)行整合,并以復(fù)雜網(wǎng)絡(luò)的方式進(jìn)行構(gòu)建和存儲,在構(gòu)建中藥方劑復(fù)雜網(wǎng)絡(luò)的基礎(chǔ)上,以圖表形式實(shí)現(xiàn)中醫(yī)藥方數(shù)據(jù)表達(dá),為中藥方劑復(fù)雜網(wǎng)絡(luò)的分析計(jì)算提供幫助。
數(shù)據(jù)分析挖掘模塊對中藥方劑進(jìn)行數(shù)據(jù)分析、挖掘,在中藥方劑復(fù)雜網(wǎng)絡(luò)構(gòu)建的基礎(chǔ)上進(jìn)行分析計(jì)算,主要包括藥材貢獻(xiàn)度計(jì)算、藥性相似度計(jì)算、藥材關(guān)鍵節(jié)點(diǎn)發(fā)現(xiàn)、關(guān)聯(lián)藥材推薦[6]、藥方社團(tuán)劃分等子功能模塊,可根據(jù)實(shí)際業(yè)務(wù)需求開發(fā)新的功能模塊,不斷完善數(shù)據(jù)分析挖掘子模塊功能,拓展數(shù)據(jù)挖掘在中醫(yī)藥領(lǐng)域的業(yè)務(wù)范圍。
數(shù)據(jù)可視化模塊實(shí)現(xiàn)中藥方劑的系統(tǒng)數(shù)據(jù)分析結(jié)果的可視化,以動(dòng)態(tài)交互的形式幫助工作人員更好的進(jìn)行中藥方劑數(shù)據(jù)分析的查驗(yàn)工作,包括方藥關(guān)系可視化、方劑相似度可視化[7]、藥性相似度可視化以及方劑聚類可視化等子功能模塊,為工作人員提供開展中藥方劑數(shù)據(jù)分析各流程業(yè)務(wù)活動(dòng)的交互界面。
系統(tǒng)主要側(cè)重于建立統(tǒng)一規(guī)范的中藥方劑領(lǐng)域復(fù)雜網(wǎng)絡(luò)構(gòu)建流程,輔助專業(yè)人員分析藥材配伍規(guī)律,為中醫(yī)臨床診治提供幫助。因此,我們著重介紹中藥方劑網(wǎng)絡(luò)模型設(shè)計(jì)、復(fù)雜網(wǎng)絡(luò)的構(gòu)建與存儲、方劑網(wǎng)絡(luò)的分析與計(jì)算以及可視化等系統(tǒng)實(shí)現(xiàn)的關(guān)鍵技術(shù)。
中藥方劑復(fù)雜網(wǎng)絡(luò)模型設(shè)計(jì)是本系統(tǒng)設(shè)計(jì)過程中最為關(guān)鍵和重要的環(huán)節(jié),復(fù)雜網(wǎng)絡(luò)模型設(shè)計(jì)是分析中藥方劑數(shù)據(jù)特征的有效手段[8]。結(jié)合中藥方劑復(fù)雜網(wǎng)絡(luò)分析中關(guān)鍵節(jié)點(diǎn)發(fā)現(xiàn)和社團(tuán)劃分等任務(wù),對中藥方劑數(shù)據(jù)分析系統(tǒng)進(jìn)行復(fù)雜網(wǎng)絡(luò)模型設(shè)計(jì)。
方劑復(fù)雜網(wǎng)絡(luò)由節(jié)點(diǎn)和關(guān)系組成,其網(wǎng)絡(luò)結(jié)構(gòu)由系統(tǒng)資源庫的概念模型決定,在綜合考慮系統(tǒng)應(yīng)用場景和數(shù)據(jù)庫性能的前提下設(shè)計(jì)復(fù)雜網(wǎng)絡(luò)模型。系統(tǒng)結(jié)合癥狀信息數(shù)據(jù)、證候信息數(shù)據(jù)、藥材信息數(shù)據(jù)構(gòu)建網(wǎng)絡(luò)。復(fù)雜網(wǎng)絡(luò)模型的設(shè)計(jì)按照以下兩個(gè)原則:一是能夠表示整個(gè)中藥方劑關(guān)系網(wǎng)絡(luò);二是能夠提高數(shù)據(jù)庫的查詢效率。中藥方劑網(wǎng)絡(luò)結(jié)構(gòu)可以抽象為癥狀、證候、藥材等實(shí)體通過藥材相互作用關(guān)系、連接頻次關(guān)系等構(gòu)成的一張網(wǎng)絡(luò),中藥方劑復(fù)雜網(wǎng)絡(luò)模型設(shè)計(jì)如圖5所示。
圖5 中藥方劑復(fù)雜網(wǎng)絡(luò)模型
考慮到方劑網(wǎng)絡(luò)的表征能力以及在查詢使用中的效率。對于方劑復(fù)雜網(wǎng)絡(luò)的構(gòu)建,關(guān)系型數(shù)據(jù)庫中表存儲在處理復(fù)雜關(guān)系時(shí),存在多表操作和深層查詢等問題,因此表查詢操作較于圖查詢更繁瑣。而Neo4j 圖數(shù)據(jù)庫存儲結(jié)構(gòu)主要為節(jié)點(diǎn)和關(guān)系,為此要在表存儲結(jié)構(gòu)與圖存儲結(jié)構(gòu)之間實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)化。中藥方劑復(fù)雜網(wǎng)絡(luò)的節(jié)點(diǎn)與關(guān)系結(jié)構(gòu)見圖6。網(wǎng)絡(luò)包含節(jié)點(diǎn)和關(guān)系兩類,節(jié)點(diǎn)包含藥材、癥狀、證候、藥方;關(guān)系包含組成、治療、配伍。節(jié)點(diǎn)都有相應(yīng)的屬性、標(biāo)簽及主鍵,如藥材節(jié)點(diǎn)存儲了藥材編號、藥材名稱、藥材藥味、藥材藥性、藥材功效等屬性,作為主鍵的藥材編號是藥材節(jié)點(diǎn)的唯一標(biāo)識,節(jié)點(diǎn)具有多個(gè)標(biāo)簽;網(wǎng)絡(luò)中的關(guān)系用于存儲屬性及類型?;诖搜芯康幕A(chǔ)上完成數(shù)據(jù)從表存儲到圖存儲的轉(zhuǎn)化,在中藥方劑復(fù)雜網(wǎng)絡(luò)系統(tǒng)中更好的發(fā)揮圖數(shù)據(jù)庫查詢的優(yōu)勢。
圖6 復(fù)雜網(wǎng)絡(luò)節(jié)點(diǎn)、關(guān)系、屬性
方劑復(fù)雜網(wǎng)絡(luò)由關(guān)系型數(shù)據(jù)庫MySQL 經(jīng)過數(shù)據(jù)處理后,按照復(fù)雜網(wǎng)絡(luò)模型進(jìn)行圖存儲結(jié)構(gòu)轉(zhuǎn)化形成。圖數(shù)據(jù)庫的數(shù)據(jù)導(dǎo)入方式有多種形式,其中包括Cyphter create 語句、Cypher load csv 語句、Py2neo、neo4j-import、neo4j-admin、neo4j-apocload 等。系 統(tǒng)采用Py2neo 對Neo4j 圖數(shù)據(jù)庫進(jìn)行操作,以新冠肺炎藥方為例,導(dǎo)入相關(guān)數(shù)據(jù)節(jié)點(diǎn)、關(guān)系以及屬性。數(shù)據(jù)導(dǎo)入完成后會(huì)在指定路徑下生成圖數(shù)據(jù)庫。打開Neo4j 服務(wù),對配置文件中數(shù)據(jù)庫位置進(jìn)行修改,輸入網(wǎng)址(http://localhost:7474/browser/)連接到指定數(shù)據(jù)庫實(shí)現(xiàn)數(shù)據(jù)的存儲和查詢。根據(jù)圖所述的中藥方劑網(wǎng)絡(luò)模型進(jìn)行復(fù)雜網(wǎng)絡(luò)建模,對Mysql 數(shù)據(jù)庫進(jìn)行數(shù)據(jù)抽取及特征分析等操作,基于py2neo 庫進(jìn)行方劑數(shù)據(jù)的導(dǎo)入,在前端界面實(shí)現(xiàn)圖數(shù)據(jù)庫的查詢和可視化操作,如圖7所示。
圖7 圖數(shù)據(jù)庫Neo4j界面
系統(tǒng)基于PyQt 工具包,使用Python3.7 版本在Pycharm 中編寫程序,數(shù)據(jù)可視化工具采用PyEcharts。PyQt是用于跨平臺的GUI程序開發(fā)的工具包,將強(qiáng)大的GUI庫與Python語言結(jié)合,利用QtDesigner設(shè)計(jì)主界面,生成的UI 文件可以轉(zhuǎn)換成Python 文件。QtDesigner可以直接設(shè)計(jì)系統(tǒng)UI 界面,還可以將主程序與UI 界面分離開來,使得UI 界面設(shè)計(jì)與主程序開發(fā)互不影響。PyEcharts 是Python 開發(fā)中用來生成Echarts 類的第三方庫,是Python 的一個(gè)可視化框架,內(nèi)置了30 多種常見圖表,通過高度靈活的配置項(xiàng),設(shè)計(jì)出精美的圖表,為中藥方劑數(shù)據(jù)復(fù)雜網(wǎng)絡(luò)分析結(jié)構(gòu)可視化提供強(qiáng)有力的支持。以新冠肺炎藥方數(shù)據(jù)為例,中藥方劑數(shù)據(jù)分析中聚類可視化效果如圖8所示。
圖8 聚類可視化
根據(jù)實(shí)驗(yàn)結(jié)果可以看出,系統(tǒng)采取的可視化方案對中藥方劑復(fù)雜網(wǎng)絡(luò)數(shù)據(jù)分析的展示效果較好,充分滿足系統(tǒng)需求。
系統(tǒng)應(yīng)用主要包括方劑分析、藥材推薦、智能問答等三個(gè)大方向,方劑分析研究分為關(guān)鍵節(jié)點(diǎn)分析、社團(tuán)劃分等功能模塊,以系統(tǒng)關(guān)鍵節(jié)點(diǎn)分析功能為例,實(shí)現(xiàn)“藥方-藥材”復(fù)雜網(wǎng)絡(luò)中關(guān)鍵藥材節(jié)點(diǎn)計(jì)算。通過新冠肺炎藥方數(shù)據(jù),利用復(fù)雜網(wǎng)絡(luò)的節(jié)點(diǎn)中心性所涉及的算法。比如:度中心性、中介中心性、接近中心性、特征向量中心性等,來對中藥節(jié)點(diǎn)中某些重要特征做科學(xué)有效的細(xì)致分析。期望可以從現(xiàn)有藥方數(shù)據(jù)中挖掘出藥材關(guān)鍵節(jié)點(diǎn)。藥材節(jié)點(diǎn)對應(yīng)的中心性值越高,則表明該節(jié)點(diǎn)在網(wǎng)絡(luò)中占據(jù)的位置越重要,也意味著該藥材節(jié)點(diǎn)在方劑中發(fā)揮著重要的作用。
新冠肺炎方劑數(shù)據(jù)的關(guān)鍵節(jié)點(diǎn)分析結(jié)果如圖9。
圖9 方劑數(shù)據(jù)關(guān)鍵節(jié)點(diǎn)分析結(jié)果圖
由系統(tǒng)關(guān)鍵節(jié)點(diǎn)計(jì)算結(jié)果可知,黃芪、金銀花以及防風(fēng)等藥材在新冠肺炎方劑中具有較高中心性值,并且對于重要節(jié)點(diǎn)的度中心性、接近中心性和特征向量中心性等具有相似的排名??梢缘贸觯S芪、金銀花和防風(fēng)是治療新冠肺炎的關(guān)鍵藥材。
本文根據(jù)現(xiàn)實(shí)中藥方劑復(fù)雜關(guān)系的數(shù)據(jù)特點(diǎn)及實(shí)際應(yīng)用,提出了中藥方劑數(shù)據(jù)分析研究系統(tǒng)建設(shè)需求及總體設(shè)計(jì),對系統(tǒng)關(guān)鍵技術(shù)進(jìn)行研究,通過構(gòu)建新冠肺炎方劑的復(fù)雜網(wǎng)絡(luò)并進(jìn)行網(wǎng)絡(luò)分析,驗(yàn)證了該系統(tǒng)設(shè)計(jì)的可行性和正確性。本文的研究工作對復(fù)雜網(wǎng)絡(luò)研究在中藥方劑數(shù)據(jù)分析系統(tǒng)的現(xiàn)實(shí)應(yīng)用中具有一定的價(jià)值,可有效地幫助中醫(yī)藥領(lǐng)域?qū)<曳治鲋兴幏絼┨N(yùn)含的復(fù)雜數(shù)據(jù)關(guān)系。接下來,還需要進(jìn)一步研究中醫(yī)藥領(lǐng)域復(fù)雜網(wǎng)絡(luò)分析方法在系統(tǒng)中的應(yīng)用,并結(jié)合實(shí)際應(yīng)用完善系統(tǒng)算法,同時(shí)對中藥方劑復(fù)雜網(wǎng)絡(luò)社團(tuán)劃分等功能進(jìn)行完善。