利用Python绘制中国新型冠状病毒疫情图(国家和省)
大数据课程设计上来就要求绘制一个地图可以反应出来中国各个省份每日疫情的人数,包括确诊,疑似,死亡,治愈。如下图所示:
这里用到了Python中的pyecharts库,点此了解详细信息
1.先来将需要的模块导入进来
import requests
import json
import re
from pyecharts.charts import Map
from pyecharts import options
如果事先没有安装这些库,需要导入这些库
pip3 install requestspip3 install jsonpip3 install repip3 install pyecharts
除此之外,还需要导入中国地图以及各个省份的地图
依次是全球地图、中国省级地图、中国市级地图、中国区县级地图、中国区域地图根据需要地图导入pip3 install echarts-countries-pypkgpip3 install echarts-china-provinces-pypkgpip3 install echarts-china-cities-pypkgpip3 install echarts-china-counties-pypkgpip3 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)/~
利用Python绘制中国新型冠状病毒疫情图(国家和省)相关推荐
- Python 实现 2019 新型冠状病毒疫情地图可视化 (basemap + matplotlib)
文章目录 本人耗时2个月面试必备已出炉: [Python 全栈工程师 面试宝典 300 问深入解析 (2020 版) ](https://blog.csdn.net/u011318077/articl ...
- python人口热力图_利用Python绘制中国大陆人口热力图
https://mp.weixin.qq.com/s/Bh-L3syzJSHhLPZqzHvIyA 这篇文章给出了如何绘制中国人口密度图,但是运行存在一些问题,我在一些地方进行了修改. 本人使用的ID ...
- 利用Python绘制中国大陆人口热力图
https://mp.weixin.qq.com/s/Bh-L3syzJSHhLPZqzHvIyA 这篇文章给出了如何绘制中国人口密度图,但是运行存在一些问题,我在一些地方进行了修改. 本人使用的ID ...
- Python 绘制中国地图并标上国家名
直接使用cartopy库绘制中国以及周边国家的地图时,中国国界线有问题(藏南地区没有画到中国国界线内等)也没有九段线.下面的程序可以将国家标准国界线和九段线都添加到地图上,并标出国家名称 import ...
- 用python可以画的可爱的图形_利用Python绘制诱人的桑基图
作者:小z 来源:数据不吹牛 大家好,我是小z~ 最近,不止一次收到群里小伙伴的截图追问: "这个图叫什么???" "这个图真好看!!!怎么画啊?" 小z本没有 ...
- 利用python绘制勾股定理赵爽弦图
赵爽弦图是数学中的一个经典图形,绘制赵爽图弦用到2个python自带库turtle和math. 问题难点 画笔角是近似值,海归方向变换 解决方案 引入math库反三角函数,熟练掌握turtle库函数 ...
- 【Python】利用python进行数据分析——以新型冠状病毒疫情为例
[Python]利用python进行数据分析--以新型冠状病毒疫情为例 重要说明 只提交该文档这一个文件,做完后提交到学习通"结课大作业"中. 1. 文件命名: 必须以学号-姓名- ...
- 用Python爬取新型冠状病毒肺炎实时数据,pyecharts v1.x绘制省市区疫情地图
说明: 本文是Python可视化技术结合时下热点进行进行开发.讲解的案例,也课程思政的一个形式.文章遵守CSDN平台规定和国家法规(非新闻资质的网站不允许发布疫情数据),对运行结果(2020年2月8日 ...
- 利用Python绘制 3D 体素色温图
简 介: 测试了Matplotlib中的 体素绘制函数 voxels() ,但是无论是在 AI Studio中执行,还是直接在本地执行,都会出了错误.也就是无法通过 gca(projection='3 ...
最新文章
- 【MySQL经典案例分析】 Waiting for table metadata lock
- [一] 详细讲解: 线性表链式存储结构 中的 单链表; (数据结构和算法)
- 显示屏的方向设置问题
- BOOST_TEST_TRAIT_SAME的用法实例
- 【Java】输入三角形的三边长,求三角形的面积
- Linux RS-232 程式設計
- win11为何七代酷睿无法升级 Windows11七代酷睿无法升级的解答
- c++builder ping_C++实现ping功能转
- HttpClient发送get,post接口请求
- Zookeeper C API 指南五(同步 API 介绍)
- M8TSC预览版0.5.1发布
- 内网穿透工具的原理与开发实战
- 对称加密与非对称加密算法
- 把计算机网络关闭啦怎么打开,网络发现已关闭怎么办?Win7系统启用/关闭网络发现方法(图文)...
- YY淘宝商品数据库设计
- HTML Entity 简介
- 机械硬盘与固态硬盘的区别
- Mysql优化之explain你真的会吗?
- Jenkins系列之——第四章 Jenkins编译一个Web项目并远程发布到Tomcat
- Vue实现简单的发表评论,吐槽评论