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三元运算符实现方法
Dec 17 Python
python文件读写并使用mysql批量插入示例分享(python操作mysql)
Feb 17 Python
python字典键值对的添加和遍历方法
Sep 11 Python
Python 文件处理注意事项总结
Apr 10 Python
python merge、concat合并数据集的实例讲解
Apr 12 Python
CentOS7安装Python3的教程详解
Apr 10 Python
Python字典推导式将cookie字符串转化为字典解析
Aug 10 Python
Pyinstaller 打包exe教程及问题解决
Aug 16 Python
Python文件操作及内置函数flush原理解析
Oct 13 Python
PyQt实现计数器的方法示例
Jan 18 Python
OpenCV-Python使用cv2实现傅里叶变换
Jun 09 Python
Python内置数据类型中的集合详解
Mar 18 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
DOTA2 玩家自创拉野攻略 特色英雄快速成长篇
2020/04/20 DOTA
解析php中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
PHP中mysql_field_type()函数用法
2014/11/24 PHP
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
PHP+Mysql无刷新问答评论系统(源码)
2016/12/20 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
jQuery图片轮播的具体实现
2013/09/11 Javascript
js单例模式的两种方案
2013/10/22 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
node.js集成百度UE编辑器
2015/02/05 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
jquery使用经验小结
2015/05/20 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
图解javascript作用域链
2019/05/27 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
Echarts在Taro微信小程序开发中的踩坑记录
2020/11/09 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
关于Python中异常(Exception)的汇总
2017/01/18 Python
Python类装饰器实现方法详解
2018/12/21 Python
Python中函数参数匹配模型详解
2019/06/09 Python
用Python配平化学方程式的方法
2019/07/20 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
python实现经纬度采样的示例代码
2020/12/10 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
计算机专业优秀大学生自我总结
2014/01/21 职场文书
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
离婚协议书范文2015
2015/01/26 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis