Python实战之疫苗研 * 况可视化
作者:Real&Love 发布时间:2023-08-19 15:29:35
一、安装plotly库
因为这部分内容主要是用plotly库进行数据动态展示,所以要先安装plotly库
pip install plotly
除此之外,我们对数据的处理还用了numpy和pandas库,如果你没有安装的话,可以用以下命令一行安装
pip install plotly numpy pandas
#导入所需库
import pandas as pd
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
二、疫苗研 * 况
各国采用的疫苗品牌概览
通过对各国卫生部门确认备案的疫苗品牌,展示各厂商的疫苗在全球的分布
#读取数据
locations=pd.read_csv(r'data/locations.csv')
locations
这里我们的loacation中可以看到各个地方的疫苗和数据的来源与数据来源的网页
三、数据处理
#发现数据中vaccines列中包含了多个品牌的情况,将这类数拆为多条
vaccines_by_country=pd.DataFrame()
for i in locations.iterrows():
df=pd.DataFrame({'Country':i[1].location,'vaccines':i[1].vaccines.split(',')})
vaccines_by_country=pd.concat([vaccines_by_country,df])
vaccines_by_country['vaccines']=vaccines_by_country.vaccines.str.strip()# 去掉空格
vaccines_by_country.vaccines.unique() # 查看疫苗的种类
四、可视化疫苗的分布情况
#绘图
fig=px.choropleth(vaccines_by_country,
locations='Country',
locationmode='country names',
color='vaccines',
facet_col='vaccines',
facet_col_wrap=3)
fig.update_layout(width=1200, height=1000)
fig.show()
各品牌分布:
Pfizer/BioNTech 主要分布于北美,南美的智利、厄瓜多尔,欧洲、沙特
Sputnik V 主要分布于俄罗斯、伊朗、巴基斯坦、非洲的阿尔及利亚以及南美的玻利维亚、阿根廷
Oxford/AstraZeneca 主要分布于欧洲、南亚、巴西
Moderna 主要分布在北美和欧洲
Sinopharm/Beijing 主要分布在中国、北非部分国家和南美的秘鲁
Sinovac 主要分布在中国、南亚、土耳其和南美
Sinopharm/Wuhan 主要仅分布于中国
Covaxin 主要分布于印度
综上可以发现,全球采用最广的仍是Pfizer/BioNTech,国产疫苗中Sinovac(北京科兴疫苗)输出到了较多国家
五、各品牌疫苗上市情况(仅部分国家)
根据数据集中提供的部分国家20年12月以来各品牌疫苗接种情况,分析各品牌上市时间及市场占有情况
#读取数据
vacc_by_manu=pd.read_csv(r'data/vaccinations-by-manufacturer.csv')
#定义函数,用于从原始数据中组织宽表
def query(df,country,date,vaccine):
try:
result=df.loc[(df.location==country)&(df.date==date)&(df.vaccine==vaccine)].total_vaccinations.iloc[0]
except:
result=np.nan
return result
vacc_by_manu
六、组织宽表
#组织宽表
vacc_combined=pd.DataFrame(columns=['location','date','Pfizer/BioNTech', 'Sinovac', 'Moderna', 'Oxford/AstraZeneca'])
for i in vacc_by_manu.location.unique():
for j in vacc_by_manu.date.unique():
for z in vacc_by_manu.vaccine.unique():
result=query(vacc_by_manu,i,j,z)
if vacc_combined.loc[(vacc_combined.location==i)&(vacc_combined.date==j)].empty:
result_df=pd.DataFrame({'location':i,'date':j,z:result},index=['new'])
vacc_combined=pd.concat([vacc_combined,result_df])
else:
vacc_combined.loc[(vacc_combined.location==i)&(vacc_combined.date==j),z]=result
vacc_combined
七、补全缺失数据
#补全缺失数据
temp=pd.DataFrame()
for i in vacc_combined.location.unique():#按国家进行不全
r=vacc_combined.loc[vacc_combined.location==i]
r=r.fillna(method='ffill',axis=0)#先按最近一次的数据进行补全
temp=pd.concat([temp,r])#若没有最近的数据,认为该项为0
temp=temp.fillna(0).reset_index(drop=True)
temp
八、绘制堆叠柱状图
#绘制堆叠柱状图
fig=px.bar(temp,
x='location',
y=vacc_by_manu.vaccine.unique(),
animation_frame='date',
color_discrete_sequence=['#636efa','#19d3f3','#ab63fa','#00cc96']#为了查看方便,品牌颜色与前一部分对应
)
fig.show()
数据中主要涉及Pfizer/BioNTech、Sinovac、Moderna、Oxford/AstraZeneca 4个品牌,其中:
Pfizer/BioNTech 上市时间最早,20年12月24日时即已经开始在智利接种了,之后在12月底开始在欧洲接种,21年1月12日开始在美国接种
Sinovac 21年2月2日开始在智利接种Moderna 21年1月8日先在意大利开始接种,随后12日即开始在美国大量接种,最终在欧洲及美国均大量接种
Oxford/AstraZeneca 21年2月2日先在意大利开始接种,随后即在欧洲开始接种
整体上看,Pfizer/BioNTech上市最早,且在全球占有份额最大,Moderna 随后上市,主要占据美国和欧洲市场,Sinovac、Oxford/AstraZeneca上市均较晚,其中Sinovac占据了智利的大部分市场份额,而Oxford/AstraZeneca主要分布于欧洲,且占份额很小
来源:https://blog.csdn.net/weixin_45508265/article/details/116795919


猜你喜欢
- 最近碰到一个mysql5数据库的问题。就是一个标准的servlet/tomcat网络应用,后台使用mysql数据库。问题是待机一晚上后,第二
- 记得之前跟我女票说过,说要帮她空间点赞,点到999就不点了。刚开始还能天天记得,但是后来事情一多,就难免会忘记,前两天点赞的时候忽然觉得这样
- 哦,这就是真正牛X的程序员。不过,他也仅仅是牛X罢了,还不是大神。大神程序员是什么样儿呢?他是扫地僧,大隐隐于市。先搞清楚这些名词再说别的:
- 针对之前安装mysql的笔记进行了总结,分享给大家。1.下载下载地址:http://dev.mysql.com/downloads/mysq
- 前言动态生成表格是前端开发中非常重要的内容,常常是后端返回数据(大多是json类型),我们前端通过js循环来动态添加,所以这部分内容是十分重
- 之前做1月总结的时候说过希望每天或者每2天开始的更新一些学习笔记,这是开始的第一篇。这篇介绍的是如何把一个 itertools.c
- 先看看:css中class与id的区别及应用表单的name与id其实是同一个意思,都是为了标记对象名称。它们所不同的是:name是Netsc
- 前言PyGame 是一个专门设计来进行游戏开发设计的 Python 模块,允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚,
- 我们可以通过 asyncio.wait() 函数等待异步任务完成。可以等待不同的条件,例如所有任务完成、第一个任务完成以及第一个任务因异常而
- GBK简体字符集的编码是同时用1个字节和2个字节来表示的。当高位是0x00~0x7f时,为一个字节,高位为0x80以上时用2个字节表示&qu
- 描述:让Len,Left,Right函数识别中文;对中文识别为两个字符,ASCII码为一个;可用此函数代替Len,Left,Right函数。
- 先看一个示例代码如下<template> <div align="center" styl
- python queue队列类型及函数1.队列的种类Python queue模块的FIFO队列先进先出。 class queue.Queue
- vue1.0中 vm.$dispatch 和 vm.$broadcast 被弃用,改用$emit,$onvm.$on( event, cal
- ---- 一、 引言: ---- 回滚段是数据库的一部分,它记录数据库变更的信息。使用这些信息实现数据库的读一致性及其恢复。若回滚段出现故障
- set oSQLServer =server.createobject("SQLDMO.SQLServer")oSQLS
- 今天有个哥们问我要是JavaScript函数重名了会有什么后果?开始我没有细想,就说可能会出错吧,可是等我实验完了发现页面没有任何脚本错误提
- 在用selenium爬取网页的时候,有时候需要登陆,这时候用selenium获取cookie和携带cookie是很方便的,获取cookie可
- 今天分享一个我自己写的实用脚本,主要是将.xml文件进行批量的修改首先,声明我并不是很了解.xml的相关知识,所以今天主要是以我遇到的问题来
- 在开发 图像 动画 游戏 相关的程序时, 双缓冲( double-buffer )一直是程序员常用(必用)的技巧. 当然 随着各种引擎 框架