用Python可视化新冠疫情数据


Posted in Python onJanuary 18, 2022

前言

不知道大伙有没有看到过这一句话:“中国(疫苗研发)非常困难,因为在中国我们没有办法做第三期临床试验,因为没有病人了。”这句话是中国工程院院士钟南山在上海科技大学2021届毕业典礼上提出的。这句话在全网流传,被广大网友称之为“凡尔赛”发言。

今天让我们用数据来看看这句话是不是“凡尔赛”本赛。在开始之前我们先来说说今天要用到的python库吧!

1.数据获取部分

requests lxml json openpyxl

2.数据可视化部分

pandas  pyecharts(可视化库)

以上的库都可以通过在线下载:

pip instll xx

ps:如果下载速度太慢的话也可以用国内镜像,使用命令,例如:

pip install xx(库名) -i https://pypi.tuna.tsinghua.edu.cn/simple gevent(清华镜像)

现在一起进入今天的代码部分吧!!!

数据获取

目标地址:

https://voice.baidu.com/act/newpneumonia/newpneumonia

进入目标地址我们可以看到如下所示:

用Python可视化新冠疫情数据

现在让我们一起去解析网页结构找到我们要爬取到的数据如下所示:

用Python可视化新冠疫情数据

现在我们找到想要的页面数据接下来就是通过Python来获取这些数据了,上代码:

1 import requests
2 from lxml import etree
3 import json
4 import openpyxl
5 
6 #通用爬虫
7 url = 'https://voice.baidu.com/act/newpneumonia/newpneumonia'
8 headers = {
9    "User-Agent": ".....(换成自己的)"
10 }
11 response = requests.get(url=url,headers=headers).text
12 #在使用xpath的时候要用树形态
13 html = etree.HTML(response)
14 #用xpath来获取我们之前找到的页面json数据  并打印看看
15 json_text = html.xpath('//script[@type="application/json"]/text()')
16 json_text = json_text[0]
17 print(json_text)
之后我们来解析一下json数据,上代码:
1 #用python本地自带的库转换一下json数据
2 result = json.loads(json_text)
3 print(result)
4 #通过打印出转换的对象我们可以看到我们要的数据都要key为component对应5 的值之下  所以现在我们将值拿出来
6 result = result["component"]
7 #再次打印看看结果
8 print(result)
9 获取国内当前数据
10 result = result[0]['caseList']
11 print(result)
接着我们将获取到的数据保存到excel中,上代码:
1 #创建工作簿
2 wb = openpyxl.Workbook()
 3 创建工作表
4 ws = wb.active
5 设置表的标题
6 ws.title = "国内疫情"
7  写入表头
8 ws.append(["省份","累计确诊","死亡","治愈"])
9 #获取各省份的数据并写入
10 for line in result:
11     line_name = [line["area"],line["confirmed"],line["died"],line["crued"]]
12     for ele in line_name:
13         if ele == '':
14             ele = 0
15     ws.append(line_name)
16 #保存到excel中
17 wb.save('./china.xlsx')
最后我们查看一下获取到的数据是什么样的,如图:

用Python可视化新冠疫情数据

emmmm,终于我们把数据获取部分完成了,第二部分的数据可视化来了!!!

数据可视化

这次我们用到的库是pyecharts里面的Map,我们先展示一下本次可视化用到的库

1 #可视化部分
2 import pandas  as pd
3 from pyecharts.charts import Map,Page
4 from pyecharts import options as opts
首先我们要先通过pandas库来获取到刚才我们爬取到的数据,上代码:
1  设置列对齐
2 pd.set_option('display.unicode.ambiguous_as_wide', True)
3  pd.set_option('display.unicode.east_asian_width', True)
4   打开文件
5 df = pd.read_excel('china.xlsx')
6 对省份进行统计
7  data2 = df['省份']
8 data2_list = list(data2)
9 data3 = df['累计确诊']
10  data3_list = list(data3)
11  data4 = df['死亡']
12  data4_list = list(data4)
13 data5 = df ['治愈']
14 data5_list = list(data5)

接着我们来做数据可视化,将在我国地图上的各个省份显示出对应的数值

我们以疫情发生以来治愈数为例,上代码:

1 c = (
2    Map()
3       .add("治愈", [list(z) for z in zip(data2_list, data5_list)], "china")
4      .set_global_opts(
5         title_opts=opts.TitleOpts(),
6         visualmap_opts=opts.VisualMapOpts(max_=200),
7     )
8 )
9 c.render()

用Python可视化新冠疫情数据

当然仅仅一个治愈情况当然说明不了什么,所以我们将三种情况都以这种形式显示出来,上代码:

1 a = (
2     Map()
3     .add("累计确诊", [list(z) for z in zip(data2_list, data3_list)], "china")
4        .set_global_opts(
5       title_opts=opts.TitleOpts(),
6        visualmap_opts=opts.VisualMapOpts(max_=200),
7    )
8 )
9 
10 b = (
11     Map()
12       .add("死亡", [list(z) for z in zip(data2_list, data4_list)], "china")
13       .set_global_opts(
14         title_opts=opts.TitleOpts(),
15         visualmap_opts=opts.VisualMapOpts(max_=200),
16     )
17 )
18 
19 c = (
20     Map()
21        .add("治愈", [list(z) for z in zip(data2_list, data5_list)], "china")
22         .set_global_opts(
23      title_opts=opts.TitleOpts(),
24       visualmap_opts=opts.VisualMapOpts(max_=200),
25     )
26 )
27 
28 page = Page(layout=Page.DraggablePageLayout)
29 page.add(
30     a,
31     b,
32     c,
33 )
34  先生成render.html文件
35 page.render()

用Python可视化新冠疫情数据

当然如果是直接运行代码的话展现出来的地图不是这样的,这个是通过后期的排版来完成的。那么在最后我们来说说是怎么排版的吧。

首先你先将上面的代码运行之后会产生一个render.html的文件然后你打开文件之后可以调整整个页面的布局,根据自己的喜欢来调整,接着点击左上角的“Save Config”将这个json文件保存到跟render.html这个文件同一个路径之下,最后运行一下代码:

1 #完成上一步之后把 page.render()这行注释掉
2 #然后循行这下面
3 Page.save_resize_html("render.html",
4     cfg_file="chart_config.json",
5     dest="my_test.html")

这样以后会产生一个my_test.html这个文件就是我们上面展示的那样啦。以上就是我们这次的结果。从数据的获取到数据可视化,怎么说呢pyecharts还具有其他强大的可视化功能。

python的特色

• 简单
• 易于学习
• 自由开放
• 跨平台
• 可嵌入
• 丰富的库

总结

到此这篇关于用Python可视化新冠疫情数据的文章就介绍到这了,更多相关Python疫情数据可视化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中os和shutil模块实用方法集锦
May 13 Python
python使用win32com库播放mp3文件的方法
May 30 Python
python中字符串前面加r的作用
Jun 04 Python
Python中easy_install 和 pip 的安装及使用
Jun 05 Python
使用Python爬取最好大学网大学排名
Feb 24 Python
基于python批量处理dat文件及科学计算方法详解
May 08 Python
flask入门之文件上传与邮件发送示例
Jul 18 Python
python3爬虫学习之数据存储txt的案例详解
Apr 24 Python
Python 可变类型和不可变类型及引用过程解析
Sep 27 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 Python
浅谈anaconda python 版本对应关系
Oct 07 Python
详解Python flask的前后端交互
Mar 31 Python
Python机器学习应用之基于线性判别模型的分类篇详解
68行Python代码实现带难度升级的贪吃蛇
Jan 18 #Python
如何利用Python实现n*n螺旋矩阵
Jan 18 #Python
聊聊Python String型列表求最值的问题
Jan 18 #Python
Python的三个重要函数详解
Jan 18 #Python
python多线程方法详解
Jan 18 #Python
用Python生成会跳舞的美女
You might like
怎样才能成为PHP高手?学会“懒惰”的编程
2006/12/05 PHP
基于PHP Socket配置以及实例的详细介绍
2013/06/13 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
繁简字转换功能
2006/07/19 Javascript
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
2010/04/15 Javascript
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
jquery阻止冒泡事件使用模拟事件
2013/09/06 Javascript
JavaScript从数组中删除指定值元素的方法
2015/03/18 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
Vue项目中跨域问题解决方案
2018/06/05 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
python编程使用协程并发的优缺点
2018/09/20 Python
对Python中Iterator和Iterable的区别详解
2018/10/18 Python
解析Python的缩进规则的使用
2019/01/16 Python
Django 数据库同步操作技巧详解
2019/07/19 Python
浅谈keras中loss与val_loss的关系
2020/06/22 Python
Servlet面试题库
2015/07/18 面试题
小学生志愿者活动方案
2014/08/23 职场文书
电力培训心得体会
2014/09/02 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
2016年“七一建党节”广播稿
2015/12/18 职场文书
教师学习十八届五中全会精神心得体会
2016/01/05 职场文书
python中super()函数的理解与基本使用
2021/08/30 Python
Mysql排查分析慢sql之explain实战案例
2022/04/19 MySQL
netty 实现tomcat的示例代码
2022/06/05 Servers