Python结合pyecharts实现新型冠状病毒实时疫情可视化
本文介绍如何利用Python抓取实时疫情数据,并通过pyecharts库绘制可视化地图。通过Chrome开发者工具定位JSON接口,解析包含确诊、治愈及死亡人数的数据,最终生成支持省、市级别的交互式疫情分布图,帮助直观掌握各地疫情状况。
近期每日清晨的首要任务,便是查阅新闻应用中的疫情动态,以确认自己及亲友所在城市的具体确诊情况。然而,单纯的文字数字往往难以形成直观认知,因此尝试通过技术手段构建可视化图表来呈现这些数据。
数据来源主要依托各大网站的实时疫情页面。以某特定网站为例,使用requests库获取HTML源码后,发现其中并未直接包含数据。这通常意味着页面由JavaScript动态渲染,且数据需从后台接口获取。此时可打开Chrome浏览器的开发者工具,切换至Network(网络)标签页并刷新页面,逐一检查请求列表,通常能定位到返回JSON格式数据的接口。

需注意,该接口的返回数据往往包裹在JavaScript变量中。可通过正则表达式提取核心JSON字符串,随后利用Python标准库中的json.loads方法将其转换为字典对象,以便后续处理。
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}")
解析后的数据结构较为清晰,主要包含省级行政区数据及其下属城市的具体数据。
{ 'city': [ { 'conNum': '4',
'cureNum': '0',
'deathNum': '0',
'name': '乌鲁木齐',
'susNum': '0'},
{ 'conNum': '1',
'cureNum': '0',
'deathNum': '0',
'name': '伊犁州',
'susNum': '0'}],
'cureNum': '0',
'deathNum': '0',
'name': '新疆',
'susNum': '0',
'value': '5'}
若具备英语基础,可推断cureNum代表治愈人数,deathNum代表死亡人数,而value字段通常对应确诊人数。其他字段的具体含义可参照原网站的数据表格进行确认。
在可视化呈现上,地图是最为直观的方式。国内广泛使用的echarts库对国内地图提供了良好的支持。首先需通过pip安装pyecharts库,并额外安装两个依赖包:echarts-china-provinces-pypkg(用于省级地图)以及echarts-china-cities-pypkg(用于市级地图)。
接下来,遍历解析后的JSON数据,将省份名称与对应的确诊数值提取出来,存入data列表中,并将其传递给Map对象进行渲染配置。
for province in table['data']['list']:
pp.pprint(province)
data.append((province['name'], province['value']))
for city in province['city']:
pp.pprint(city)
map_p = Map()
map_p.set_global_opts(title_opts=opts.TitleOpts(title="实时疫情图"), visualmap_opts=opts.VisualMapOpts(max_=100))
map_p.add("确诊", data, maptype="china")
map_p.render("ncov.html") # 生成html文件
实现代码相对简洁,关键在于设置max参数以决定颜色映射的上限。渲染效果如图所示。

当确诊人数达到100时,相关省份在地图上会呈现显著的颜色差异,一目了然。有兴趣的用户还可以进一步扩展,制作市级或全球范围的疫情地图。
最后,期盼所有地区都能回归安全的蓝色状态。武汉加油,中国加油!
总结
上述内容介绍了使用Python制作新型冠状病毒实时疫情图的方法,希望能对读者有所帮助。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













