首页 > 编程语言 >【疫情动态条形图】用Python开发全球疫情排名动态条形图bar_chart_race

【疫情动态条形图】用Python开发全球疫情排名动态条形图bar_chart_race

时间:2022-10-04 20:13:15浏览次数:79  
标签:updateTime bar 疫情 df True 动态 数据 条形图

一、开发背景

你好,我是 @马哥python说 ,这是我用Python开发的全球疫情动态条形图,演示效果:
https://www.zhihu.com/zvideo/1560327622025969664
疫情动态条形图

二、讲解代码

2.1 获取数据

疫情数据从github手工下载的,地址是:
https://github.com/BlankerL/DXY-COVID-19-Data/releases/

github截图:github下载页面

数据下载后,查看数据格式,字段包含:

大洲中文、大洲英文、国家中文、国家英文、省份中文、省份英文、省份邮编、省份确诊、省份疑似、省份治愈、省份死亡、城市中文、城市英文、城市邮编、城市确诊、城市疑似、城市治愈、城市死亡、更新时间。

部分数据截图:部分疫情数据

注:由于网络原因,很多小伙伴打不开github,我已经下载好csv数据,公众号「老男孩的平凡之路」后台回复「疫情数据」即可获取最新csv数据!

2.2 数据清洗

csv下载好之后,开始清洗数据。

读取csv文件(只读取 国家名称、确诊数量、更新时间 这3个字段):

# 读取数据
data_file = 'DXYArea_20221003.csv'
df = pd.read_csv(data_file, usecols=['countryName', 'province_confirmedCount', 'updateTime'])

由于本次只分析2022年数据,所以过滤出2022的数据:

# 过滤出2022年的数据
df = df.loc[df.updateTime.astype(str).str.startswith('2022')]

由于中国数据和其他国家数据不同,中国数据是分省份统计的,所以先汇总,保证和其他国家数据格式一致:

# 由于中国数据是分省统计的,所以先把中国数据汇总一下
# 分组求和
df = df.groupby(['countryName', 'updateTime']).sum()
# 重置索引
df.reset_index(inplace=True)

转换日期格式,并将时间去掉只保留日期:

# 转换成日期类型
df['updateTime'] = pd.to_datetime(df['updateTime'])
# 把时间去掉,只保留日期
df['updateTime'] = df['updateTime'].apply(lambda x: x.strftime('%Y-%m-%d'))

由于存在每天多次统计的情况,所以只保留最新的一条数据:

df2 = df.groupby(['countryName', 'updateTime']).apply(lambda t: t[t.province_confirmedCount == t.province_confirmedCount.max()])
df2.drop_duplicates(inplace=True)  # 删除重复值
df2.reset_index(inplace=True,drop=True) #重置索引

下面,开始行列转换(很关键!这是bar_chart_race库要求的输入格式)

转换代码:

# 行列转换
df3 = df2.set_index(['updateTime', 'countryName'])['province_confirmedCount'].unstack()
df3.columns.name = None
# 重置索引
df3.reset_index(inplace=True)

转换前,国家为行:转换前

转换后,国家为列:转换后

下面就可以开始开发可视化代码了。

2.3 可视化开发

画图之前,再进行一次数据清洗:

# 数据清洗
df3.fillna(0, inplace=True)  # 填充空值
df3.set_index('updateTime', inplace=True)  # 设置索引

核心代码,可视化开发条形图:

import bar_chart_race as bcr
# 生成结果文件
bcr.bar_chart_race(df=df3,  # 输入数据
                   filename='covid19_10.mp4',  # 输出文件名
                   n_bars=30,  # 柱子的个数
                   title='2022全世界TOP30疫情确诊数量国家动态排名'  # 标题
                   )

代码中,我设置了4个参数(输入数据、输出文件名、条形图条数、标题),当然,bar_chart_race还支持更多参数,比如图片大小、标题大小、柱形大小、排序规则等等,详细请见官网介绍:Bar Chart Race

最后效果(数据截止到2022.10.02):
https://www.zhihu.com/zvideo/1560327622025969664


本文首发公号: 【动态条形图bar_chart_race】用Python开发全球疫情排名动态条形图



我是马哥,全网累计粉丝上万,欢迎一起交流python技术。
各平台搜索“马哥python说”:知乎、哔哩哔哩、小红书、新浪微博。

标签:updateTime,bar,疫情,df,True,动态,数据,条形图
From: https://www.cnblogs.com/mashukui/p/16754352.html

相关文章

  • 初学C语言笔记221004动态内存管理
    constint*consta=&b;//3intconst*consta=&b;//4第三个a是静态的指针(第二个const修饰),指向int,这个int是静态的(第一个const修饰)第四个a是静态的......
  • systemverilog中的静态变量static和动态变量automatic
    本文参考:SystemVerilog静态变量和动态变量_行走的BUG永动机的博客-CSDN博客_systemverilog静态变量和动态变量systemverilog之Automatic-腾讯云开发者社区-腾讯云(ten......
  • 【Azure 环境】Azure Resource Graph Explorer 中实现动态数组数据转换成多行记录模式
    问题描述想对Azure中全部VM的NSG资源进行收集,如果只是查看一个VM的NSG设定,可以在门户页面中查看表格模式,但是如果想把导出成表格,可以在AzureResourceGraphExplorer中查找......
  • Java实现---动态修改定时任务的执行时间
    实现的效果通过接口调用,在不重启服务的前提下,动态修改定时任务的执行时间如何实现1、只需要两个依赖,也就是Springboot项目最基本的依赖<dependencies><dependency>......
  • 算法 - 动态规划
    动态规划技术的核心是“子问题划分”和“记忆化”。比如,leetcode#70.爬楼梯与leetcode#120.三角形最小路径和。#70的子问题划分是这样的----由于每次只能向上爬一个或......
  • Spring AOP基础之代理模式.静态代理和动态代理
    代理模式一、代理模式介绍代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展......
  • vue3动态路由及菜单
    一般来说,前端项目中的路由,很有可能是需要动态注册的。因为菜单可能在管理系统中维护,还跟权限绑定,用户登录以后,需要动态展示菜单。菜单往往跟路由挂钩,因此,路由需要动态注册。......
  • 动态表名插件
    ​​官方文档​​pom.xml,注意mybatisplus版本需高于3.4.3.2<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spr......
  • 恶意代码分析 动态行为分析 Lab3-1
    Lab3-1使用动态分析基础技术来分析lab03-01.exe 目录Lab3-11.找出这个恶意代码的导入函数与字符串列表2.这个恶意代码在主机上的感染迹象特征是什么3.这个恶意代码......
  • 【动态规划】背包问题----分组背包
    题目描述acwing分组背包要点1.每组物品有若干个,同一组内的物品最多只能选一个2.总体积不超过V3.总价值最大分析状态计算用v[i][j]表示第i组的第j个物品的体积,w[i......