網(wǎng)上一搜梧兼,首先搜到的是騰訊的疫情實(shí)時(shí)追蹤,那就用這個(gè)數(shù)據(jù)源吧智听。
有了網(wǎng)址怎么抓數(shù)據(jù)呢羽杰?這里,我送大家一雙火眼金睛到推,可以從紛亂中找到最靠譜的下載方式考赛。我習(xí)慣用FireFox瀏覽器,下面的講解就以FireFox為例(其他瀏覽器基本類似)莉测。
打開菜單颜骤,點(diǎn)擊“Web開發(fā)者”,在遞進(jìn)菜單中選擇"網(wǎng)絡(luò)":
刷新頁面捣卤,我們很快就能發(fā)現(xiàn)忍抽,應(yīng)答類型為json格式的這個(gè)請(qǐng)求八孝,最有可能包含我們需要的數(shù)據(jù)了:
如果你不想錯(cuò)過Python這么好的工具,又擔(dān)心自學(xué)遇到問題無處解決鸠项,現(xiàn)在就可以Python的學(xué)習(xí)q u n 227-435-450可以來了解一起進(jìn)步一起學(xué)習(xí)唆阿!免費(fèi)分享視頻資料
深入分析,我們就得到了url地址锈锤、請(qǐng)求方法驯鳖、參數(shù)、應(yīng)答格式等信息久免。查詢參數(shù)中浅辙,callback是回調(diào)函數(shù)名,我們可以嘗試置空阎姥,_應(yīng)該是以毫秒為單位的當(dāng)前時(shí)間戳记舆。有了這些信息,分分鐘就可以抓到數(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ù)了。怎么樣衣赶,是不是超級(jí)簡(jiǎn)單诊赊?
數(shù)據(jù)處理
以省為單位畫疫情圖,我們只需要統(tǒng)計(jì)同屬一個(gè)省的所有地市的確診數(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有很多擴(kuò)展工具包(toolkits)遵馆,比如鲸郊,畫3D需要mplot3d工具包,畫地圖的話货邓,則需要basemap工具包秆撮,以及處理地圖投影的pyproj模塊。另外畫海陸分界線换况、國界線职辨、行政分界線等還需要shape數(shù)據(jù)。所需模塊請(qǐng)自行安裝复隆,shape文件可以從這里下載拨匆,繪圖用到的矢量字庫可以從自己的電腦上隨便找一個(gè)(我用的是simsun.ttf)姆涩。我的主程序是2019nCoV.py挽拂,shape文件下載下來之后,是這樣保存的:
2019-nCoV疫情曲線:
2019-nCoV疫情地圖:
上圖為圓柱投影骨饿,這也是basemap默認(rèn)的投影模式亏栈,我們還可以換用其他投影模式台腥,比如蘭勃托等角投影,只需要將97行代碼改為:
蘭勃托投影效果如下:
還可以使用正射投影:
正射投影效果如下:
本文來源于網(wǎng)絡(luò) 如有侵權(quán)請(qǐng)聯(lián)系作者刪除