利用Python绘制中国新型冠状病毒疫情图(国家和省) 您所在的位置:网站首页 各省份的地图分布图 利用Python绘制中国新型冠状病毒疫情图(国家和省)

利用Python绘制中国新型冠状病毒疫情图(国家和省)

#利用Python绘制中国新型冠状病毒疫情图(国家和省)| 来源: 网络整理| 查看: 265

大数据课程设计上来就要求绘制一个地图可以反应出来中国各个省份每日疫情的人数,包括确诊,疑似,死亡,治愈。如下图所示: 在这里插入图片描述 这里用到了Python中的pyecharts库,点此了解详细信息 1.先来将需要的模块导入进来

import requests import json import re from pyecharts.charts import Map from pyecharts import options

如果事先没有安装这些库,需要导入这些库

pip3 install requests pip3 install json pip3 install re pip3 install pyecharts

除此之外,还需要导入中国地图以及各个省份的地图

依次是全球地图、中国省级地图、中国市级地图、中国区县级地图、中国区域地图 根据需要地图导入 pip3 install echarts-countries-pypkg pip3 install echarts-china-provinces-pypkg pip3 install echarts-china-cities-pypkg pip3 install echarts-china-counties-pypkg pip3 install echarts-china-misc-pypkg

2.获取数据-处理数据;利用网络爬虫爬取新浪微博上面的数据

#发起网络请求,获取数据 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}")

爬取的数据如图所示: 在这里插入图片描述 3.进行地图的生成,代码如下: 依次是确诊,死亡,治愈,疑似。其中疑似的数据爬取的好像不是很对,总人数是正确的,但是各个省份的人数不对,湖北是0。。。采用比较丑的堆叠代码形式,想简化一点可以采用函数形式。

# -*- coding: utf-8 -*- # -*- coding: utf-8 -*- """ Created on Wed Feb 19 11:11:45 2020 @author: lenovo """ 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_country = Map() #设置地图上的标题和数据标记,添加确诊人数 map_country.set_global_opts(title_opts=options.TitleOpts(title="中国实时疫情图-确诊人数:%d"%(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("中国实时疫情图生成完成!!!") province_data = [] #循环获取省份名称和对应的确诊数据 for province in table['data']['list']: #将省份数据添加到列表中去 province_data.append((province['name'], province['deathNum'])) city_data = [] #循环获取城市名称和对应的确诊数据 for city in province['city']: #这里要注意对应上地图的名字需要使用mapName这个字段 city_data.append((city['mapName'], city['conNum'])) #创建国家地图 map_country = Map() #设置地图上的标题和数据标记,添加确诊人数 map_country.set_global_opts(title_opts=options.TitleOpts(title="中国实时疫情图-死亡人数:%d"%(table['data']["deathtotal"])), 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("中国实时疫情图生成完成!!!") province_data = [] #循环获取省份名称和对应的确诊数据 for province in table['data']['list']: #将省份数据添加到列表中去 province_data.append((province['name'], province['cureNum'])) city_data = [] #循环获取城市名称和对应的确诊数据 for city in province['city']: #这里要注意对应上地图的名字需要使用mapName这个字段 city_data.append((city['mapName'], city['conNum'])) #创建国家地图 map_country = Map() #设置地图上的标题和数据标记,添加确诊人数 map_country.set_global_opts(title_opts=options.TitleOpts(title="中国实时疫情图-治愈人数:%d"%(table['data']["curetotal"])), 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("中国实时疫情图生成完成!!!") province_data = [] #循环获取省份名称和对应的确诊数据 for province in table['data']['list']: #将省份数据添加到列表中去 province_data.append((province['name'], province['susNum'])) city_data = [] #循环获取城市名称和对应的确诊数据 for city in province['city']: #这里要注意对应上地图的名字需要使用mapName这个字段 city_data.append((city['mapName'], city['conNum'])) #创建国家地图 map_country = Map() #设置地图上的标题和数据标记,添加确诊人数 map_country.set_global_opts(title_opts=options.TitleOpts(title="中国实时疫情图-疑似人数:%d"%(table['data']["sustotal"])), 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("中国实时疫情图生成完成!!!")

这是中国每天的疫情图,如果想看省份的,代码如下: 这只是治愈的,如果想看别的,可以根据上面全国的改动一些地方就行了。

# -*- coding: utf-8 -*- """ Created on Thu Feb 20 16:45:13 2020 @author: lenovo """ 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['cureNum'])) 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['cureNum']), 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") print("各个省份地图生成完成")

部分代码解释: (1)将省份数据添加到列表中去

province_data.append((province['name'], province['value'])) #将数据中对应的值取出来添加到province_data中。

(2)

title_opts=options.TitleOpts(title="A")

A是生成地图中的红色框框部分。 在这里插入图片描述 (3)

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"}]))is_piecewise=True,#设置是否为分段显示,然后通过 pieces来设置。

(4)将数据添加进去,生成中国地图,所以maptype要对应china。

map_country.add("确诊", province_data, maptype="china")

(5)一切完成,那么生成一个html网页文件。

map_country.render("country.html")

可能会有一些不对的地方,希望大家借鉴着看。还有那个疑似数据如果我有哪个地方弄的不对,希望路过的大佬指正。 希望有一天运行出来的结果,除了治愈的之外,剩下的都全是白色的。这一天一定会到来的!!!中国加油! 参考网址:https://zhuanlan.zhihu.com/p/105072241 努力加油a啊,(o)/~



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有