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 相关文章推荐
wxPython学习之主框架实例
Sep 28 Python
Python实现获取操作系统版本信息方法
Apr 08 Python
如何处理Python3.4 使用pymssql 乱码问题
Jan 08 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
python验证码识别教程之利用滴水算法分割图片
Jun 05 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
python去除拼音声调字母,替换为字母的方法
Nov 28 Python
Python代理IP爬虫的新手使用教程
Sep 05 Python
Python socket模块ftp传输文件过程解析
Nov 05 Python
python 字段拆分详解
Dec 17 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
Jan 24 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
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
PHP静态新闻列表自动生成代码
2007/06/14 PHP
克隆一个新项目的快捷方式
2013/04/10 PHP
解析php常用image图像函数集
2013/06/24 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
jquery实现超简单的瀑布流布局【推荐】
2017/03/08 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
react native带索引的城市列表组件的实例代码
2017/08/08 Javascript
nodejs判断文件、文件夹是否存在及删除的方法
2017/11/10 NodeJs
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
Vue入门之数据绑定(小结)
2018/01/08 Javascript
搭建vue开发环境
2018/07/19 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
微信公众平台 发送模板消息(Java接口开发)
2019/04/17 Javascript
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
python调用cmd命令行制作刷博器
2014/01/13 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
Python编程之string相关操作实例详解
2017/07/22 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
Django 设置多环境配置文件载入问题
2020/02/25 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
纯CSS3实现扇形动画菜单(简化版)实例源码
2017/01/17 HTML / CSS
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
2014/09/26 面试题
求职自荐信范文格式
2013/11/29 职场文书
刑事和解协议书范本
2014/11/19 职场文书
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript