Python实现疫情地图可视化:从数据解析到pyecharts绘图
本文详解如何使用Python实现疫情地图可视化。首先介绍json模块解析数据,接着通过requests模块爬取疫情接口,利用pandas将JSON转换为DataFrame并保存为Excel。最后,使用pyecharts库结合echarts地图包,绘制全国确诊疫情地图,展示从数据获取到可视化输出的完整流程。
一、json模块
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人类阅读和编写,同时也便于机器解析和生成,从而有效提升网络传输效率。
- json.loads():用于将JSON格式的字符串转换为Python的数据类型;
- json.dumps():用于将Python的数据结构(如字典或列表)转换为JSON格式的字符串;
# 如何将json数据解析成我们所熟悉的Python数据类型?
import json
# 将json格式的str转化成python的数据格式:字典
dic = json.loads('{"name":"Tom","age":23}')
res = json.loads('["name","age","gender"]')
print(f'利用loads将json字符串转化成Python数据类型{dic}',type(dic))
print(f'利用loads将json字符串转化成Python数据类型{res}',type(res))

dics = {"name":"Tom","age":23}
result = json.dumps(dics)
print(type(result))
result

二、通过Python实现疫情地图可视化
主要需求包括:爬取疫情相关数据、处理JSON格式数据,以及利用pyecharts库绘制疫情分布地图。


1.数据的获取(基于request模块)
import requests
import json
# 国内疫情数据
China_url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
headers = {
# 浏览器伪装
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
'referer': 'https://news.qq.com/',
}
# 发起get请求,获取响应数据
response = requests.get(China_url,headers=headers).json()
data = json.loads(response['data'])
# 保存数据
with open('./2021-02-03国内疫情.json','w',encoding='utf-8') as f:
# 不采用ASCII编码
f.write(json.dumps(data,ensure_ascii=False,indent=2))
爬取的数据以JSON格式保存,部分初始数据示例如下:

2.将json格式的数据保存到Excel
无论是直接存储JSON数据还是Python基本数据类型,都不利于后续的数据分析。因此,我们可以将数据存储类型转换为pandas的DataFrame类型,因为DataFrame与Excel之间可以更方便地进行相互转换。
生成的数据模式如下:

对上述数据进行进一步处理,获得类似Excel表格的规范化数据格式。
import pandas as pd
chinaTotalData = pd.DataFrame(china_citylist)
# 将整体数据chinaTotalData中的today和total数据添加到DataFrame中
# 处理total字典里面的各个数据项
# ======================================================================
confirmlist = []
suspectlist = []
deadlist = []
heallist = []
deadRatelist = []
healRatelist = []
# print(chinaTotalData['total'].values.tolist()[0])
for value in chinaTotalData['total'].values.tolist():
confirmlist.append(value['confirm'])
suspectlist.append(value['suspect'])
deadlist.append(value['dead'])
heallist.append(value['heal'])
deadRatelist.append(value['deadRate'])
healRatelist.append(value['healRate'])
chinaTotalData['confirm'] = confirmlist
chinaTotalData['suspect'] = suspectlist
chinaTotalData['dead'] = deadlist
chinaTotalData['heal'] = heallist
chinaTotalData['deadRate'] = deadRatelist
chinaTotalData['healRate'] = healRatelist
# ===================================================================
# 创建全国today数据
today_confirmlist = []
today_confirmCutslist = []
for value in chinaTotalData['today'].values.tolist():
today_confirmlist.append(value['confirm'])
today_confirmCutslist.append(value['confirmCuts'])
chinaTotalData['today_confirm'] = today_confirmlist
chinaTotalData['today_confirmCuts'] = today_confirmCutslist
# ==================================================================
# 删除total、today两列
chinaTotalData.drop(['total','today'],axis=1,inplace=True)
chinaTotalData.head()
# 将其保存到Excel中
chinaTotalData.to_excel('2021-02-03国内疫情.xlsx',index=False)
处理后的数据结构如下表所示:

3.应用pyecharts进行数据可视化
pyecharts是一款将Python与Echarts结合的强力数据可视化工具,其生成的图表比Python的Matplotlib更为简洁美观。在使用前,需要在Python环境中安装pyecharts。在终端中执行以下命令:pip install pyecharts
利用pyecharts绘制疫情地图 基于上述疫情数据,我们可以绘制全国疫情分布地图。 在绘图前,需根据地图需求安装对应的echarts地图包。
pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
pip install echarts-china-misc-pypkg
pip install echarts-china-countries-pypkg
pip install echarts-united-kingdom-pypkg
# 导入对应的绘图工具包
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Map
df = pd.read_excel('./2021-02-03国内疫情.xlsx')
# 1.根据绘制国内总疫情图(确诊)
data = df.groupby(by='province',as_index=False).sum()
data_list = list(zip(data['province'].values.tolist(),data['confirm'].values.tolist()))
# 数据格式[(黑龙江,200),(吉林,300),...]
def map_china() -> Map:
c = (
Map()
.add(series_name="确诊病例",data_pair=data_list,maptype='china')
.set_global_opts(
title_opts = opts.TitleOpts(title='疫情地图'),
visualmap_opts=opts.VisualMapOpts(is_piecewise=True,
pieces = [{"max":9, "min":0, "label":"0-9","color":"#FFE4E1"},
{"max":99, "min":10, "label":"10-99","color":"#FF7F50"},
{"max":499, "min":100, "label":"100-4999","color":"#F08080"},
{"max":999, "min":500, "label":"500-999","color":"#CD5C5C"},
{"max":9999, "min":1000, "label":"1000-9999","color":"#990000"},
{"max":99999, "min":10000, "label":"10000-99999","color":"#660000"},]
)
)
)
return c
d_map = map_china()
d_map.render("mapEchrts.html")
最终的运行效果如下:

注:以上运行环境为Python3.7版本,IDE采用基于浏览器端的Jupyter Notebook。
以上就是Python实现疫情地图可视化的详细内容,更多关于python 疫情地图可视化的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









