王曉東,孫安琪,趙托亞,李佳欣,吳雅琴
(內蒙古醫科大學計算機信息學院,內蒙古 呼和浩特 010110)
健康醫療大數據已被國家列為重要的基礎性戰略資源進行大力發展和推進[1]。健康醫療大數據中蘊含著大量非常有價值的信息,但是目前很多醫療衛生機構還沒有將這些大數據充分利用起來,無法完全發掘數據的潛在價值,導致數據資源浪費。如何讓服務器中的數據發揮作用,這是很多管理者和科研工作者需要面對的問題。此外,目前對于疾病的診斷與治療很多情況下依賴于臨床醫師的經驗,缺乏大量歷史病例提供的數據參考。根據國家癌癥中心發布的最新全國癌癥統計數據顯示,肺癌位居我國惡性腫瘤發病首位,死亡率最高[2],大約每5 位癌癥死亡患者中就有1 位死于肺癌[3]。肺癌預后較差,在我國人群中其5 年生存率仍不超過20%[4],其診治產生的醫療費用對患者家庭和社會造成了嚴重負擔。檢驗項目是可以反映疾病變化的重要檢測手段。探索檢驗項目復雜組合與疾病之間的聯系,有利于優化治療措施,避免患者承受更大的痛苦[5]。本研究針對肺癌患者在醫院診療期間檢驗項目數據進行采集、處理以及可視化,以圖形、圖表形式直觀呈現數據結果。使用FP-growth 算法構建FP 樹,對數據集進行關聯分析,遞歸挖掘頻繁項集,抽取肺癌患者檢驗項目中相關數據實體及各實體間關系。
本研究使用Python 程序設計語言對數據集進行處理分析,Python 版本3.8.2,采用Anaconda3 5.1.0(64-bit)的Jupyter Notebook 作為開發環境,導入xlrd、jieba、matplotlib、wordcloud、numpy、pandas、sklearn 等包完成Excel 數據讀取、分詞、繪圖、詞云圖、科學計算、統計、機器學習等功能。
以某醫院診斷結果為肺癌、肺癌術后、肺癌術后化療、肺癌轉移、肺癌晚期的54 例患者,在醫院診療期間(2017 年10 月16 日-2018 年10 月15 日)的檢驗項目數據作為研究對象。
肺癌患者檢驗項目原始數據保存于ORACLE數據庫中,相關數據涉及12 個數據表,使用表聯接和查詢操作后,生成的數據結果集含有47 個字段,同時對其進行數據脫敏處理,保護患者隱私。為了便于使用Python 進行數據處理和分析,將數據結果導出為Excel 文件。
3.1 數據歸約 在不影響數據完整性和數據分析結果正確性的前提下,根據本研究的數據特點,對數據集進行維歸約[6],降維后的數據集包含就診號、年齡、性別、檢驗項目編號、檢驗項目名稱、檢驗項目結果值、檢驗項目結果參考標準、所屬種類等21 個字段。
3.2 數據清洗 由于原始數據可能存在“臟數據”,故需構建Python 數據檢測程序,過濾掉冗余數據,將存在噪聲數據與缺失數據的記錄刪除。經過數據清洗后,數據集共含有8921 條檢驗項目數據記錄,此數據集記為“原始數據集”。
4.1 年齡性別數據集 構建Python 程序,提取就診號、年齡和性別字段,過濾掉數據集內重復記錄,生成年齡性別數據集。
4.2 關聯分析數據集 為了使用FP-growth 算法能夠準確對肺癌患者檢驗項目進行關聯分析,構建Python 程序對原始數據集按照以下標準進行篩選與排除,處理后共計2174 條數據記錄,此數據集記為“關聯分析數據集”。
4.2.1 按檢驗次數與其他基礎疾病檢驗項目進行篩選與排除 根據相同檢驗項目求和得到總次數并降序排列,排除草酸鈣結晶、血氨等16 項檢驗次數是1 的項目,排除肺癌患者其他基礎疾病(如糖尿病、高血壓等)的檢驗項目,如空腹血糖、糖類抗原CA19-9、收縮壓、舒張壓等。
4.2.2 按檢驗結果進行篩選與排除 肺癌患者檢驗項目數據集字段RESULT_FLAG(檢驗結果)有H(高于標準值)、L(低于標準值)、M(介于標準值區間之內)3 個結果。排除結果為M 的檢驗項目,即檢驗結果為正常值的數據。保留結果值為H 和L 的檢驗項目,即檢驗結果為異常值的數據。
5.1 按性別、年齡統計 對年齡性別數據集中不同性別年齡字段的最大值、最小值和均值進行統計計算。數據集中男34 例,女20 例。統計發現男性患者最低年齡45 歲,平均年齡63.9 歲;女性患者最低年齡48歲,平均年齡64.6 歲。男女患者平均年齡差別不大。總體上男性罹患肺癌發病率高于女性,在高齡人群中表現更加明顯[7]。對本研究肺癌患者樣本數據集不同年齡段、不同性別人數進行統計,60 歲以下患者17 例,占樣本全部患者的31.5%。肺癌呈現低齡化態勢較為明顯,見圖1、圖2。

圖1 肺癌患者不同性別、年齡統計

圖2 肺癌患者不同年齡段人數統計
5.2 按檢驗項目分類統計 統計數據發現,原始數據集內檢驗項目分為尿液、靜脈血漿、痰液、胸水、靜脈全血、靜脈血清、動脈血7 個大類,每個大類中又包含若干種檢驗項目。按檢驗項目分類統計結果見表1。

表1 按檢驗項目分類統計結果
靜脈血清包含檢驗項目種類最多,達到76 項。靜脈全血次之,包含檢驗項目59 項。尿液包含35項。三者在肺癌患者所有體液檢驗項目中占74.23%,檢驗總次數占全部的94.95%。可見靜脈血清、靜脈全血以及尿液等體液檢驗項目是除了胸部X 線、CT、MRI、超聲、核素顯像、PET-CT 等影像學方法之外,對肺癌治療效果監測及預后評估的有效手段。
5.3 檢驗項目詞云圖 詞云圖可以將數據集中出現頻率較高的關鍵詞予以視覺化呈現[8]。設計Python程序,構建自定義語料庫,對肺癌患者檢驗項目數據集的檢驗項目字段進行分詞以及詞頻統計,自動過濾冗余無效內容,設置詞云圖背景顏色、隨機生成狀態等參數,生成檢驗項目詞云圖。
檢驗項目按出現次數從多到少有白細胞、紅細胞、血紅蛋白、紅細胞分布寬度SD、紅細胞壓積、平均血小板體積、淋巴細胞百分比等,白細胞在所有檢驗項目中出現次數最多,為276 次。紅細胞次之,為215 次。對數據集所有檢驗項目字段,經去除重復項處理后得到186 種。肺癌患者檢驗項目數據集出現次數最多的是白細胞,患者人均達到5.1 次。肺癌化療時,外周血中的白細胞常常會出現異常[9,10]。紅細胞人均檢驗達到3.98 次,紅細胞對于腫瘤細胞具有極強的親和作用[11,12],紅細胞的補體受體則對腫瘤細胞發揮黏附及攻擊作用[13]。檢驗項目詞云圖見圖3。

圖3 檢驗項目詞云圖
6.1 基本定義 從大規模數據集中尋找實體間的隱含關系被稱作關聯分析[14]。頻繁項集是指出現頻率較高實體的集合[15],關聯規則可以找出存在強關系實體之間的規則[16]。關聯分析是從大規模數據集中尋找事務之間的隱含關系。
關聯規則X?Y 的支持度記為support(X?Y),表示在所有事務中,項集X 和項集Y 同時出現的頻繁程度[17],如公式(1)所示。項集X 的支持度大于或等于預先設定的最小支持度閾值,則項集X 為頻繁項集。

關聯規則X?Y 的置信度記為confidence(X?Y),表示在事務數據庫Z 中,包含項集X 的事務中包含項集Y 的百分比[18],如公式(2)所示。關聯分析的目的就是找出同時滿足最小支持度閾值和最小置信度閾值的強關聯規則。

項集X 和項集Y 之間的提升度記為lift(X,Y),是表示項集X 和項集Y 的相關性度量[19],如公式(3)所示。

目前較常用的關聯分析算法有Apriori 算法和FP-growth 算法,Apriori 算法只要增加頻繁項集,就會重新掃描整個數據集。如果數據集規模很大時,會顯著降低頻繁項集挖掘速度。FP-growth 算法相比較于Apriori 算法,采用了優化的數據結構,只需要掃描兩次數據集[20],加快了挖掘速度。鑒于此,本研究采用FP-growth 算法進行關聯分析。
6.2 主程序構建與算法優化 關聯分析之前,需要構建Python 主程序,將關聯分析數據集內每名肺癌患者若干條檢驗項目數據記錄中的檢驗項目字段轉化為列表形式,然后將所有肺癌患者檢驗項目列表轉化為一個二維列表,作為FP-growth 關聯算法的輸入參數。主程序在調用FP-growth 算法運行過程中,需要對算法的參數進行調整和優化。
6.3 關聯分析結果 設置支持度為50%,置信度為70%,使用FP-growth 關聯算法挖掘檢驗項目數據集的頻繁項集。提升度大于1 的有16 個頻繁項集,其中頻繁二項集11 個,頻繁三項集5 個,使用上文6.1 的公式(1)(2)(3)計算各頻繁項集支持度、置信度、提升度。頻繁項集及結果見圖4。

圖4 頻繁項集及結果
提升度大于1 且值越高表明正相關性越高[21]。白細胞-淋巴細胞百分比、白細胞-尿膽原、血紅蛋白-紅細胞壓積、血小板壓積-淋巴細胞百分比、血小板壓積-尿膽原5 個檢驗項目對在所有頻繁項集中出現的概率均為12.50%。提升度最高[lift(X,Y)=1.67]的頻繁二項集是血紅蛋白-紅細胞,其次為血紅蛋白-紅細胞壓積、中性粒細胞百分比-淋巴細胞百分比。提升度最高[lift(X,Y)=1.67]頻繁三項集是血紅蛋白-紅細胞壓積-紅細胞,其次為白細胞-尿膽原-血小板壓積、白細胞-淋巴細胞百分比-血小板壓積。
本研究將大數據處理與分析技術應用于較少問津的檢驗項目數據,以某醫院肺癌患者在醫院診療期間檢驗項目數據作為研究對象,深入挖掘了肺癌患者檢驗項目內在規律,實現檢驗項目數據的知識發現,希冀為肺癌臨床輔助診療提供參考,促進精準醫療、適度醫療。