用 Python 製作實時現有確診疫情圖

1 前言

最近每天早上起來第一件事,就是打開新聞軟件看疫情相關的新聞。瞭解下自己和親友所在城市的確診人數,但純數字還是缺乏一個直觀的概念。那我們來做一個疫情地圖吧。至於數據,從各大網站的實時疫情頁面就可以拿到。

2. 數據下載

網上一搜,首先搜到的是新浪新聞的疫情實時追蹤,那就用這個數據源吧。

可以輕鬆找到 url 地址、請求方法、參數、應答格式等信息

用 Python 製作實時現有確診疫情圖

​​

<code>URL = "https://gwpre.sina.cn/interface/fymap2020_data.json?random=0.7906952201023671&_=1582869392726"
/<code>

注:callback 字段已刪除(經測試,去掉之後沒有太大影響)_ 字段為時間戳

查看數據格式:為 json 格式哦(真棒!)

用 Python 製作實時現有確診疫情圖

數據格式很簡單,查看省數據和下屬城市的數據:(以河北省為例)

<code>{
\t'name': '河北',
\t'ename': 'hebei',
\t'value': '318',
\t'conadd': '1',
\t'hejian': '',
\t'econNum': '38',
\t'susNum': '0',
\t'deathNum': '6',
\t'cureNum': '274',
\t'adddaily': {
\t\t'conadd': '+1',
\t\t'deathadd': '+0',
\t\t'cureadd': '+13',
\t\t'econadd': '-12',
\t\t'conadd_n': 1,
\t\t'deathadd_n': 0,
\t\t'cureadd_n': 13
\t},
\t'city': [{
\t\t'name': '石家莊',
\t\t'conNum': '29',
\t\t'conadd': '0',
\t\t'hejian': '',
\t\t'susNum': '0',
\t\t'cureNum': '24',
\t\t'deathNum': '0',
\t\t'mapName': '石家莊市',
\t\t'citycode': 'CN13010000000000'
\t}, {
\t\t'name': '廊坊',
\t\t'conNum': '30',
\t\t'conadd': '0',
\t\t'hejian': '',
\t\t'susNum': '0',
\t\t'cureNum': '30',
\t\t'deathNum': '0',
\t\t'mapName': '廊坊市',
\t\t'citycode': 'CN13100000000000'
\t}, {
\t\t'name': '滄州',
\t\t'conNum': '48',

\t\t'conadd': '0',
\t\t'hejian': '',
\t\t'susNum': '0',
\t\t'cureNum': '39',
\t\t'deathNum': '3',
\t\t'mapName': '滄州市',
\t\t'citycode': 'CN13090000000000'
\t}, {
\t\t'name': '邯鄲',
\t\t'conNum': '32',
\t\t'conadd': '0',
\t\t'hejian': '',
\t\t'susNum': '0',
\t\t'cureNum': '30',
\t\t'deathNum': '0',
\t\t'mapName': '邯鄲市',
\t\t'citycode': 'CN13040000000000'
\t}, {
\t\t'name': '保定',
\t\t'conNum': '32',
\t\t'conadd': '0',
\t\t'hejian': '',
\t\t'susNum': '0',
\t\t'cureNum': '32',
\t\t'deathNum': '0',
\t\t'mapName': '保定市',
\t\t'citycode': 'CN13060000000000'
\t}, {
\t\t'name': '邢臺',
\t\t'conNum': '23',
\t\t'conadd': '0',
\t\t'hejian': '',
\t\t'susNum': '0',
\t\t'cureNum': '22',
\t\t'deathNum': '1',
\t\t'mapName': '邢臺市',
\t\t'citycode': 'CN13050000000000'
\t}, {
\t\t'name': '衡水',
\t\t'conNum': '8',
\t\t'conadd': '0',
\t\t'hejian': '',
\t\t'susNum': '0',
\t\t'cureNum': '8',
\t\t'deathNum': '0',
\t\t'mapName': '衡水市',
\t\t'citycode': 'CN13110000000000'
\t}, {

\t\t'name': '承德',
\t\t'conNum': '7',
\t\t'conadd': '0',
\t\t'hejian': '',
\t\t'susNum': '0',
\t\t'cureNum': '7',
\t\t'deathNum': '0',
\t\t'mapName': '承德市',
\t\t'citycode': 'CN13080000000000'
\t}, {
\t\t'name': '唐山',
\t\t'conNum': '58',
\t\t'conadd': '0',
\t\t'hejian': '',
\t\t'susNum': '0',
\t\t'cureNum': '40',
\t\t'deathNum': '1',
\t\t'mapName': '唐山市',
\t\t'citycode': 'CN13020000000000'
\t}, {
\t\t'name': '張家口',
\t\t'conNum': '41',
\t\t'conadd': '1',
\t\t'hejian': '',
\t\t'susNum': '0',
\t\t'cureNum': '33',
\t\t'deathNum': '0',
\t\t'mapName': '張家口市',
\t\t'citycode': 'CN13070000000000'
\t}, {
\t\t'name': '秦皇島',
\t\t'conNum': '10',
\t\t'conadd': '0',
\t\t'hejian': '',
\t\t'susNum': '0',
\t\t'cureNum': '9',
\t\t'deathNum': '1',
\t\t'mapName': '秦皇島市',
\t\t'citycode': 'CN13030000000000'
\t}]
}
/<code>

3 安裝 Python 包

國內大廠出的 echarts 自然會對國內地圖有最好的支持。用 pip 安裝 pyecharts,以及兩個數據包 echarts-china-provinces-pypkg、echarts-china-cities-pypkg 即可

<code>pip install pyecharts
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
/<code>

4 代碼實現

遍歷下 json 數據,把省名和確診數存在 data 數據裡傳給 map 對象就好

注意 max 是決定渲染顏色的

<code>import json
import requests
import time

from pyecharts.charts import Map
from pyecharts import options as opts

URL = "https://gwpre.sina.cn/interface/fymap2020_data.json?random=0.7906952201023671&_=%s" % int(time.time() * 1000)

# 獲取網頁響應
resp = requests.get(URL)
# 解析網頁響應內容(Unicode編碼)
content = resp.content.decode("unicode_escape")
# 將網頁內容改為 json 格式
con_json = json.loads(content)
# 獲取省份列表
province_list = con_json["data"]["list"]
data = []
for province in province_list:
# 修改 econNum , 顯示不同的數據
data.append((province['name'], province['econNum']))

# 實例化
map_p = Map()
map_p.set_global_opts(title_opts=opts.TitleOpts(title=con_json["data"]["times"] + "疫情圖"), visualmap_opts=opts.VisualMapOpts(max_=200))
map_p.add("現有確診", data, maptype="china")
# 生成html文件
map_p.render("ncov.html")
/<code>

效果:

用 Python 製作實時現有確診疫情圖

達到 200 現有確診的省份一目瞭然。感興趣的同學還可以製作市級別或者世界地圖。

最後祝願早日都變為藍色吧。武漢加油,中國加油!


分享到:


相關文章: