網(wǎng)上一搜,首先搜到的是騰訊的疫情實時追蹤,那就用這個數(shù)據(jù)源吧。
有了網(wǎng)址怎么抓數(shù)據(jù)呢?這里,我送大家一雙火眼金睛,可以從紛亂中找到最靠譜的下載方式。我習(xí)慣用FireFox瀏覽器,下面的講解就以FireFox為例(其他瀏覽器基本類似)。
打開菜單,點擊“Web開發(fā)者”,在遞進菜單中選擇"網(wǎng)絡(luò)":
刷新頁面,我們很快就能發(fā)現(xiàn),應(yīng)答類型為json格式的這個請求,最有可能包含我們需要的數(shù)據(jù)了:
如果你不想錯過Python這么好的工具,又擔(dān)心自學(xué)遇到問題無處解決,現(xiàn)在就可以Python的學(xué)習(xí)q u n 227-435-450可以來了解一起進步一起學(xué)習(xí)!免費分享視頻資料
深入分析,我們就得到了url地址、請求方法、參數(shù)、應(yīng)答格式等信息。查詢參數(shù)中,callback是回調(diào)函數(shù)名,我們可以嘗試置空,_應(yīng)該是以毫秒為單位的當(dāng)前時間戳。有了這些信息,分分鐘就可以抓到數(shù)據(jù)了。我們先在IDLE中以交互方式抓一下看看效果:
>>> import time, json, requests>>> url = 'https://view.inews.qq.com/g2/getOnsInfo?name=wuwei_ww_area_counts&callback=&_=%d'%int(time.time()*1000)>>> data = json.loads(requests.get(url=url).json()['data'])>>> print(len(data))301>>> print(data[0]){'country': '中國', 'area': '湖北', 'city': '武漢', 'confirm': 698, 'suspect': 0, 'dead': 63, 'heal': 42}>>> print(data[-1]){'country': '中國', 'area': '山東', 'city': '棗莊', 'confirm': 2, 'suspect': 0, 'dead': 0, 'heal': 0}
只要兩行代碼,就可以抓到數(shù)據(jù)了。怎么樣,是不是超級簡單?
數(shù)據(jù)處理
以省為單位畫疫情圖,我們只需要統(tǒng)計同屬一個省的所有地市的確診數(shù)據(jù)即可。最終的數(shù)據(jù)抓取代碼如下:
import time, json, requestsdef catch_distribution():? ? """抓取行政區(qū)域確診分布數(shù)據(jù)"""? ? ? ? data = dict()? ? url = 'https://view.inews.qq.com/g2/getOnsInfo?name=wuwei_ww_area_counts&callback=&_=%d'%int(time.time()*1000)? ? for item in json.loads(requests.get(url=url).json()['data']):? ? ? ? if item['area'] not in data:? ? ? ? ? ? data.update({item['area']:0})? ? ? ? data[item['area']] += int(item['confirm'])? ? ? ? return data
數(shù)據(jù)可視化
數(shù)據(jù)可視化,我習(xí)慣使用matplotlib模塊。matplotlib有很多擴展工具包(toolkits),比如,畫3D需要mplot3d工具包,畫地圖的話,則需要basemap工具包,以及處理地圖投影的pyproj模塊。另外畫海陸分界線、國界線、行政分界線等還需要shape數(shù)據(jù)。所需模塊請自行安裝,shape文件可以從這里下載,繪圖用到的矢量字庫可以從自己的電腦上隨便找一個(我用的是simsun.ttf)。我的主程序是2019nCoV.py,shape文件下載下來之后,是這樣保存的:




2019-nCoV疫情曲線:
2019-nCoV疫情地圖:
上圖為圓柱投影,這也是basemap默認(rèn)的投影模式,我們還可以換用其他投影模式,比如蘭勃托等角投影,只需要將97行代碼改為:
蘭勃托投影效果如下:
還可以使用正射投影:
正射投影效果如下:
本文來源于網(wǎng)絡(luò) 如有侵權(quán)請聯(lián)系作者刪除