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 队列详解及实例代码
Oct 18 Python
python图像处理入门(一)
Apr 04 Python
Python使用指定端口进行http请求的例子
Jul 25 Python
python3的url编码和解码,自定义gbk、utf-8的例子
Aug 22 Python
Django REST Framework之频率限制的使用
Sep 29 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
Jan 02 Python
Python调用Windows命令打印文件
Feb 07 Python
Python模拟FTP文件服务器的操作方法
Feb 18 Python
Python检测端口IP字符串是否合法
Jun 05 Python
Django --Xadmin 判断登录者身份实例
Jul 03 Python
Python unittest discover批量执行代码实例
Sep 08 Python
基于注解实现 SpringBoot 接口防刷的方法
Mar 02 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
php连接oracle数据库的方法(测试成功)
2016/05/26 PHP
php实现头像上传预览功能
2017/04/27 PHP
PHP 获取 ping 时间的实现方法
2017/09/29 PHP
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
JavaScript针对网页节点的增删改查用法实例
2015/02/02 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
一个可复用的vue分页组件
2017/05/15 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
关于webpack2和模块打包的新手指南(小结)
2017/08/07 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
详解vue+css3做交互特效的方法
2017/11/20 Javascript
微信小程序实现动态设置页面标题的方法【附源码下载】
2017/11/29 Javascript
Python 解析XML文件
2009/04/15 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
Python Series从0开始索引的方法
2018/11/06 Python
Python面向对象程序设计构造函数和析构函数用法分析
2019/04/12 Python
12个Python程序员面试必备问题与答案(小结)
2019/06/24 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
django表单中的按钮获取数据的实例分析
2020/07/31 Python
Python实现JS解密并爬取某音漫客网站
2020/10/23 Python
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
中国跨境在线时尚零售商:Bellelily
2018/04/06 全球购物
采购经理岗位职责
2014/02/16 职场文书
《假如》教学反思
2014/04/17 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
气象学专业个人求职信
2014/04/22 职场文书
通报表扬范文
2015/01/17 职场文书
上课讲话检讨书范文
2015/05/07 职场文书
银行反洗钱宣传活动总结
2015/05/08 职场文书
「地球外少年少女」BD发售宣传CM公开
2022/03/21 日漫
MySQL查询日期时间
2022/05/15 MySQL