閻玉婷,李雨紅,鄭水飛
(江西中醫(yī)藥大學計算機學院,南昌 330004)
中醫(yī)藥是我國重要的衛(wèi)生、經(jīng)濟、科技、文化和生態(tài)資源,傳承創(chuàng)新發(fā)展中醫(yī)藥是新時代中國特色社會主義事業(yè)的重要內(nèi)容[1]。隨著中成藥使用規(guī)模的不斷擴增,藥品說明書不明確、用藥不規(guī)范、安全性評價體系不完善等問題逐漸顯現(xiàn),且目前針對中成藥多背景數(shù)據(jù)而建立的數(shù)據(jù)庫和應用系統(tǒng)較少,很多中成藥信息得不到及時的更新,不同數(shù)據(jù)之間的關系也難以得到很好的挖掘利用,這一定程度上給患者的健康安全帶來隱患,導致用藥不良事件的發(fā)生[2]。
基于此,本文構建中成藥多背景數(shù)據(jù)協(xié)作共享與可視化系統(tǒng),旨在通過中成藥數(shù)據(jù)資源協(xié)作共享及可視化方式增強中成藥數(shù)據(jù)管理,降低中成藥不良反應發(fā)生率,實現(xiàn)信息交流與共享,積極為中成藥使用規(guī)范化和中醫(yī)藥行業(yè)發(fā)展提供服務。
中醫(yī)藥信息資源所涉及的范圍與學科越來越廣泛,海量的中醫(yī)藥數(shù)據(jù)通過互聯(lián)網(wǎng)、各類醫(yī)療終端設備等渠道產(chǎn)生,圍繞這些數(shù)據(jù)的采集、分析、應用而展開的研究也日益豐富。為了實現(xiàn)面向用戶臨床與科研需求,建立多學科、多類型的個性化、特色化中醫(yī)藥信息數(shù)據(jù)存儲與研究利用,更好地服務于讀者和用戶[3],中醫(yī)藥信息科研工作者們一直以來都想要尋找便捷、有效的方式來對這些信息資源進行管理,來實現(xiàn)數(shù)據(jù)資源的有效利用。
目前,我國已經(jīng)建立了一些中醫(yī)藥科技文獻數(shù)據(jù)庫和中醫(yī)藥事實型數(shù)據(jù)庫[4],這些數(shù)據(jù)庫是我國中醫(yī)藥信息數(shù)字化的成果,為中成藥的應用和研究提供了有力支撐。但這些數(shù)據(jù)庫也存在以下問題:一是數(shù)據(jù)內(nèi)容單一化明顯,具體表現(xiàn)為數(shù)據(jù)來源主要是醫(yī)院信息科和相關研究機構,且這些數(shù)據(jù)大多是屬于同一類型,如中成藥本身具有的屬性:藥品名稱、成分、主治等,缺乏流通信息,如廣告招商等。二是數(shù)據(jù)獲取和更新不及時,目前中成藥數(shù)據(jù)信息的標準化水平不一,導致數(shù)據(jù)清洗復雜程度增加,工作量增大,進而降低了數(shù)據(jù)更新的及時性。三是數(shù)據(jù)展示直觀性不好,數(shù)據(jù)的呈現(xiàn)方式主要是表格和列表,難以對數(shù)據(jù)進行直觀的理解和分析。
在計算機分類科學中,利用人眼的感知能力對數(shù)據(jù)進行交互的可視化表達以增強認知的技術,稱為可視化[5]??梢暬粌H僅是對海量數(shù)據(jù)的簡單描述,也能通過數(shù)據(jù)挖掘技術,整合各類資源,幫助人們挖掘到不可見或難以直接顯示的數(shù)據(jù)關系,從而提高數(shù)據(jù)分析、決策的能力以及數(shù)據(jù)價值轉化的效率。隨著數(shù)據(jù)可視化在中醫(yī)藥領域的研究、探討、應用日益增多,暴露出的問題也隨之增多,主要為以下幾個方面:①不同領域可視化的表示方法各不相同,難以提出規(guī)范性的可視化方法;②隨著數(shù)據(jù)網(wǎng)的復雜程度越來越高,單一的可視化方法難以表現(xiàn)出數(shù)據(jù)的內(nèi)在特性與價值;③中醫(yī)藥數(shù)據(jù)之間多存在強關聯(lián),不同的處理方式、顯示程度會導致可視化結果不明顯[6]。基于此,許多學者嘗試對可視化進行研究和探索,例如:肖永飛[7]提出了醫(yī)學數(shù)據(jù)三維可視化交互的解決方案;李正等[8]對中藥制藥過程中運用的數(shù)據(jù)集成、數(shù)據(jù)挖掘與可視化技術進行了具體的探討。
在此基礎上,本文論述了如何利用Python爬蟲技術和PostgreSQL 數(shù)據(jù)庫,構建涵蓋中成藥基礎信息、技術與標準、流通廣告、行業(yè)政策等多背景的動態(tài)數(shù)據(jù)庫,同時結合ECharts 可視化技術探究數(shù)據(jù)價值、展示數(shù)據(jù)關系,以期改善中成藥多背景信息孤立現(xiàn)象,為領域專家進一步研究提供數(shù)據(jù)服務支持。
基于前期的實踐調研和文獻查閱進行系統(tǒng)需求分析,利用爬蟲技術從互聯(lián)網(wǎng)獲取中成藥相關數(shù)據(jù),對數(shù)據(jù)進行實體識別、屬性提取、整理分析,存入對象關系型數(shù)據(jù)庫PostgreSQL,構建中成藥多背景動態(tài)數(shù)據(jù)庫;同時采用數(shù)據(jù)挖掘等技術對數(shù)據(jù)關系進行多維度探討,最后利用具有良好擴展性和兼容性的Flask 框架和ECharts 技術實現(xiàn)數(shù)據(jù)的增刪改查、批量導入導出和可視化等功能。系統(tǒng)具體實現(xiàn)流程如圖1所示。
圖1 系統(tǒng)具體實現(xiàn)流程
根據(jù)系統(tǒng)功能需求分析,將數(shù)據(jù)整理識別出12 個實體,并為每個實體提取相應的屬性,以期提高數(shù)據(jù)的標準化和規(guī)范化。系統(tǒng)主要實體間聯(lián)系E-R 圖如圖2 所示,系統(tǒng)主要實體的屬性見表1。
表1 系統(tǒng)主要實體的屬性表
圖2 系統(tǒng)主要實體間聯(lián)系E-R圖
系統(tǒng)在用戶信息表中專門設置“用戶權限”屬性,只有擁有相應權限的賬號,才能對系統(tǒng)進行操作,以期解決中成藥數(shù)據(jù)庫建設過程中出現(xiàn)的數(shù)據(jù)庫完整性、安全性和隱私保護問題。用戶權限與功能對應圖如圖3所示。
圖3 用戶權限與功能對應圖
本文采用“前端頁面+Flask 框架后端+PostgreSQL 數(shù)據(jù)庫”的架構設計,系統(tǒng)具有較強的擴展性和可維護性。前端主要應用HTML、CSS、JavaScript 設計Web 前端頁面,包括主頁、登錄/注冊、中成藥、藥典數(shù)據(jù)、藥品招標、相關政策等頁面。中成藥數(shù)據(jù)動態(tài)采集與可視化系統(tǒng)的實現(xiàn)分為前端和后端兩個部分。后端則是使用Python 語言連接數(shù)據(jù)庫,與前端進行數(shù)據(jù)交互,審核和響應用戶的操作,實現(xiàn)中成藥數(shù)據(jù)的分頁展示、增刪改查、批量導入導出等功能。系統(tǒng)架構和交互流程如圖4所示,系統(tǒng)頁面結構設計如圖5所示。
圖5 系統(tǒng)頁面結構設計
2.3.1 數(shù)據(jù)增刪改查模塊設計
系統(tǒng)在每個中成藥數(shù)據(jù)共享頁面都提供了查詢功能,用戶既可以進行模糊查詢,也可以針對某一信息進行精確查詢,以便用戶更快捷地獲取信息。該系統(tǒng)每一個頁面提供的查詢字段不同,是通過相關性分析和熱度分析篩選出對用戶而言更有價值的字段,在保證數(shù)據(jù)有用性的同時,也使系統(tǒng)簡潔美觀,從而提高用戶的使用體驗。一般用戶和科研工作者可以登錄系統(tǒng)查詢中成藥的處方、功能主治、注意事項等中成藥相關技術指標,中成藥生產(chǎn)商則可以對藥品廣告、批準文號、招標信息等流通信息進行查詢。
系統(tǒng)在為用戶提供中成藥多背景數(shù)據(jù)共享的同時,還允許用戶之間相互協(xié)作,共同完善數(shù)據(jù)庫系統(tǒng)內(nèi)的數(shù)據(jù)資源。但為了保障數(shù)據(jù)庫系統(tǒng)內(nèi)數(shù)據(jù)的安全性和系統(tǒng)運行時的穩(wěn)定性,增加數(shù)據(jù)、刪除數(shù)據(jù)、修改數(shù)據(jù)功能只對權限用戶進行開放,游客用戶和普通用戶無權進行此類操作。
(1)添加數(shù)據(jù)功能:該功能可以幫助用戶將來源不同的數(shù)據(jù)資源整合為可用的數(shù)據(jù)集,為用戶提供更加便捷和高效的數(shù)據(jù)協(xié)作共享服務,用戶在輸入對應的字段后即可完成對單條數(shù)據(jù)的增加。
(2)刪除數(shù)據(jù)功能:中成藥數(shù)據(jù)有著較強的時效性,系統(tǒng)中存儲的數(shù)據(jù)可能會隨著時間的推移而變得過時或者出現(xiàn)重復存儲的情況,用戶可以使用刪除數(shù)據(jù)功能來釋放存儲空間,降低數(shù)據(jù)冗余。當用戶點擊刪除時,系統(tǒng)會彈出確認提示框,點擊“確認”按鈕后即可完成刪除操作。
(3)修改數(shù)據(jù)功能:當用戶發(fā)現(xiàn)某條數(shù)據(jù)有細微差錯或流通信息有滯納性時,可以使用該功能對該數(shù)據(jù)進行修改和更新。用戶點擊某條數(shù)據(jù)的“編輯”按鈕后,系統(tǒng)將彈出該條數(shù)據(jù)內(nèi)容編輯框,用戶可以對相應字段進行更改,點擊更新即可完成對數(shù)據(jù)的修改。
2.3.2 數(shù)據(jù)批量導入導出模塊設計
為了提高對數(shù)據(jù)的處理效率,減少手動輸入數(shù)據(jù)的錯誤率,系統(tǒng)提供了批量導入數(shù)據(jù)和批量導出數(shù)據(jù)的功能。用戶點擊“上傳文件”按鈕,在彈出的文件選擇框中選擇已根據(jù)字段整理好的Excel 文件,再點擊“批量導入”按鈕即可完成大量數(shù)據(jù)的寫入。這使得用戶不必一條條添加數(shù)據(jù),大大節(jié)省了時間,提升了協(xié)作效率。同時,用戶也可以根據(jù)需求批量導出數(shù)據(jù)。用戶可以對整個數(shù)據(jù)庫進行下載,也可以先對數(shù)據(jù)進行條件檢索,然后點擊“導出數(shù)據(jù)”按鈕將檢索結果以Excel 的格式保存到本地電腦,便于對數(shù)據(jù)進行分發(fā)和研究。同樣因為考慮到數(shù)據(jù)安全和系統(tǒng)穩(wěn)定性,該部分功能也只面向權限用戶開放。
2.3.3 數(shù)據(jù)可視化與應用模塊設計
數(shù)據(jù)可視化可以將數(shù)據(jù)之間潛在的關系以圖表的形式形象直觀地展示出來,幫助用戶從不同的角度分析和研究數(shù)據(jù),使其更好地理解和發(fā)現(xiàn)數(shù)據(jù)的規(guī)律和趨勢。因此,該系統(tǒng)將爬取到的中成藥大數(shù)據(jù)進行清洗與整合,將有價值的藥品數(shù)據(jù)用不同的ECharts 圖表展示出來,為用戶提供可視化服務。同時,對中成藥成分和說明書進行挖掘,分析中成藥中含有的有毒成分、用法用量、不良反應等數(shù)據(jù),構建中成藥知識圖譜,實現(xiàn)對中成藥的風險預警,幫助用戶做出更安全的用藥決策。
(1)查詢數(shù)據(jù):當用戶在頁面輸入相應的檢索條件時,系統(tǒng)通過request()方法獲取前端表單傳來的各字段內(nèi)容,連接數(shù)據(jù)庫,通過‘SELECT * FROM’查詢語句實現(xiàn)對數(shù)據(jù)的檢索,最后使用render_template()方法將數(shù)據(jù)傳到前端頁面完成數(shù)據(jù)的查詢。
(2)添加數(shù)據(jù):系統(tǒng)將通過request()方法獲取用戶在彈出的數(shù)據(jù)添加框中填寫各字段信息,再在后端定義常量來接收這些數(shù)據(jù),通過比對數(shù)據(jù)庫,查詢是否已存在該條數(shù)據(jù),如果不存在,就將數(shù)據(jù)存入數(shù)據(jù)庫并將其更新到系統(tǒng)頁面,否則添加失敗。系統(tǒng)添加數(shù)據(jù)功能頁面如圖6所示。
圖6 系統(tǒng)添加數(shù)據(jù)功能頁面
(3)刪除數(shù)據(jù):用戶進行刪除操作時,系統(tǒng)將會彈出一個確認框以供確認,有效地防止用戶因操作不當而誤刪數(shù)據(jù)的情況。如果用戶確認刪除該條數(shù)據(jù),系統(tǒng)后端將調用相應的remove()方法完成對數(shù)據(jù)的刪除。
(4)修改數(shù)據(jù):當用戶需要對某條數(shù)據(jù)進行修改時,可以在彈出的數(shù)據(jù)修改框中修改數(shù)據(jù)內(nèi)容并點擊“更新數(shù)據(jù)”按鈕,前端將數(shù)據(jù)傳給后端相應的update()方法進行處理,再將處理結果存儲到數(shù)據(jù)庫,同時傳回前端對系統(tǒng)頁面進行更新,從而完成對數(shù)據(jù)的修改。
批量導入數(shù)據(jù)功能主要使用Python 語言的xlrd類庫實現(xiàn)。當用戶點擊“上傳文件”按鈕把Excel 文件信息傳遞給系統(tǒng),后端將接收到文件并通過for 循環(huán)完成對文檔的掃描讀取,最后使用insert into 語句將數(shù)據(jù)存入對應的數(shù)據(jù)表中。系統(tǒng)批量導入數(shù)據(jù)功能頁面如圖7所示。
圖7 系統(tǒng)批量導入數(shù)據(jù)功能頁面
批量導出數(shù)據(jù)功能主要使用Python 語言的xlwt 類庫實現(xiàn),當用戶點擊“導出數(shù)據(jù)”按鈕后,響應頭會將文件類型傳遞給瀏覽器,系統(tǒng)后端使用Workbook()方法創(chuàng)建Excel文件,最后通過for 循環(huán)和write()方法將數(shù)據(jù)寫入單元格,完成數(shù)據(jù)的批量導出。
ECharts 是一款基于JavaScript 的數(shù)據(jù)可視化圖表庫,提供直觀生動、可交互、可個性化定制的數(shù)據(jù)可視化圖表。它能夠兼容絕大部分主流瀏覽器,可以跨平臺流暢運行,并且具備千億級數(shù)據(jù)可視化渲染能力[9]。同時ECharts 還支持各種圖表相互組合[10],有助于解決因可視化方法單一而難以表現(xiàn)數(shù)據(jù)的內(nèi)在特性與價值的問題。
本系統(tǒng)通過對數(shù)據(jù)關系的挖掘,選取了用戶感興趣的部分,如特殊性藥材信息、中成藥保護品種信息、中成藥廣告信息、中成藥熱詞進行可視化展示,頁面詳情如圖8所示。
圖8 系統(tǒng)可視化圖表頁面詳情
(1)特殊性藥材毒性分析:采用餅狀圖展示不同毒性的中藥材的數(shù)量和占比,用戶可以點擊“查看詳情”,進一步查詢不同級別含有毒性藥材制藥量的相關分析。
(2)中成藥保護品種劑型:采用柱狀圖展示中成藥保護品種的劑型分布。
(3)全國中成藥廣告分布:以中國地圖為載體,以省份為統(tǒng)計單位,用深淺不同的顏色表示該省份的中成藥廣告數(shù)量,用戶可以非常直觀地了解中成藥廣告分布情況。
(4)中成藥保護終止日期:將柱狀圖和折線圖結合起來,從多維度展示到達終止日期的中成藥保護品種的數(shù)量的逐年變化趨勢。
(5)中成藥熱詞詞云:詞語字體越大,索引熱度就越高,可以進一步反映當下中成藥研究熱點。
3.4.1 構建中成藥知識圖譜
知識圖譜是在互聯(lián)網(wǎng)大數(shù)據(jù)背景下產(chǎn)生的一種新穎的知識管理與服務模式,能夠捕捉并呈現(xiàn)事物之間的關聯(lián)關系,可以將瑣碎零散的知識片段連接起來[11]。知識圖譜能將多背景的領域概念整合起來,更好地反映中成藥數(shù)據(jù)中尚未發(fā)現(xiàn)的關聯(lián)性和規(guī)律性,為解決中醫(yī)藥領域的“知識孤島”問題提供了理想的技術手段[12]。同時,知識圖譜能夠為用戶提供全面、準確的中成藥數(shù)據(jù)支持,幫助用戶進行用藥決策,提高用藥決策的準確性和效率。
構建知識圖譜最主要的一個步驟就是把數(shù)據(jù)從不同的數(shù)據(jù)源中抽取出來,然后按一定的規(guī)則加入到知識圖譜中,即知識抽取。本文選取中成藥名稱作為實體結點,以成分、功能主治、用法用量、不良反應和禁忌為一級屬性結點,并以其相應的內(nèi)容作為二級屬性結點,運用ECharts 建立中成藥知識圖譜。以“驚風散”為例,通過知識圖譜可以發(fā)現(xiàn)驚風散主治腹脹、積食、小兒急驚風等病癥,會出現(xiàn)惡心、嘔吐、便溏等不良反應?!绑@風散”知識圖譜如圖9 所示。同時,我們用不同的顏色將實體結點和一級屬性結點予以區(qū)分,并且在知識圖譜左上角設置了“自定義展示內(nèi)容”的功能,以解決知識圖譜關聯(lián)過多結點而影響展示效果的問題[13]。
圖9 “驚風散”知識圖譜
3.4.2 中成藥知識圖譜可視化應用
本系統(tǒng)以《中華人民共和國藥典(2020版)》[14]收錄的83 種有毒中藥(以半數(shù)致死量(LD50)分級法[15]為依據(jù))建立“大毒”“有毒”“小毒”列表,將用戶輸入的中成藥的成分與三個列表分別進行遍歷對比,得到有毒成分,實現(xiàn)中成藥成分安全性風險分析功能。同時,將中成藥說明書中的注意事項從數(shù)據(jù)庫中提取出來,結合前文構建的中成藥知識圖譜,將數(shù)據(jù)展示到頁面,從而建立中成藥風險預警模塊。用戶可以使用該模塊來檢索某中成藥的有毒成分以及服用該藥時的注意事項,還可以通過知識圖譜的形式了解其成分、功能主治、用法用量等信息?!绑@風散”的風險預警界面如圖10所示。
圖10 “驚風散”的風險預警界面
本文講述了中成藥多背景數(shù)據(jù)協(xié)作共享與可視化系統(tǒng)的設計與實現(xiàn),在調查和分析國內(nèi)外研究現(xiàn)狀的基礎之上,運用Python 爬蟲技術采集中成藥大數(shù)據(jù),對數(shù)據(jù)進行實體識別、屬性提取、整理分析,并將其存入PostgreSQL 數(shù)據(jù)庫,構建包括中成藥政策、技術與流通等多背景的數(shù)據(jù)庫。通過使用Python 輕量級框架Flask 設計實現(xiàn)系統(tǒng)增刪改查等相關功能,應用HTML 頁面框架、CSS頁面樣式、JavaScript等技術進行前端頁面設計。同時,為了深度挖掘探討中成藥數(shù)據(jù)之間的潛在映射關系,除了使用ECharts 可視化圖表對數(shù)據(jù)進行基礎展示之外,還構建了風險預警知識圖譜,使人們對中成藥的成分、用法用量、服用禁忌有更清晰的了解,從而降低中成藥不良反應事件的發(fā)生率。目前,本文設計實現(xiàn)的系統(tǒng)仍然存在著不足和缺陷,在后續(xù)研究中將繼續(xù)從以下三個方面深入研究:
(1)增強系統(tǒng)數(shù)據(jù)覆蓋面。目前本系統(tǒng)數(shù)據(jù)庫中尚無中成藥生產(chǎn)廠家、市場銷售等相關數(shù)據(jù),后續(xù)將通過爬蟲技術從互聯(lián)網(wǎng)中收集或依靠用戶的協(xié)作共享來建立該部分數(shù)據(jù)的數(shù)據(jù)庫,進一步提高數(shù)據(jù)庫的完整性。
(2)優(yōu)化數(shù)據(jù)庫系統(tǒng)結構。隨著數(shù)據(jù)量的增加,后續(xù)將嚴格按照數(shù)據(jù)規(guī)范化理論對數(shù)據(jù)庫進行優(yōu)化,控制數(shù)據(jù)冗余,避免異常操作,提高系統(tǒng)的穩(wěn)定性、數(shù)據(jù)庫的安全性,更好地確保數(shù)據(jù)庫中數(shù)據(jù)的有效性和一致性。
(3)深入探究數(shù)據(jù)隱藏關聯(lián)。目前系統(tǒng)風險預警模塊尚且只能進行有毒成分的檢測以及簡單的知識圖譜檢索,未能深度分析有毒成分與中成藥規(guī)格用量和不良反應之間的關系。后期將繼續(xù)挖掘中成藥相關數(shù)據(jù),豐富優(yōu)化風險預警知識圖譜,不斷提高中成藥用藥的安全性,促進中成藥現(xiàn)代化、信息化發(fā)展。