最新疫情數(shù)據(jù)報(bào)告已到達(dá)你的郵箱!
來源:數(shù)據(jù)管道(id:adc9556)
作者:寶器&fyq
2020年“地獄”難度的開局,屬實(shí)一下子還沒反應(yīng)過來事情就發(fā)生了。截止到1月31日,新型冠狀病毒肺炎累計(jì)確診的人數(shù)已是“非典”的兩倍之多,廣大被“禁足”的網(wǎng)友們在這個春節(jié)里時刻心系著病毒的傳播范圍,短短數(shù)日,卻蔓延迅速,全國染紅。

一邊是不斷增長的確診人數(shù),而另一邊是各種刷新三觀的新聞爆出,讓大家的心情跟坐過山車一樣。

你可能已經(jīng)看過各種“真相”:
疾控中心早已知道“人傳人”,但卻刻意隱...
國家院士早發(fā)表論文“人傳人”,而你卻渾然不....
雙黃連對新型冠性....抑制
武漢某會錢“用不出去”
非典專家認(rèn)為SARS Cov是非自然方式產(chǎn)生(美帝主義的陰謀)

此外,封城越久,寄情于網(wǎng)絡(luò)越深,然而疫情消息滿天飛,更有些不實(shí)言論,看多了徒增焦慮。且這屆中老年組實(shí)在太難帶了。

為避免他們過度恐慌或掉以輕心,同時小試下修煉已久的Python降龍十八掌,基于這兩方面考慮想到一個體面又不失優(yōu)雅的辦法:
拿上Python花2小時寫了采集、分析、并定點(diǎn)推送官方數(shù)據(jù)的代碼,每天定時推送官方數(shù)據(jù)和親友身邊城市的疫情實(shí)時數(shù)據(jù)分布圖,讓大家理性關(guān)注、科學(xué)防范,做好疫情的自我防護(hù)。
先來個效果圖

這個idea拆解為三個部分:
1、數(shù)據(jù)獲取
2、數(shù)據(jù)處理
3、數(shù)據(jù)推送
數(shù)據(jù)獲?。?/strong>
目前新浪、騰訊以及人民日報(bào)&丁香園聯(lián)手等單位都推出了疫情地圖,有人民日報(bào)在,那必須最權(quán)威了。鎖定主要從該網(wǎng)站取數(shù)據(jù)后,通過網(wǎng)頁工具可發(fā)現(xiàn)用get請求便可取到數(shù)據(jù)了。好消息是有的同志預(yù)見了類似我這樣群眾躍躍欲試的熱情,遂公開了API接口。

請求接口:/nCoV/api/area
請求方式:GET
返回?cái)?shù)據(jù)如下:


這里也貼上最初無API情況下的嘗試:

數(shù)據(jù)處理:
包括數(shù)據(jù)清洗和圖表制作兩大部分。
數(shù)據(jù)清洗:讀取到的數(shù)據(jù)類型為由dict組成的list數(shù)據(jù)。由于要詳細(xì)分析省內(nèi)各地市情況所以將各省的cities內(nèi)的數(shù)據(jù)讀取出進(jìn)行分析,可以在這里將各省確診案例或疑似案例排名前5的城市及詳情列出。

圖表制作:可采用Pyecharts和matplotlib兩種方式生成圖表。
用pyecharts畫同心圓餅圖:



(限于篇幅,這里已湖北、廣東省為例圖)
用matplotlib畫趨勢圖或地圖:


數(shù)據(jù)推送
本工具采用SMTP郵箱服務(wù)器進(jìn)行信息推動。SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式。python的smtplib提供了一種很方便的途徑發(fā)送電子郵件。它對smtp協(xié)議進(jìn)行了簡單的封裝。
本案例的發(fā)送郵件模塊源碼如下:

踩坑提醒!
這款A(yù)PI大概有以下3種使用方法:
1. /nCoV/api/area?latest=1&province=湖北省返回湖北省疫情最新數(shù)據(jù)
2. /nCoV/api/area?latest=0&province=湖北省返回湖北省疫情的時間序列數(shù)據(jù)
3. /nCoV/api/area?latest=1返回中國全部城市及世界其他國家疫情最新數(shù)據(jù)
建議盡量采用第2種,latest=0讀時序數(shù)據(jù)的方式。不要問為啥,因?yàn)槲乙埠芙^望,用latest=1偶爾讀不到數(shù)據(jù),不信看下面這個31日早上調(diào)用結(jié)果的截圖,差點(diǎn)還以為復(fù)活了。畢竟數(shù)據(jù)是很嚴(yán)肅的事,容不得半點(diǎn)虛。

總結(jié):
疫情信息流爆炸,看了徒增焦慮,技術(shù)服務(wù)生活,有需求的地方就有idea。寫了個爬蟲定期推送官方數(shù)據(jù)給親友們,如有需求可告知郵箱地址及希望收到推送時間?。
