python画新冠肺炎国内和世界各国累计确诊数量热图
新冠肺炎国内疫情基本控制住,很多地方都开始摘下口罩了。但是国外的疫情依然处于爆发期,特别是美国,截止目前其累计确诊数量已突破110w。五一节北京柳絮杨絮满天飞,不适合外出。在家心血来潮,献丑画一下各地区新冠肺炎累计确诊数量热图。
废话不多说,代码如下:
一、中国
1、获取数据:
import requests as rq
import re
import numpy as np
import pandas as pd # 数据来源:新华网
# http://my-h5news.app.xinhuanet.com/h5activity/yiqingchaxun/index.html
url = 'http://fms.news.cn/swf/2020_sjxw/2_1_xgyq/js/data.js'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
} # 网页数据
home_rt = rq.get(url, headers=headers).text # 提取日期
dates = re.search('_g_map_data_days = \[(.*?)\]', home_rt).group(1)
dates = re.findall('\'(.*?)\'', dates)
# # 日更日期
# dates = re.search('_g_dt_date = \[(.*?)\]', home_rt).group(1)
# dates = re.findall('\'(.*?)\'', dates) # 提取省份
provinces = re.search('_g_map_data_province = \[(.*?)\];', home_rt).group(1)
provinces = re.findall('\'(.*?)\'', provinces) # 提取数据
data = re.search('_g_map_data_data =\[(.*?)\];', home_rt, re.S).group(1)
data = re.findall('\[(.*?)\]', data, re.S)
data = [i.split(',') for i in data]
data = np.array(data).T # 生成表格
data = pd.DataFrame(data, columns=dates, index=provinces)
data = data.astype('int') # 转换str类型为int型
last_colum = data.columns[-1]
data = data.sort_values(last_colum, ascending=False)
得到如下dataframe格式数据:
2、画图
本次画图采用的是pyecharts:
pyecharts是基于echarts,是百度的开源可视化工具,包含多种酷炫工具,并且是交互式的,图像可以用鼠标进行拖动放大缩小等,强烈推荐。
1、github源码(包含安装方式,最好选择源码安装)。2、介绍文档。3、官方示例代码
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker province_data = [] # 生成pyecharts数据格式
for p_i, pro_name in enumerate(data.index):
province_data.append([pro_name, int(data.iloc[p_i, -1])]) c = (
Map(opts.InitOpts(width='600px', height='400px', bg_color='white')) # 创建地图对象
.add('累计确诊', province_data, "china", is_map_symbol_show=False) # 添加数据,选择中国地图
# .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) # 用于显示各省份名字
.set_global_opts(title_opts=opts.TitleOpts(title="中国各省新冠肺炎累计确诊数量", pos_left='center'), # 设置标题图例等信息
legend_opts=opts.LegendOpts(is_show=False),
visualmap_opts=opts.VisualMapOpts(is_piecewise = True,
pieces = [{"max": 100, 'color': '#ffeead', 'label': '小于100人'},
{"min": 100, "max": 500, 'color': '#f29c2b', 'label': '100-500人'},
{"min": 500, "max": 1000, 'color': '#d9534f', 'label': '500-1000人'},
{"min": 1000, "max": 2000, "color": '#de4307', 'label': '1000-2000人'},
{"min": 2000, 'color': '#dd0a35', 'label': '2000人以上'}])
)
)
c.render_notebook()
输出图像如下:
二、世界地图
1、世界各国中英文映射关系(点击展开)
nameMap = {
'Singapore':'新加坡',
'Dominican Rep.':'多米尼加',
'Palestine':'巴勒斯坦',
'Bahamas':'巴哈马',
'Timor-Leste':'东帝汶',
'Afghanistan':'阿富汗',
'Guinea-Bissau':'几内亚比绍',
"Côte d'Ivoire":'科特迪瓦',
'Siachen Glacier':'锡亚琴冰川',
"Br. Indian Ocean Ter.":'英属印度洋领土',
'Angola':'安哥拉',
'Albania':'阿尔巴尼亚',
'United Arab Emirates':'阿联酋',
'Argentina':'阿根廷',
'Armenia':'亚美尼亚',
'French Southern and Antarctic Lands':'法属南半球和南极领地',
'Australia':'澳大利亚',
'Austria':'奥地利',
'Azerbaijan':'阿塞拜疆',
'Burundi':'布隆迪',
'Belgium':'比利时',
'Benin':'贝宁',
'Burkina Faso':'布基纳法索',
'Bangladesh':'孟加拉国',
'Bulgaria':'保加利亚',
'The Bahamas':'巴哈马',
'Bosnia and Herz.':'波斯尼亚和黑塞哥维那',
'Belarus':'白俄罗斯',
'Belize':'伯利兹',
'Bermuda':'百慕大',
'Bolivia':'玻利维亚',
'Brazil':'巴西',
'Brunei':'文莱',
'Bhutan':'不丹',
'Botswana':'博茨瓦纳',
'Central African Rep.':'中非',
'Canada':'加拿大',
'Switzerland':'瑞士',
'Chile':'智利',
'China':'中国',
'Ivory Coast':'象牙海岸',
'Cameroon':'喀麦隆',
'Dem. Rep. Congo':'刚果民主共和国',
'Congo':'刚果',
'Colombia':'哥伦比亚',
'Costa Rica':'哥斯达黎加',
'Cuba':'古巴',
'N. Cyprus':'北塞浦路斯',
'Cyprus':'塞浦路斯',
'Czech Rep.':'捷克',
'Germany':'德国',
'Djibouti':'吉布提',
'Denmark':'丹麦',
'Algeria':'阿尔及利亚',
'Ecuador':'厄瓜多尔',
'Egypt':'埃及',
'Eritrea':'厄立特里亚',
'Spain':'西班牙',
'Estonia':'爱沙尼亚',
'Ethiopia':'埃塞俄比亚',
'Finland':'芬兰',
'Fiji':'斐',
'Falkland Islands':'福克兰群岛',
'France':'法国',
'Gabon':'加蓬',
'United Kingdom':'英国',
'Georgia':'格鲁吉亚',
'Ghana':'加纳',
'Guinea':'几内亚',
'Gambia':'冈比亚',
'Guinea Bissau':'几内亚比绍',
'Eq. Guinea':'赤道几内亚',
'Greece':'希腊',
'Greenland':'格陵兰',
'Guatemala':'危地马拉',
'French Guiana':'法属圭亚那',
'Guyana':'圭亚那',
'Honduras':'洪都拉斯',
'Croatia':'克罗地亚',
'Haiti':'海地',
'Hungary':'匈牙利',
'Indonesia':'印度尼西亚',
'India':'印度',
'Ireland':'爱尔兰',
'Iran':'伊朗',
'Iraq':'伊拉克',
'Iceland':'冰岛',
'Israel':'以色列',
'Italy':'意大利',
'Jamaica':'牙买加',
'Jordan':'约旦',
'Japan':'日本',
'Kazakhstan':'哈萨克斯坦',
'Kenya':'肯尼亚',
'Kyrgyzstan':'吉尔吉斯斯坦',
'Cambodia':'柬埔寨',
'Korea':'韩国',
'Kosovo':'科索沃',
'Kuwait':'科威特',
'Lao PDR':'老挝',
'Lebanon':'黎巴嫩',
'Liberia':'利比里亚',
'Libya':'利比亚',
'Sri Lanka':'斯里兰卡',
'Lesotho':'莱索托',
'Lithuania':'立陶宛',
'Luxembourg':'卢森堡',
'Latvia':'拉脱维亚',
'Morocco':'摩洛哥',
'Moldova':'摩尔多瓦',
'Madagascar':'马达加斯加',
'Mexico':'墨西哥',
'Macedonia':'马其顿',
'Mali':'马里',
'Myanmar':'缅甸',
'Montenegro':'黑山',
'Mongolia':'蒙古',
'Mozambique':'莫桑比克',
'Mauritania':'毛里塔尼亚',
'Malawi':'马拉维',
'Malaysia':'马来西亚',
'Namibia':'纳米比亚',
'New Caledonia':'新喀里多尼亚',
'Niger':'尼日尔',
'Nigeria':'尼日利亚',
'Nicaragua':'尼加拉瓜',
'Netherlands':'荷兰',
'Norway':'挪威',
'Nepal':'尼泊尔',
'New Zealand':'新西兰',
'Oman':'阿曼',
'Pakistan':'巴基斯坦',
'Panama':'巴拿马',
'Peru':'秘鲁',
'Philippines':'菲律宾',
'Papua New Guinea':'巴布亚新几内亚',
'Poland':'波兰',
'Puerto Rico':'波多黎各',
'Dem. Rep. Korea':'朝鲜',
'Portugal':'葡萄牙',
'Paraguay':'巴拉圭',
'Qatar':'卡塔尔',
'Romania':'罗马尼亚',
'Russia':'俄罗斯',
'Rwanda':'卢旺达',
'W. Sahara':'西撒哈拉',
'Saudi Arabia':'沙特阿拉伯',
'Sudan':'苏丹',
'S. Sudan':'南苏丹',
'Senegal':'塞内加尔',
'Solomon Is.':'所罗门群岛',
'Sierra Leone':'塞拉利昂',
'El Salvador':'萨尔瓦多',
'Somaliland':'索马里兰',
'Somalia':'索马里',
'Serbia':'塞尔维亚',
'Suriname':'苏里南',
'Slovakia':'斯洛伐克',
'Slovenia':'斯洛文尼亚',
'Sweden':'瑞典',
'Swaziland':'斯威士兰',
'Syria':'叙利亚',
'Chad':'乍得',
'Togo':'多哥',
'Thailand':'泰国',
'Tajikistan':'塔吉克斯坦',
'Turkmenistan':'土库曼斯坦',
'East Timor':'东帝汶',
'Trinidad and Tobago':'特里尼达和多巴哥',
'Tunisia':'突尼斯',
'Turkey':'土耳其',
'Tanzania':'坦桑尼亚',
'Uganda':'乌干达',
'Ukraine':'乌克兰',
'Uruguay':'乌拉圭',
'United States':'美国',
'Uzbekistan':'乌兹别克斯坦',
'Venezuela':'委内瑞拉',
'Vietnam':'越南',
'Vanuatu':'瓦努阿图',
'West Bank':'西岸',
'Yemen':'也门',
'South Africa':'南非',
'Zambia':'赞比亚',
'Zimbabwe':'津巴布韦'
}
2、处理数据(新华网数据)
foreigh_rt = re.search('国外表格(.*)', home_rt, re.S).group(1)
foreigh_data = re.findall('cityName"\>(.*?)\</p\>.*?cityQZ"\>(.*?)\</p\>.*?cityXZQZ"\>(.*?)\</p\>.*?citySWSJ"\>(.*?)\</p\>', foreigh_rt, re.S)
foreigh_data = pd.DataFrame(foreigh_data)
foreigh_data.columns = ['国家', '累计确诊', '新增', '累计死亡']
foreigh_data[foreigh_data=='-'] = 0 country_name = pd.DataFrame([nameMap.values(), nameMap.keys()]).T
country_name.columns = ['国家', 'name']
foreigh_data = pd.merge(foreigh_data, country_name, on='国家', how='outer') # 替换中文名字为英文
foreigh_data = foreigh_data.fillna(0) indexes = list(foreigh_data.iloc[:, -1])
foreigh_data = foreigh_data.drop(['国家', 'name'], axis=1)
foreigh_data.index = indexes country_data = []
for cou_i, coun_index in enumerate(foreigh_data.index):
country_data.append([coun_index, int(foreigh_data.iloc[cou_i, 0])])
country_data.append(['China', int(data.iloc[:, -1].sum())]) # 添加中国数据
3、画图
c = (
Map(opts.InitOpts(width='800px', height='400px', bg_color='white'))
.add("累计确诊", country_data, "world", is_map_symbol_show=False)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) # 不显示国家名字
.set_global_opts(
title_opts=opts.TitleOpts(title="世界新冠肺炎累计确诊热图", pos_left='center'),
legend_opts=opts.LegendOpts(is_show=False),
visualmap_opts=opts.VisualMapOpts(is_piecewise = True,
pieces = [{"max": 1000, 'color': '#ffeead', 'label': '1k人以下'},
{"min": 1000, "max": 50000, 'color': '#f29c2b', 'label': '1k~5w人'},
{"min": 50000, "max": 200000, 'color': '#d9534f', 'label': '5w-20w人'},
{"min": 200000, "max": 1000000, "color": '#F71E35', 'label': '20w-100w人'},
{"min": 1000000, 'color': '#C00000', 'label': '100w以上'}]) )
) c.render_notebook()
输出图像如下:
python画新冠肺炎国内和世界各国累计确诊数量热图的更多相关文章
- iMX287A基于嵌入式Qt的新冠肺炎疫情监控平台
目录 1.前言 2.数据接口的获取 3.Qt界面的实现 4.在开发板上运行Qt程序 5.最终效果 6.代码下载 @ 1.前言 之前我使用在桌面版本Qt实现了肺炎疫情监控平台:基于Qt的新冠肺炎疫情数据 ...
- LabVIEW+OpenVINO在CPU上部署新冠肺炎检测模型实战
前言 之前博客:[YOLOv5]LabVIEW+OpenVINO让你的YOLOv5在CPU上飞起来给大家介绍了在LabVIEW上使用openvino加速推理,在CPU上也能感受丝滑的实时物体识别.那我 ...
- 参加Folding@Home(FAH)项目,为战胜新冠肺炎贡献出自己的一份力量
鉴于新冠病毒(COVID-19)在全球范围内的大规模传播,PCMR和NVIDIA呼吁全球PC用户加入Folding@home项目贡献自己闲置的GPU计算力,协助抗击新冠状病毒疫情. 目前全球有超过40 ...
- 矩池云 | 新冠肺炎防控:肺炎CT检测
连日来,新型冠状病毒感染的肺炎疫情,牵动的不仅仅是全武汉.全湖北,更是全国人民的心,大家纷纷以自己独特的方式为武汉加油!我们相信坚持下去,终会春暖花开. 今天让我们以简单实用的神经网络模型,来检测肺炎 ...
- 探索新冠肺炎(COVID-19)对全球航班的影响
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 随着今天从欧洲到美国的旅行限制生效,以及为了减缓新冠病毒的传播更 ...
- 面试刷题27:程序员如何防护java界的新冠肺炎?
背景 安全是软件设计的第二个非功能性需求,一般是当软件出现安全问题的时候才会得到重视. 最明显的比如 数据库用户信息和密码泄漏等: 数据加解密技术 单向加密 md5+salt值, 这个是软件设计中使用 ...
- Python小白的数学建模课-A3.12 个新冠疫情数模竞赛赛题与点评
新冠疫情深刻和全面地影响着社会和生活,已经成为数学建模竞赛的背景帝. 本文收集了与新冠疫情相关的的数学建模竞赛赛题,供大家参考,欢迎收藏关注. 『Python小白的数学建模课 @ Youcans』带你 ...
- Python模块---制作新冠疫情世界地图()
目录 pyecharts模块 简介 安装pyecharts 测试pyecharts模块 pyecharts实战:绘制新冠肺炎疫情地图 需求分析 请求数据 提取数据 处理数据 制作可视化地图 设置可视化 ...
- SIR模型预测新冠病毒肺炎发病数据
大家还好吗? 背景就不用多说了吧?本来我是初四上班的,现在延长到2月10日了.这是我工作以来时间最长的一个假期了.可惜哪也去不了.待在家里,没啥事,就用python模拟预测一下新冠病毒肺炎的数据吧.要 ...
随机推荐
- java中的动手动脑
1.关于构造函数的问题 为什么上面的代码不能通过编译? 因为当你没有定义构造函数时,java编译器在编译时会自动生成一个无参的构造函数,上面的代码就可以进行执行了.但是当你顶一个构造函数时,编译器将不 ...
- MySQL入门,第一部分,全局管理命令
1.连接数据库命令 mysql -h localhost -u root -p 回车后输入密码即可连接到数据库 2.显示当前mysql管理系统中的所有数据库 SHOW DATABASES; 3.显示当 ...
- 【python实现卷积神经网络】激活层实现
代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...
- js数组的遍历(API)
1.for 循环 普通遍历方法,可优化,存下数组的length,避免每次都去获取数组的length,性能提升 for(var i=0;i<arr.length;i++){ console.log ...
- python干货-类属性和方法,类的方法重写
类属性与方法 类的私有属性 __private_attrs: 两个下划线开头,表明为私有,外部不可用,内部使用时self.__private_attrs. 类的方法 在类的内部,使用 def 关键字来 ...
- FZU 2150
题目大意:有一个矩阵,"."表示石头,"#",表示小草,有两个人,可以在任意两个位置点燃小草,小草可以上下左右蔓延,蔓延一次的时间为1,问所有蔓延完所有小草所花 ...
- V - Largest Rectangle in a Histogram HDU - 1506
两种思路: 1 单调栈:维护一个单调非递减栈,当栈为空或者当前元素大于等于栈顶元素时就入栈,当前元素小于栈顶元素时就出栈,出栈的同时计算当前值,当前值所包含的区间范围为从当前栈顶元素到当前元素i的距离 ...
- python3-邮件发送-不同格式
0x00 邮件格式 要发邮件,总要先了解邮件格式吧,这里指的是邮件的各个部分与python中SMTP所对应的一些必须的格式 0x01 简单发送邮件格式如下: import smtplib from e ...
- 【题解】P1291 百事世界杯之旅 - 期望dp
P1291 [SHOI2002]百事世界杯之旅 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 "--在 \ ...
- 《Spring In Action》阅读笔记之核心概念
DI 依赖注入:在xml中配置的bean之间的依赖关系就是依赖注入 AOP 面向切面编程:如在xml中定义某个方法为切点,然后配置在该切点(该方法)调用前后需要调用的方法,从而简化了代码并解耦. Sp ...