阮燦華,梁煒彬,林曉宇
(福建農(nóng)林大學(xué) 計(jì)算機(jī)與信息學(xué)院,福建福州350002)
目前國(guó)內(nèi)疫情得到基本控制,現(xiàn)如今國(guó)內(nèi)社會(huì)情況相對(duì)穩(wěn)定,而世界范圍內(nèi)疫情卻始終未能得到有效控制,人們對(duì)疫情情況還是非常關(guān)注。大數(shù)據(jù)背景下,網(wǎng)絡(luò)時(shí)刻產(chǎn)生海量疫情方面數(shù)據(jù),這些數(shù)據(jù)只有被合理解讀與展示,民眾才能更好了解其中奧秘[1-2]。借助網(wǎng)絡(luò)爬蟲(chóng)技術(shù)和echarts 技術(shù),在通過(guò)爬蟲(chóng)從網(wǎng)上獲取到每日疫情的各項(xiàng)權(quán)威數(shù)據(jù)后,清洗、轉(zhuǎn)化和挖掘后通過(guò)echarts 整理成各種可視化統(tǒng)計(jì)圖[3-4],這些可視化統(tǒng)計(jì)圖包括至今國(guó)內(nèi)的疫情圖,世界疫情圖,國(guó)內(nèi)各項(xiàng)疫情數(shù)據(jù)情況統(tǒng)計(jì)圖,世界各項(xiàng)疫情數(shù)據(jù)情況統(tǒng)計(jì)圖,以及每日熱點(diǎn)熱搜圖等以多種多樣的可視化形式呈現(xiàn)在人們面前,通過(guò)疫情可視化頁(yè)面,使人們能快速直觀的了解現(xiàn)在的疫情發(fā)展情況以及每日疫情感染人數(shù)的增長(zhǎng)和治愈及死亡情況。全球防疫形勢(shì)依然非常嚴(yán)峻,對(duì)疫情預(yù)防和控制仍然是當(dāng)今全球共同使命。通過(guò)可視化系統(tǒng)及時(shí)準(zhǔn)確評(píng)估疫情傳播、根據(jù)每日疫情情況了解疫情過(guò)去的情況,分析疫情發(fā)展趨勢(shì)對(duì)于政府制定防控措施有著重要意義。
疫情可視化系統(tǒng)要主動(dòng)抓取疫情數(shù)據(jù)[5],包括國(guó)內(nèi)疫情數(shù)據(jù)和海外疫情數(shù)據(jù),每天丁香園、騰訊疫情、UC 疫情、新浪疫情等這些平臺(tái)都會(huì)轉(zhuǎn)載國(guó)家和各地衛(wèi)健委每日發(fā)布的疫情數(shù)據(jù)。借助chrome 瀏覽器的開(kāi)發(fā)者工具,從騰訊疫情的requests 模塊中,獲取騰訊提供的疫情實(shí)時(shí)數(shù)據(jù)。進(jìn)入騰訊疫情實(shí)時(shí)追蹤網(wǎng)站之后,利用抓包工具找到以json 格式保存疫情數(shù)據(jù)的url,再使用python 的request 請(qǐng)求得到需要的國(guó)內(nèi)疫情和全球疫情各項(xiàng)相關(guān)數(shù)據(jù)接口[6]。
在本次疫情數(shù)據(jù)爬取中,系統(tǒng)調(diào)用了以下四個(gè)數(shù)據(jù)接口,并封裝入變量,供方法調(diào)用,分別是:中國(guó)疫情數(shù)據(jù)、中國(guó)城市疫情數(shù)據(jù)、外國(guó)疫情數(shù)據(jù)、全球疫情數(shù)據(jù)。通過(guò)以上url 數(shù)據(jù)接口[7],獲得所有疫情可視化系統(tǒng)所需要的數(shù)據(jù),并存入數(shù)據(jù)庫(kù)中,爬取全球疫情累計(jì)數(shù)據(jù)及全球?qū)崟r(shí)疫情數(shù)據(jù),并存入global_history_url 中,通過(guò)request 請(qǐng)求獲得response 數(shù)據(jù)后進(jìn)行分組便可得到全球疫情累計(jì)數(shù)據(jù)和全球?qū)崟r(shí)疫情數(shù)據(jù),在遍歷每組數(shù)據(jù)并進(jìn)行處理后,就可以得到一條符合數(shù)據(jù)庫(kù)表結(jié)構(gòu)數(shù)據(jù),最后一并存入數(shù)據(jù)庫(kù)中[8]。
疫情是當(dāng)前國(guó)內(nèi)乃至全社會(huì)的最大熱點(diǎn),而作為熱點(diǎn),自然常常占據(jù)著熱搜榜。百度提供全網(wǎng)熱度前五十搜索的今日熱點(diǎn)。系統(tǒng)今日熱搜數(shù)據(jù)通過(guò)爬取百度風(fēng)云榜今日熱點(diǎn)所獲得。利用Web 自動(dòng)化測(cè)試工具python-selenium 庫(kù)模擬用戶(hù)操作瀏覽器進(jìn)入百度熱搜榜地址后,用谷歌開(kāi)發(fā)者工具的調(diào)試找到今日熱搜數(shù)據(jù)所在的標(biāo)簽地址以獲取相應(yīng)的每天熱搜數(shù)據(jù)及其排名與熱度值。設(shè)置好模擬人為使用chrome 瀏覽器的操作配置,包括調(diào)用chrome 瀏覽器、設(shè)置瀏覽器的User-Agent、添加chrome 瀏覽器參數(shù)、配置使用chrome 瀏覽器相對(duì)應(yīng)版本的webdriver 等,配置好后進(jìn)行數(shù)據(jù)調(diào)試獲取。得到今日熱搜的數(shù)據(jù)后,經(jīng)過(guò)數(shù)據(jù)處理在系統(tǒng)前端動(dòng)態(tài)圖中顯示,根據(jù)每條的熱搜的內(nèi)容,對(duì)每條熱搜進(jìn)行關(guān)鍵字提取并根據(jù)相應(yīng)熱度值顯示該條熱搜大小,該熱搜顯示越大,說(shuō)明該熱點(diǎn)關(guān)注度越高,熱度值也越大,并且在數(shù)據(jù)庫(kù)設(shè)計(jì)中,每條熱搜與其熱度值共同存儲(chǔ)在content 內(nèi)容字段中,利用python-jieba 模塊對(duì)內(nèi)容字段進(jìn)行熱搜與熱度值切割。
本系統(tǒng)是基于網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的可視化項(xiàng)目開(kāi)發(fā)[9]。疫情數(shù)據(jù)與熱搜數(shù)據(jù)獲取方面是利用requests模塊獲取騰訊提供的疫情實(shí)時(shí)數(shù)據(jù),包含國(guó)內(nèi)最新、國(guó)內(nèi)歷史、全球最新、全球歷史的各項(xiàng)關(guān)于疫情確診、治愈、死亡人數(shù)的累計(jì)和每日數(shù)據(jù),以及利用selenium 模塊獲取最新百度熱搜榜關(guān)鍵詞,并將獲取的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)到sqlite3 中。系統(tǒng)可視化展示頁(yè)面部分是利用echarts 圖表技術(shù),繪制需要的中國(guó)地圖以及世界地圖,以及想要展示的各項(xiàng)統(tǒng)計(jì)圖例如柱狀圖、折線(xiàn)圖、熱搜熱度動(dòng)態(tài)展示圖等。利用js 加入實(shí)時(shí)北京時(shí)間精確至秒的時(shí)間模塊,在界面中每秒刷新,使用戶(hù)對(duì)查看疫情數(shù)據(jù)是個(gè)實(shí)時(shí)數(shù)據(jù),提高用戶(hù)體驗(yàn)感。
系統(tǒng)設(shè)置全國(guó)疫情與全球疫情兩個(gè)地圖。全國(guó)疫情圖根據(jù)各省疫情確診數(shù)量分為五個(gè)確診人數(shù)范圍顏色,全球疫情根據(jù)各國(guó)疫情確診數(shù)據(jù)分為五個(gè)確診人數(shù)范圍顏色,點(diǎn)擊相應(yīng)顏色可以進(jìn)行調(diào)節(jié)過(guò)濾。
全國(guó)疫情數(shù)據(jù)可視化是通過(guò)全國(guó)疫情折線(xiàn)圖來(lái)實(shí)現(xiàn)[10]。分別是關(guān)于疫情至今的累計(jì)數(shù)據(jù)統(tǒng)計(jì)圖和新增數(shù)據(jù)統(tǒng)計(jì)圖等兩張折線(xiàn)統(tǒng)計(jì)圖。累計(jì)數(shù)據(jù)統(tǒng)計(jì)圖包括累計(jì)確診、現(xiàn)有疑似、累計(jì)治愈、累計(jì)死亡數(shù)據(jù)的統(tǒng)計(jì);新增數(shù)據(jù)統(tǒng)計(jì)圖包括新增確診、新增疑似、新增治愈、新增死亡數(shù)據(jù)的統(tǒng)計(jì)。單擊任何數(shù)據(jù),都能對(duì)其進(jìn)行過(guò)濾,支持多項(xiàng)數(shù)據(jù)過(guò)濾最后只留一項(xiàng)數(shù)據(jù),并對(duì)其重新制作折線(xiàn)統(tǒng)計(jì)圖,從而使想觀察的數(shù)據(jù)更加清晰,一目了然。
全球疫情數(shù)據(jù)可視化是全球疫情折線(xiàn)圖來(lái)實(shí)現(xiàn)。分別是關(guān)于疫情至今的全球累計(jì)數(shù)據(jù)的統(tǒng)計(jì)圖和全球新增確診的統(tǒng)計(jì)圖等兩張折線(xiàn)統(tǒng)計(jì)圖。累計(jì)數(shù)據(jù)統(tǒng)計(jì)圖包括累計(jì)確診、累計(jì)治愈、累計(jì)死亡。其余特點(diǎn)同中國(guó)折線(xiàn)統(tǒng)計(jì)圖。
本系統(tǒng)數(shù)據(jù)庫(kù)使用集成型數(shù)據(jù)庫(kù)sqlite3。
china_history 表用來(lái)存儲(chǔ)中國(guó)至今每日累計(jì)的疫情相關(guān)數(shù)據(jù)。Date 字段是存儲(chǔ)每日疫情數(shù)據(jù)的日期,confrim、overseas_inputs、dead、heal 字段是疫情開(kāi)始到該日期統(tǒng)計(jì)時(shí)的累計(jì)確診、累計(jì)境外輸入、累計(jì)死亡、累計(jì)治愈的人數(shù),suspect 字段是現(xiàn)存疑似感染新冠肺炎未確診的人數(shù)。china_history 表的具體字段及結(jié)構(gòu)如表1 所示。
表1 china_history 表
china_lasted 表用來(lái)存儲(chǔ)統(tǒng)計(jì)到今日為止全國(guó)每個(gè)省份中每個(gè)城市疫情的累計(jì)情況和新增情況。id 字段是存儲(chǔ)每個(gè)城市統(tǒng)計(jì)時(shí)的序號(hào),作為主鍵自增,update_time 字段是統(tǒng)計(jì)時(shí)間,suspect 字段是每個(gè)城市現(xiàn)存疑似人數(shù),每次統(tǒng)計(jì)將以前統(tǒng)計(jì)的數(shù)據(jù)邏輯刪除,插入新統(tǒng)計(jì)的數(shù)據(jù),確保每座城市的唯一性,并按照國(guó)家、省份、城市字段升序排序。
hotsearch 表用來(lái)存儲(chǔ)爬取的百度今日熱點(diǎn)排名前五十的熱搜數(shù)據(jù),id 字段作為每次更新每條熱搜的序號(hào),作為主鍵自增,content 字段是存儲(chǔ)熱點(diǎn)與熱度值兩個(gè)數(shù)據(jù),每次更新邏輯刪除舊的數(shù)據(jù),插入更新的數(shù)據(jù)。
3.2.1 系統(tǒng)主界面
疫情可視化系統(tǒng)開(kāi)發(fā)主界面包括全國(guó)疫情追蹤界面及全球疫情追蹤界面,界面效果如圖1 和圖2 所示。
圖1 全國(guó)疫情追蹤界面
圖2 全球疫情追蹤界面
3.2.2 疫情地圖
制作疫情地圖及其他一些統(tǒng)計(jì)圖、熱搜圖借助了Apache Echarts 繪畫(huà)圖表技術(shù),Echarts 是基于js的開(kāi)源數(shù)據(jù)可視化圖標(biāo)庫(kù),繪畫(huà)圖表簡(jiǎn)便快捷,效果簡(jiǎn)潔好看。在規(guī)劃了繪制地圖區(qū)域后準(zhǔn)備中國(guó)地圖信息的js 文件,下載一個(gè)可用的導(dǎo)入到項(xiàng)目中后,編寫(xiě)echarts 圖表配置信息,根據(jù)各省疫情確診的人數(shù)劃分為5 個(gè)等級(jí),確診人數(shù)由少到多,顏色隨嚴(yán)重程度的加深而加深,在左下角進(jìn)行顏色的說(shuō)明。疫情地圖包括全國(guó)疫情圖和全球疫情圖,如圖3、圖4 所示。從圖中可以看出,湖北疫情累計(jì)確診人數(shù)是全國(guó)最多,其余各省得益于黨和國(guó)家及廣大人民群眾的不懈努力,都沒(méi)有達(dá)到最深顏色的程度,以圖中選中區(qū)域福建來(lái)說(shuō),累計(jì)確診人數(shù)統(tǒng)計(jì)到今天為止,一共598 名,并且沒(méi)有現(xiàn)有確診存在,疫情基本得到控制。全球疫情的實(shí)現(xiàn)及數(shù)據(jù)說(shuō)明同中國(guó)疫情圖。
圖3 中國(guó)疫情圖
圖4 全球疫情圖
3.2.3 折線(xiàn)統(tǒng)計(jì)圖
疫情統(tǒng)計(jì)折線(xiàn)圖如圖5 和圖6 所示。從全國(guó)累計(jì)趨勢(shì)和新增趨勢(shì)可以看出,我國(guó)疫情情況現(xiàn)在比較穩(wěn)定,能夠得到有效控制[11],但全球范圍內(nèi),疫情確診人數(shù)卻持續(xù)增加,說(shuō)明疫情在全球范圍內(nèi)未得到控制,且越來(lái)越嚴(yán)重。折線(xiàn)圖可以選擇只顯示一種數(shù)據(jù),并為數(shù)據(jù)重新制作折線(xiàn)圖,便于更好分析疫情發(fā)展情況,我國(guó)疑似人數(shù)趨勢(shì),隱藏其他數(shù)據(jù),如圖7 所示。將鼠標(biāo)移到相應(yīng)線(xiàn)段可以展示是哪一天的數(shù)據(jù),可以看到,一旦有疑似,可以很快確認(rèn)是否被確診,說(shuō)明我國(guó)對(duì)新冠肺炎已經(jīng)有有效措施進(jìn)行排查,效果也很顯著,側(cè)面說(shuō)明疫情得到控制。
圖5 全國(guó)累計(jì)趨勢(shì)與新增趨勢(shì)折線(xiàn)圖
圖6 全球累計(jì)趨勢(shì)與新增趨勢(shì)折線(xiàn)圖
圖7 全國(guó)現(xiàn)有疑似與新增疑似折線(xiàn)
3.2.4 柱狀圖
如圖8 和圖9 所示,根據(jù)中國(guó)除湖北外的城市確診情況和全球各國(guó)確診情況制作柱狀統(tǒng)計(jì)圖??梢钥闯觯谥袊?guó),香港確診人數(shù)相較其他城市來(lái)說(shuō),需要加強(qiáng)防護(hù)與監(jiān)管。而在世界范圍內(nèi),可以看到,美國(guó)、印度、巴西國(guó)家確診人數(shù)突破千萬(wàn)級(jí)別,在這些國(guó)家,疫情并未得到及時(shí)控制。
圖8 全國(guó)確診城市排名柱狀圖
圖9 全球確診國(guó)家排名柱狀圖
3.2.5 疫情熱搜圖
疫情熱搜為今日熱搜圖,是今日搜索度和熱度值排名前五十的熱點(diǎn),每日更新,利用后臺(tái)數(shù)據(jù)處理提取關(guān)鍵字和熱度值后使用echarts 繪畫(huà)出動(dòng)態(tài)熱搜圖,如圖10 所示。由圖中可以看出,今日熱搜中安徽六安新冠疫情情況最多人關(guān)注,熱度值為379158,將鼠標(biāo)移到每個(gè)關(guān)鍵詞,可以看到該熱搜的熱度值,熱度值越高,熱搜字體越大,也代表更多人關(guān)注;每一次切換頁(yè)面都會(huì)根據(jù)關(guān)鍵字重新渲染熱搜圖,做出動(dòng)態(tài)熱搜效果。
圖10 今日熱搜動(dòng)態(tài)圖
本系統(tǒng)是基于網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的疫情可視化系統(tǒng)開(kāi)發(fā),借助requests 模塊和selenium 模塊進(jìn)行疫情數(shù)據(jù)爬取,借助jieba 等模塊進(jìn)行返回?cái)?shù)據(jù)處理,借助echarts 繪畫(huà)圖表技術(shù)進(jìn)行可視化界面設(shè)計(jì)開(kāi)發(fā)。系統(tǒng)開(kāi)發(fā)完成可以方便人們隨時(shí)進(jìn)行疫情的查看,根據(jù)每日疫情的結(jié)果也可推斷出我國(guó)疫情的控制過(guò)程以及世界疫情未來(lái)的發(fā)展趨勢(shì)。
系統(tǒng)設(shè)計(jì)難點(diǎn)主要在于疫情數(shù)據(jù)的獲取后如何整合出每一項(xiàng)想要的數(shù)據(jù),并確保數(shù)據(jù)的實(shí)時(shí)性與準(zhǔn)確性。所以疫情數(shù)據(jù)必須定時(shí)爬取更新,確保正確性必須多方多維度多次確認(rèn)才能保證。
(注:文中顯示數(shù)據(jù)為2021年5月15日)