沈夢碧,程祉元,肖易飛,高小 ,杜慧江
(上海健康醫學院醫療器械學院,上海 201318)
信息化數據時代已經到來,各行各業都充斥著數據分析的影子,公共衛生領域也不例外。2015 年國務院在《促進大數據發展行動綱要》中指出:堅持創新驅動發展,加快大數據部署,深化大數據應用,已成為穩增長、促改革、調結構、惠民生和推動政府治理能力現代化的內在需要和必然選擇。新冠肺炎疫情發生后,我國相關專家意識到傳統的衛生統計知識已經不能很好預防和解決突發性公共衛生事件的問題,基礎的統計知識無法滿足公共衛生中對大量數據分析的需求,讓很多非常有價值的數據因為缺乏了解和分析而沒有得到重視和利用。目前與數據分析有關的軟件有很多,例如SAS,R,SPSS 等,但基于Python的數據分析近年來在公共衛生領域逐漸嶄露頭角并面臨著前所未有的機遇和挑戰。
Python 是以C 語言為基礎的一種程序語言,具有較強的面向對象的特點,消除了保護類型、抽象類和接口等面向對象的元素,Python 中沒有分號、begin、end 等標記,僅保留31 個字符[1]。相對于R 和SAS 等語言而言,Python 語法更加簡單,代碼十分容易被讀寫,門檻更低。在處理大型數據的時候,繁雜的數據能被轉化成可運算的數字形式,使最后的數據結果簡單易懂,一目了然。Python 在數據分析和交互計算以及數據可視化等方面有著無與倫比的優勢。最重要的是,Python 擁有numpy、matplotlib、scikit-learn、pandas、ipython 等一眾優秀開源的第三方庫,性價比遠遠高于收費昂貴的SAS。基于Python 的BeautifulSoup 庫可以快速高效地爬取網站數據,pandas 工具能方便靈活地清洗分析數據,調用Python 的Matplotlib 工具包能便捷地把數據分析結果圖形可視化,具有良好的跨平臺交互特性[2]。尤其是pandas,在處理表格和異質型數據方面可以說有著獨特的優勢,已經成為各行業中重要的數據分析工具。
由于Python 所具有強大的接合性特點,因此它也被親切地稱為“膠水”語言。它可以與其他編程語言自然對接,使它處理起復雜的數據時更為強大,范圍應用更加廣泛[3]。因此僅Python數據分析一種技術就可以解決大部分的業務問題,這充分體現出Python 與各個業務之間的融合。如果僅僅只是統計工作,或者只是單獨一人對數據進行分析,用R 或許會更加快捷。但如果需要各個領域一起合作,并且工作內容涉及統計以外,那么用Python 的效率遠遠高于R。此外,大量的數據意味著存在更多的缺失和異常值。Python 相對于其他語言在清洗噪聲方面做得非常優秀,因為它有專門的函數和庫對數據進行清洗,方便后續更深入地數據分析。醫學工作者可以利用Python 中的fillna 函數補全缺失值,再使用pandas 庫中DataFrame 的duplicated 方法查明重復的數據并刪除,還可以用seaborn 繪制出數據的箱形圖,從而鑒別出數據中差異較大的信息。公共衛生領域引入Python 數據分析并不是為了代替傳統的衛生統計技術,相反,它是衛生統計的衍生和拓展。Python 數據分析的特點是可以將散落的樣本整合成完整的大樣本,因此流行病學中前瞻性研究的報告偏倚會明顯減少,從而使得出的結果更準確。
大數據分析的核心就是預測。目前衛生保健工作者能確定的健康影響因素只有10%~15%,剩下85%~90%(包括健康行為、遺傳、自然和社會經濟環境因素等)尚未知曉[4]。一直以來,基本的衛生統計只能做到“就事論事”,對未來的疾病預防監控極為困難,但基于Python 的數據分析可以讓高效率疾病預防的夢想逐漸實現。Davide Chicco 和Giuseppe Jurman 等兩位科學家收集整理了299 名心力衰竭患者的醫療記錄,這些患者數據來自2015 年4 月至12 月巴基斯坦費薩拉巴德心臟病研究所和費薩拉巴德聯合醫院。他們應用了多個Python 機器學習分類器來預測患者的生存率,并根據最重要的危險因素對特征進行排序。同時還利用傳統的生物統計學測試進行了另一種特征排序分析,并將這些結果與機器學習算法提供的結果進行比較,最終發現根據血肌酐和射血分數這兩項數據能夠很好地預測心力衰竭患者的存活率。由此可見,Python 數據分析預測較為準確,并會逐漸普及到各種疾病監測預防中。
前瞻性隊列研究實施時結局并未出現,需要預測和觀察一段時間才能得到。因為前瞻性隊列研究偏倚小,結果可信,所以受到眾多醫學工作人員的青睞,但費時費力費財等缺點大大影響了它的可實施性。時間序列分析是一種可以預測未來的方法,適用于依時間排列并預測后續結局的案例,其核心就是高效和預測,恰好彌補了前瞻性隊列研究的短板,R 和SAS 都采用這種方法。但在使用時間序列分析方法這方面,Python 似乎更勝一籌。因為在時間序列分析中,Python 語言建模過程簡單,圖形直觀,當處理的時間序列數據量較大時,Python 語言可利用其第三方庫pandas 規避循環,極大地節省程序運行時間[5],而且Python 語言對時間類數據有著超乎想象的敏感,它可以使用dateuyil 包中的parser.parse 解析時間字符串或者利用pandas的to_datetime 處理時間清單。這些都是Python 對時間序列分析特有的優勢。張佑健等[6]采用Python 數據分析中時間序列分析方法,對河南省人民醫院MDRO 感染發生率進行建模,選擇最優模型研究了2013—2017 年河南省人民醫院多藥耐藥菌(MDRO)感染發生率的變化趨勢,并預測2018 年醫院MDRO感染發生率。最后得出MDRO 感染率具有一定的季節性和周期性,并且其變化規律可以使用時間序列分析“簡單季節性”模型預測,為早期采取感染防控措施提供了科學依據。除此之外,張曉卉等[7]基于Python 語言的statsmodels 模塊,以天津市2004 年1 月—2015 年12 月結核病月發病率數據作為訓練集建立最優季節性差分自回歸移動平均(SARIMA)模型,以2016 年1—12月數據對SARIMA 模型進行效果評價,并對2017 年1 月—2019 年12 月天津市結核病月發病率進行預測。最后結果顯示,2004 年1 月—2015 年12 月天津市結核病月發病率總體呈下降趨勢,2005—2008 年出現一個發病高峰,2009 年后大幅度下降,隨后趨于平穩。2017 年1 月—2019 年12 月天津市結核病月發病率與往年相比平穩下降。
能使人群發病概率增加的因素,就可認為是流行病學的病因,其為兩大類,一類是充分病因,一類是組分病因。很多疾病都有著很多充分病因和組分病因。醫學工作者想從中提取出有用的信息十分困難,此時就可利用Python 的爬蟲和數據分析技術。可對醫院病例數據庫中的數據進行處理和分析,將所有發病因素納入同一個列表之中,然后計算相同發病因素在列表中出現的次數,并探究它們之間的密切程度,了解哪一種病因是導致發病的最主要原因,為醫學工作者提供參考。金勇[8]利用Python 語言中的Tensorflow 包,實現了乳腺鉬靶圖像加載并對位顯示、乳腺圖像放大顯示、窗寬窗位調整、乳腺鈣化灶自動檢測等功能,更好地分析了乳腺癌產生的病因,解決了當下傳統醫學檢測中存在檢測結果假陽性多、檢測速度慢等問題。
國外雜志Lancet 發表了一篇關于流行病學隊列研究的數據分析論文,研究人員利用Python 數據分析中的深度學習算法,研究了從印度約20 個中心收集的包含313 318 次頭部CT掃描的數據集及其臨床報告,最后得出深度學習算法可以準確識別頭部CT 掃描異常,并提醒醫務人員對異常部分需要特別關注[9]。用這些算法自動進行頭部CT 掃描的會診過程也是可行的,可以提高放射科醫生的診斷效率。
在疫情數據采集方面,數據分析要遠優于傳統的醫療數據采集技術。它可以在Python 的各種數據分析包的幫助下,對獲得的雜亂無章的數據進行數據聚合和分組操作,并利用pandas和seaborn 包繪出疫情傳染分布圖,更為準確地確定疫情的源頭,并采取措施制約疫情傳播的速度(如隔離感染者、封閉發源地等),從根本上縮小疫情傳播范圍。新型冠狀病毒全球大流行中,數據分析異軍突起,大量應用于對疫情的精準控制,發揮了重要的作用。2020 年1 月,國務院就疫情形勢頒布《近期防控新型冠狀病毒感染的肺炎工作方案》,其中指出要充分應用“大數據+ 網格化”等手段助力疫情防治工作;“大數據+ 網格化”主要是指將城市按社區、街道等劃分為大小網格單元,實施網格片區化管理,利用大數據技術等按網格化片區進行信息收集和數據整合,建立網格化的數據庫,并及時匯報給上級數據庫[10]。正因為在突發公共衛生事件中加入了數據分析的干預,相關部門才能獲得最及時的病例情報,第一時間掌控疫情走向。Python對突發公共衛生事件的精準控制體現在兩個方面:第一,為一級預防減負。我國公民目前對公共衛生的了解并不透徹,甚至不能意識到突發性公共衛生事件的嚴重性。數據分析能利用Python 的爬蟲技術及時統計各地異常患者數據,并預測異常患病是否會衍生為暴發性傳染病,利用微信公眾號或電視廣播等通俗易懂的形式發布給該地區公民,從而提高公民對傳染病的關注度,有效降低疫情暴發概率。第二,監測預警。全國各省防控機構根據此地區醫療水平和人口基數,提前制訂適用于此地區的突發事件監測方案,然后收集數據,對監測數據進行多層索引和重塑,將整理好的異常數據及時上報,利用雙向性隊列研究分析探討數據異常原因,制訂高效經濟的應對策略。
Gartner 發布的2014 年新興技術成熟度曲線顯示,未來5~10 年大數據技術將會成熟應用于各個領域,公共衛生領域也不例外。然而應用越廣泛,風險形勢也就越嚴峻,目前,基于Python 的數據分析在公共衛生領域應用面臨著如下挑戰。
我國數據分析的發展速度遠不及發達國家。一方面,我國目前甚至沒有一個完整系統的醫學數據庫;另一方面,傳統的數據分析門檻過高,不利于學習掌握,而熟練掌握傳統數據分析的高級專業人員又很少,更不用說基層的公共衛生工作人員。反觀美國,早已建立NCDB、SEER、TCGA、Orphanet 等一系列醫學數據庫,這些數據庫分類明確細致,數據多而廣,成為美國公共衛生預防的權威來源。再者,如Kaplan Meier Plotter 數據庫中所有的數據分析代碼早已打包封裝完成,可以直接登錄使用,使用者只需單純輸入獲得的數據,數據庫便可以自動分析出數據的mRNA 表達譜芯片,基因表達和疾病預后的信息一目了然。這種專業而又簡便的數據庫正是我國目前所缺少的。
公共衛生領域的數據分析以公民日常健康狀況為錄入數據對象,必定會涉及人群的隱私信息,如疾病史、個人信息,甚至基因、蛋白數據等,一旦泄露,可能會對患者個體的日常生活造成不可預料的侵擾[11],因此開展此類錄入是一項非常嚴謹的工作。數據分析工作者要堅守職業道德,力求可以在每一位調查的公民身上獲得有科學價值的結果,并與被調查者簽訂保密協議,讓被調查者了解數據錄入的作用、目的以及可能的危險性,被調查者必須是自愿錄入信息。另外,要盡最大可能讓被調查者在此次數據分析中受益,如閆冠韞等運用互聯網的信息交互技術和移動應用技術,通過探討建立一體化信息系統、移動互聯網、物聯網、虛擬貨幣、人工智能5 種模式,滿足糖尿病患者醫療服務的數據信息化、便捷化需求,有效預防和控制了糖尿病[12],還要尊重被調查者自身最基本的權益,盡可能不泄露被調查者的隱私。大數據意味著大責任、大倫理,任何單位或個人使用大規模健康大數據時均應嚴格申請審查并備案,在法律允許的范圍內使用相關數據,并承擔風險責任[13]。
Python 數據分析技術在2014 年才開始在我國流行,我們對此領域的了解過于局限。中國人口眾多、地域廣闊、待解決的問題多樣、復雜,急需進行問題的提煉和解決,培養人才隊伍相當關鍵[14]。時至今日,熟知Python 數據分析的人才數目并不龐大,各大高校對于數據分析類人才培養的體系也不健全,同時精通Python 數據分析和公共衛生兩門知識的人才更是少之又少。因為這些原因,我國預防醫學數據分析的發展過于緩慢。衛生與教育主管部門應當深謀遠慮、通力合作,共同培養數據分析的專業性人才。同時,醫學教學中要充分利用大數據平臺,優化教學資源,教學中盡可能多收集病案數據,強化數據挖掘方法的應用,切實提高專業人才的數據分析能力[15]。
公共衛生數據分析具有廣闊的發展空間,也是解決特定人群健康問題的重要手段之一。相比發達國家,我國在疾病診斷治療領域的數據分析仍處于追趕階段,但在公共衛生領域,從目前新冠肺炎疫情的防控實踐來看,我國和發達國家處于同一起跑線。最終是否能將我國公共衛生領域的數據分析推動發展至世界先進水平,還需全社會多方努力。希望我們能抓住這次機會,使數據分析在疾病的監測預防、流行病學病因分析、前瞻性隊列研究和對突發性公共衛生事件的精準控制等方面發揮出巨大作用。大力推廣Python 數據分析,低投入高效率地推進數據分析在公共衛生的科研、教學、實踐中的發展。