田學(xué)成,韓 寧
(1.國電南京自動(dòng)化股份有限公司,江蘇 南京 211100;2.武威市公安局涼州分局,甘肅 武威733000)
當(dāng)前國內(nèi)疫情形勢仍然嚴(yán)峻,防控正處于關(guān)鍵緊要時(shí)期,在“外防輸入、內(nèi)防輸出、動(dòng)態(tài)清零”的總體要求下,開展精準(zhǔn)流調(diào)工作至關(guān)重要。疫情期間開展流調(diào)工作需要依托大數(shù)據(jù)支持,數(shù)據(jù)處理結(jié)果關(guān)乎疫情防疫政策的實(shí)施,如何對(duì)流調(diào)數(shù)據(jù)快速精準(zhǔn)的定位和篩選是地方政府疫情防疫環(huán)節(jié)中重要的一環(huán)。而目前流調(diào)數(shù)據(jù)普遍呈現(xiàn)出零碎化、非結(jié)構(gòu)化特點(diǎn),導(dǎo)致公安民警在進(jìn)行流調(diào)數(shù)據(jù)處理工作時(shí),需要投入了大量時(shí)間成本和寶貴人力。本文基于MySQL數(shù)據(jù)庫快速篩選出符合條件的數(shù)據(jù),將大數(shù)據(jù)處理變得自動(dòng)化、靈活化,提高疫情流調(diào)工作的效率,提高民警對(duì)大數(shù)據(jù)處理的工作效率,為防疫工作爭取更多時(shí)間,更好地將精力投入后期的安全防控措施中去,同時(shí)減輕基層公安民警工作負(fù)擔(dān)。本文對(duì)疫情流調(diào)數(shù)據(jù)處理方法適用于臨時(shí)情況下數(shù)據(jù)處理任務(wù)?;诹髡{(diào)數(shù)據(jù)特點(diǎn),建立流調(diào)數(shù)據(jù)模型。圖1是流調(diào)數(shù)據(jù)處理流程。
圖1 流調(diào)數(shù)據(jù)處理流程
疫情流調(diào)中最初的數(shù)據(jù)格式基于xls或者xlsx居多,原始的流調(diào)數(shù)據(jù)存在時(shí)間冗余、信息重復(fù)、數(shù)據(jù)分散、數(shù)據(jù)噪音等特點(diǎn)[1],不能直接用于疫情流調(diào)工作的開展,同時(shí)Excel文件數(shù)據(jù)不屬于結(jié)構(gòu)化數(shù)據(jù),對(duì)數(shù)據(jù)的交叉處理使用率低,且數(shù)據(jù)處理函數(shù)復(fù)雜不易掌握。圖2是流調(diào)數(shù)據(jù)的特點(diǎn)。
圖2 流調(diào)數(shù)據(jù)特點(diǎn)
本文基于流調(diào)數(shù)據(jù)的特點(diǎn),設(shè)計(jì)流調(diào)數(shù)據(jù)模型。數(shù)據(jù)是大數(shù)據(jù)處理的核心,數(shù)據(jù)模型設(shè)計(jì)的原則要滿足實(shí)驗(yàn)需求,同時(shí)盡可能體現(xiàn)仿真原則。根據(jù)三大運(yùn)營商移動(dòng)號(hào)碼規(guī)則使用隨機(jī)數(shù)的方法生成隨電話號(hào)碼,按照流調(diào)時(shí)間范圍生成隨機(jī)時(shí)間,按照中文姓氏和名字生成隨機(jī)姓名,最終組合成數(shù)據(jù)模型為“手機(jī)號(hào)碼、時(shí)間、手機(jī)型號(hào)、姓名”的流調(diào)數(shù)據(jù)模型,數(shù)據(jù)單位容量為1 000。該流調(diào)數(shù)據(jù)模型同時(shí)也要滿足下面要求:
(1)同一時(shí)間有不同的人;
(2)存在同一人不同時(shí)間段出現(xiàn);
(3)允許存在出現(xiàn)時(shí)間記錄僅一次。
根據(jù)流調(diào)數(shù)據(jù)特點(diǎn)最終生成如表1所示流調(diào)模型數(shù)據(jù)。
表1 流調(diào)數(shù)據(jù)模型
2.1.1 數(shù)據(jù)清洗
流調(diào)數(shù)據(jù)模型中手機(jī)型號(hào)、通信運(yùn)營商屬于噪聲信息,流調(diào)模型數(shù)據(jù)的手機(jī)型號(hào)對(duì)防疫流調(diào)調(diào)查沒有研究意義,在數(shù)據(jù)清洗中應(yīng)當(dāng)剔除,確保流調(diào)數(shù)據(jù)過濾無干擾數(shù)據(jù)。
數(shù)據(jù)清洗是對(duì)臟數(shù)據(jù)進(jìn)行檢測和糾正的過程,對(duì)數(shù)據(jù)缺失、數(shù)據(jù)冗余、數(shù)據(jù)沖突和數(shù)據(jù)錯(cuò)誤等噪聲進(jìn)行保真化處理,同時(shí)挖掘出后續(xù)數(shù)據(jù)分析和可視化等必須的關(guān)鍵數(shù)據(jù),是提高數(shù)據(jù)研究質(zhì)量的重要手段之一[2]。
2.1.2 數(shù)據(jù)集成
數(shù)據(jù)集成是將多個(gè)數(shù)據(jù)源中的數(shù)據(jù)整合并存儲(chǔ)到一致的數(shù)據(jù)庫中。這一過程中首先需要解決三個(gè)問題:模式匹配、數(shù)據(jù)冗余、數(shù)據(jù)值沖突檢測與處理[3]。對(duì)來自多個(gè)實(shí)體的不同數(shù)據(jù)進(jìn)行匹配是處理數(shù)據(jù)集成的首要問題。
流調(diào)數(shù)據(jù)值沖突問題主要表現(xiàn)在來源不同實(shí)體的數(shù)據(jù)存在數(shù)據(jù)格式差異、數(shù)據(jù)冗余和數(shù)據(jù)可期望值分散的問題,作為篩選模板的數(shù)據(jù),數(shù)據(jù)不可刪除、不可對(duì)缺失的值做均值填補(bǔ)、回歸插補(bǔ)等噪聲過濾處理方法,目的是保持?jǐn)?shù)據(jù)的唯一可信度[4]。
數(shù)據(jù)分組的目的是在預(yù)定條件的基礎(chǔ)上對(duì)每個(gè)邏輯分組再分組,得到更細(xì)致化的數(shù)據(jù),使得數(shù)據(jù)符合防疫需求?;贛ySQL的多層嵌套子查詢數(shù)據(jù)過濾方法可以實(shí)現(xiàn)對(duì)數(shù)據(jù)的簡單過濾。圖2是將不同的數(shù)據(jù)源按照流調(diào)需求進(jìn)行數(shù)據(jù)合并的過程。
使用Navicat for MySQL可以將Excel數(shù)據(jù)導(dǎo)入MySQL數(shù)據(jù)庫,根據(jù)Excel表中的數(shù)據(jù)字段格式在Navicat中添加新表的字段并設(shè)置字段屬性,導(dǎo)入數(shù)據(jù)之后對(duì)表進(jìn)行刷新,數(shù)據(jù)格式轉(zhuǎn)換應(yīng)當(dāng)遵循數(shù)據(jù)類型的要求,避免數(shù)據(jù)轉(zhuǎn)換后數(shù)據(jù)長度損失等情況。表2是流調(diào)數(shù)據(jù)模型Excel表轉(zhuǎn)換MySQL字段對(duì)照表。
表2 數(shù)據(jù)格式字段轉(zhuǎn)換
MySQL數(shù)據(jù)庫支持對(duì)數(shù)據(jù)的子查詢和嵌套查詢,方便對(duì)數(shù)據(jù)的過濾。使用子查詢,可將每個(gè)查詢結(jié)果作為一個(gè)查詢條件繼續(xù)查詢數(shù)據(jù)[5]。據(jù)此可對(duì)流調(diào)數(shù)據(jù)模型使用嵌套子查詢,查詢流調(diào)數(shù)據(jù)模型中重復(fù)出現(xiàn)某疫情區(qū)域的人,并按照姓名和時(shí)間先后進(jìn)行排列,查詢語句為:
可以看到查詢結(jié)果的數(shù)據(jù)特征,據(jù)此分析流調(diào)數(shù)據(jù)。查詢結(jié)果見表3。
表3 重復(fù)出現(xiàn)查詢結(jié)果
基于流調(diào)模型數(shù)據(jù),事實(shí)上可能存在不重復(fù)記錄的號(hào)碼,在考慮數(shù)據(jù)過濾的時(shí)候要根據(jù)實(shí)際情況而定??梢灾付ㄈ掌陂g隔過濾數(shù)據(jù),對(duì)在某個(gè)日期窗口期停留的人員進(jìn)行篩選確定通行碼是否變更為黃碼,可指定篩選條件:Datel≤Time≤Date2。
查詢語句為:
表4是指定日期窗口查詢結(jié)果。
表4 時(shí)間段查詢結(jié)果
MySQL數(shù)據(jù)庫伴隨數(shù)據(jù)量增大和嵌套子查詢的層數(shù)的增多,使用子查詢占據(jù)的時(shí)間也會(huì)增多,反映出MySQL在處理多條件嵌套子查詢時(shí)間延遲問題,需要使用第三方優(yōu)化查詢方法。
大數(shù)據(jù)預(yù)處理技術(shù)主要是指完成對(duì)已接收數(shù)據(jù)的辨析、抽取、清洗、填補(bǔ)、平滑、合并、規(guī)格化及檢查一致性等操作[6]?;贛ySQL流調(diào)數(shù)據(jù)使用嵌套子查詢不能滿足復(fù)雜的數(shù)據(jù)需求??梢允褂肞ython第三方庫Pandas處理流調(diào)數(shù)據(jù)基于時(shí)間過濾的需求。Pandas是一個(gè)強(qiáng)大的分析結(jié)構(gòu)化數(shù)據(jù)的工具集,支持多種文件格式,比如CSV、JSON、SQL、Excel數(shù)據(jù)導(dǎo)入,同時(shí)Pandas可以對(duì)各種數(shù)據(jù)進(jìn)行運(yùn)算操作,比如歸并、再成形、選擇,還有數(shù)據(jù)清洗和數(shù)據(jù)加工特點(diǎn)[7]。因?yàn)榱髡{(diào)數(shù)據(jù)中電話號(hào)碼具有唯一性,而姓名可能存在重復(fù),所以對(duì)電話號(hào)碼相同的字段進(jìn)行過濾,將相同號(hào)碼對(duì)應(yīng)的時(shí)間存儲(chǔ)到對(duì)應(yīng)的數(shù)組中Tphone,則Tphone=[T1,T2,…,Tn],將對(duì)應(yīng)重復(fù)號(hào)碼的時(shí)間合并到一個(gè)數(shù)組里面,每個(gè)一號(hào)碼對(duì)應(yīng)形成新的 數(shù)組P=[name,phone,Tphone], 表5是使用Pandas對(duì)流調(diào)數(shù)據(jù)重組后的表。
表5 基于停留時(shí)間數(shù)據(jù)重組
為了計(jì)算在疫區(qū)停留間隔時(shí)間,需要對(duì)單個(gè)人的停留時(shí)間取時(shí)間最大值Tmax=max(T1,T2,…,Tn)和時(shí)間最小值Tmin=min(T1,T2,…,Tn),并計(jì)算時(shí)間差值Tcell=(Tmax-Tmin).total_seconds(),遍歷輸出每個(gè)人對(duì)應(yīng)的停留時(shí)間信息{phone,name,Tcell}。最后按照防疫要求對(duì)時(shí)間間隔停留超過半小時(shí)的人進(jìn)行篩選。Tcell/60≥30 min,按照當(dāng)?shù)胤酪咭笸A魰r(shí)間超過t
(min)則通行碼需要變更為黃碼。
基于MySQL數(shù)據(jù)的查詢,需要建立MySQL的數(shù)據(jù)驅(qū)動(dòng),需要安裝的第三方庫文件Pandas,MySQL數(shù)據(jù)驅(qū)動(dòng)連接核心代碼實(shí)現(xiàn)部分如下:
按照設(shè)計(jì)的時(shí)間處理函數(shù),使用Pandas對(duì)結(jié)構(gòu)化MySQL數(shù)據(jù)進(jìn)行時(shí)間過濾,并對(duì)停留時(shí)間內(nèi)超過30 min的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)輸出,其核心功能代碼如下:
輸出結(jié)果按照{(diào)phone,name,Tcell}數(shù)組形式輸出,圖3是基于停留時(shí)間間隔過濾輸出結(jié)果。該結(jié)果可用于防疫工作指導(dǎo)通行碼變更的依據(jù)。
圖3 停留時(shí)間超過30 min的人
根據(jù)防疫需求可修改時(shí)間間隔判斷條件Tcell/60≥tmin,但是可能存在有的基站的記錄個(gè)人電話號(hào)碼只有一次,不能憑據(jù)時(shí)間間隔過濾,理論上存在還在疫區(qū)的可能,所以將這部分人群也全部標(biāo)記出來。
數(shù)據(jù)可視化是將數(shù)據(jù)作為數(shù)據(jù)視覺表現(xiàn)的一種形式,可以直觀地反映數(shù)據(jù)信息。
目前大數(shù)據(jù)可視化主要包括:文本可視化、網(wǎng)絡(luò)可視化、多維數(shù)據(jù)可視化等[8]。本文基于流調(diào)數(shù)據(jù)模型MySQL數(shù)據(jù)做可視化處理,采用開源的數(shù)據(jù)可視DataGear開發(fā)平臺(tái),具有易于部署、操作簡單、可集成可視化面板等數(shù)據(jù)分析功能,支持接入SQL、CSV、Excel、HTTP接 口、JSON等 多 種 數(shù) 據(jù) 源。系統(tǒng)主要功能包括:數(shù)據(jù)管理、SQL工作臺(tái)、數(shù)據(jù)導(dǎo)入/導(dǎo)出、數(shù)據(jù)集管理、圖表管理、看板管理等。支持運(yùn)行時(shí)接入任意提供JDBC驅(qū)動(dòng)的數(shù)據(jù)庫,包括MySQL、Oracle、PostgreSQL、SQL Server等 關(guān) 系 數(shù)據(jù)庫,以及Elasticsearch、ClickHouse、Hive等大數(shù)據(jù)引擎[9]。
本文流調(diào)數(shù)據(jù)模型數(shù)據(jù)可視化使用數(shù)據(jù)圖表餅圖,直觀地反映流調(diào)數(shù)據(jù)不同維度的數(shù)據(jù)情況。便于防疫疫情的研判和工作的開展,基于DataGear對(duì)流調(diào)數(shù)據(jù)模型做可視化處理。圖4是流調(diào)數(shù)據(jù)模型可視化處理的流程。
圖4 數(shù)據(jù)可視化流程
數(shù)據(jù)可視化需要根據(jù)防疫工作需要,確定可視化內(nèi)容。疫情防疫的工作需要及時(shí)更新數(shù)據(jù)、動(dòng)態(tài)追蹤數(shù)據(jù)變化情況。為防疫工作提供更多的參照信息。
在基于流調(diào)數(shù)據(jù)模型MySQL,實(shí)現(xiàn)了對(duì)不同日期數(shù)據(jù)過濾,可視化后可以直觀地反映相鄰幾個(gè)日期內(nèi)數(shù)據(jù)的變化趨勢。圖5是1月1日~3日之間疫區(qū)停留人數(shù)統(tǒng)計(jì)可視化。
圖5 流調(diào)數(shù)據(jù)模型日期分布
為了預(yù)測本地區(qū)是否有潛在的外部輸入型疫情風(fēng)險(xiǎn),需要可視化本地區(qū)人數(shù)和非本地區(qū)人數(shù)情況。圖6是基于流調(diào)數(shù)據(jù)模型統(tǒng)計(jì)的人口情況。
圖6 流調(diào)數(shù)據(jù)模型外來人口情況
流調(diào)其中一個(gè)關(guān)鍵的目的是快速確定防疫區(qū)停留時(shí)間超過某個(gè)時(shí)間間隔的人,以及時(shí)調(diào)整通信碼狀態(tài)。據(jù)此需要將停留時(shí)間間隔停留人數(shù)可視化。圖7是停留時(shí)間間隔超過tmin的可視化情況。
圖7 流調(diào)數(shù)據(jù)模型疫區(qū)停留時(shí)間間隔
疫情流調(diào)數(shù)據(jù)傳輸安全是數(shù)據(jù)安全保障基本要求,根據(jù)《中華人民共和國數(shù)據(jù)安全法》[10]中的要求,需要保障流調(diào)數(shù)據(jù)傳輸過程中的完整性的保密性。傳統(tǒng)數(shù)據(jù)壓縮加密容易被攻擊者截獲破解,造成數(shù)據(jù)泄露,數(shù)據(jù)的完整性使用MD5驗(yàn)證方法[11],數(shù)據(jù)的保密性采用基于國密算法SM4分組對(duì)稱加密算法對(duì)疫情流調(diào)數(shù)據(jù)進(jìn)行加密傳輸[12],可實(shí)現(xiàn)流調(diào)數(shù)據(jù)傳輸安全性。
新冠肺炎作為一種突發(fā)性、大規(guī)模的公共衛(wèi)生事件,不但威脅著人類的健康和生命安全,也給基層防疫工作帶來了巨大的挑戰(zhàn)。本文建立流調(diào)數(shù)據(jù)模型,基于MySQL對(duì)流調(diào)數(shù)據(jù)進(jìn)行過濾,使用Pandas對(duì)流調(diào)數(shù)據(jù)基于時(shí)間過濾,并通過DataGear對(duì)流調(diào)數(shù)據(jù)模型做了可視化處理,可以提高流調(diào)數(shù)據(jù)效率,同時(shí)減輕基層公安民警工作負(fù)擔(dān);使用國密算法SM4對(duì)流調(diào)數(shù)據(jù)加密可保證數(shù)據(jù)傳輸安全。本文方法對(duì)疫情期間的大數(shù)據(jù)處理工作具有指導(dǎo)意義。