每天在地铁上刷着疫情的数据与新闻,希望能看到更多的好消息。
最近看到大家都在写疫情的实时数据地图,作为测试工程师,当然也不能落下。
下面的程序是通过Python生成实时生成数据分布图,全国和每个省份。
(数据来自微博,更新可能有所延迟。本文主要是技术分享)
全国数据图
湖北省
广东省
在命令行导入这些模块
pip install requests
pip install re
pip install pyecharts
依次是全球地图、中国省级地图、中国市级地图、中国区县级地图、中国区域地图,根据需要地图导入
pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
pip install echarts-china-counties-pypkg
pip install echarts-china-misc-pypkg
源代码(代码来源于互联网,如有侵权请联系删除)
# -*- coding: utf-8 -*-
# @Time : 2020/3/18 10:03
# @Author : Liqiju
# @File : HTT.py
# @Software : PyCharm
import requests
import json
import re
from pyecharts.charts import Map
from pyecharts import options
#发起网络请求,获取新浪微博数据
result = requests.get('https://interface.sina.cn/news/wap/fymap2020_data.d.json?1580097300739&&callback=sinajp_1580097300873005379567841634181')
#使用正则表达式处理数据
json_str = re.search("\(+([^)]*)\)+", result.text).group(1)
html = f"{json_str}"
table = json.loads(f"{html}")
province_data = []
#循环获取省份名称和对应的确诊数据
for province in table['data']['list']:
#将省份数据添加到列表中去
province_data.append((province['name'], province['value']))
city_data = []
#循环获取城市名称和对应的确诊数据
for city in province['city']:
#这里要注意对应上地图的名字需要使用mapName这个字段
city_data.append((city['mapName'], city['conNum']))
#使用Map,创建省份地图
map_province = Map()
#设置地图上的标题和数据标记,添加省份和确诊人数
map_province.set_global_opts(title_opts=options.TitleOpts(title=province['name'] + "实时疫情图-确诊人数:" + province['value']), visualmap_opts=options.VisualMapOpts(is_piecewise=True,#设置是否为分段显示
#自定义数据范围和对应的颜色,这里是取色工具获取的颜色值。
pieces=[
{"min": 1000, "label": '>1000人', "color": "#6F171F"},
{"min": 500, "max": 1000, "label": '500-1000人', "color": "#C92C34"},
{"min": 100, "max": 499, "label": '100-499人', "color": "#E35B52"},
{"min": 10, "max": 99, "label": '10-99人', "color": "#F39E86"},
{"min": 1, "max": 9, "label": '1-9人', "color": "#FDEBD0"}]))
#将数据添加进去,生成省份地图,所以maptype要对应省份。
map_province.add("确诊", city_data, maptype = province['name'])
#一切完成,那么生成一个省份的html网页文件,取上对应省份的名字。
map_province.render(province['name'] + ".html")
#创建国家地图
map_country = Map()
#设置地图上的标题和数据标记,添加确诊人数
map_country.set_global_opts(title_opts=options.TitleOpts(title="中国实时疫情图-确诊人数:" + table['data']["gntotal"]), visualmap_opts=options.VisualMapOpts(is_piecewise=True,#设置是否为分段显示
#自定义数据范围和对应的颜色,这里是取色工具获取的颜色值。
pieces=[
{"min": 1000, "label": '>1000人', "color": "#6F171F"}, # 不指定 max,表示 max 为无限大(Infinity)。
{"min": 500, "max": 1000, "label": '500-1000人', "color": "#C92C34"},
{"min": 100, "max": 499, "label": '100-499人', "color": "#E35B52"},
{"min": 10, "max": 99, "label": '10-99人', "color": "#F39E86"},
{"min": 1, "max": 9, "label": '1-9人', "color": "#FDEBD0"}]))
#将数据添加进去,生成中国地图,所以maptype要对应china。
map_country.add("确诊", province_data, maptype="china")
#一切完成,那么生成一个html网页文件。
map_country.render("country.html")
print("疫情图已生成!!!")
把上面的代码复制到pycharm,保存运行。
运行结果
生成了全国、省份的实时地图网页
用浏览器打开就可以了。或者在pycharm里选择浏览器打开
再看看老家广西的
希望疫情赶紧过去,恢复正常的生活。
生活不易,测试也不易。 ----2020年3月18日18点28分。