Python实现疫情地图可视化


Posted in Python onFebruary 05, 2021

一、 json模块

       JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

  • json.loads():将json格式的str转化成python的数据格式;
  • json.loads():将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))

Python实现疫情地图可视化

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

Python实现疫情地图可视化

二、通过Python实现疫情地图可视化

需求:爬取疫情的数据、如何处理json数据以及根据疫情数据如何利用pyecharts绘制疫情地图。

Python实现疫情地图可视化

Python实现疫情地图可视化

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,开头的部分数据如下:

Python实现疫情地图可视化

2.将json格式的数据保存到Excel

        无论是json数据存储的,还是Python的基本数据类型存储的,对于数据分析都不是很友好,所以我们可以将其数据存储类型转化为pandas的DataFrame类型,因为DataFrame和Excel可以更好的相互转换。

生成的数据模式如下:

Python实现疫情地图可视化

将以上的数据进行处理,获得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)

处理好的数据结构如下表:

Python实现疫情地图可视化

3.应用pyecharts进行数据可视化

        pyecharts是一款将python与echarts结合的强大的数据可视化工具。绘制出来的图比Python的Matplotlib简单美观。使用之前需要在Python环境中按照pycharts。在终端中输入命令: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")

最终的运行效果如下:

Python实现疫情地图可视化

注:以上的运行环境是Python3.7版本,IDE是基于浏览器端的Jupter Notebook。

以上就是Python实现疫情地图可视化的详细内容,更多关于python 疫情地图可视化的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python中私有函数调用方法解密
Apr 29 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
Python中的异常处理相关语句基础学习笔记
Jul 11 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
Aug 02 Python
django利用request id便于定位及给日志加上request_id
Aug 26 Python
Python设计模式之观察者模式原理与用法详解
Jan 16 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 Python
Python基于WordCloud制作词云图
Nov 29 Python
python实现滑雪游戏
Feb 22 Python
python小程序基于Jupyter实现天气查询的方法
Mar 27 Python
Python实现播放和录制声音的功能
Aug 12 Python
python套接字socket通信
Apr 01 Python
pycharm 实现调试窗口恢复
Feb 05 #Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
Feb 05 #Python
Pycharm 跳转回之前所在页面的操作
Feb 05 #Python
python自动化办公操作PPT的实现
Feb 05 #Python
20行代码教你用python给证件照换底色的方法示例
Feb 05 #Python
浅谈盘点5种基于Python生成的个性化语音方法
Feb 05 #Python
Python环境搭建过程从安装到Hello World
Feb 05 #Python
You might like
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
用IE远程创建Mysql数据库的简易程序
2006/10/09 PHP
Zend 输出产生XML解析错误
2009/03/03 PHP
解析PHP缓存函数的使用说明
2013/05/10 PHP
php关联数组快速排序的方法
2015/04/17 PHP
详解php的socket通信
2015/08/11 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
JS文件上传神器bootstrap fileinput详解
2021/01/28 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
2017/01/05 Javascript
apicloud拉起小程序并传递参数的方法示例
2018/11/21 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
解决Django后台ManyToManyField显示成Object的问题
2019/08/09 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
Tensorflow实现多GPU并行方式
2020/02/03 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
2020/02/29 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
2020/03/14 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
数控机械专业个人的自我评价
2014/01/02 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
庆祝教师节活动总结
2015/03/23 职场文书
整改通知书
2015/04/20 职场文书
员工加薪申请报告
2015/05/15 职场文书
债务纠纷代理词
2015/05/25 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
高中开学感言
2015/08/01 职场文书
使用Ajax实现进度条的绘制
2022/04/07 Javascript
MySQL提取JSON字段数据实现查询
2022/04/22 MySQL
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android