一、开发背景你好,我是 @马哥python说 ,这是我用Python开发的全球疫情动态条形图,演示效果:https://www.zhihu.com/zvideo/1560327622025969664
文章插图
二、讲解代码2.1 获取数据疫情数据从github手工下载的,地址是:https://github.com/BlankerL/DXY-COVID-19-Data/releases/
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')]
由于中国数据和其他国家数据不同 , 中国数据是分省份统计的,所以先汇总,保证和其他国家数据格式一致:【【疫情动态条形图】用Python开发全球疫情排名动态条形图bar_chart_race】
# 由于中国数据是分省统计的,所以先把中国数据汇总一下# 分组求和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说”:知乎、哔哩哔哩、小红书、新浪微博 。
推荐阅读
- 【论文翻译】KLMo: Knowledge Graph Enhanced Pretrained Language Model with Fine-Grained Relationships
- 【Java8新特性】- 接口中默认方法修饰为普通方法
- NFC 怎么使用(nfc具体使用方法)
- 儿童飞行棋怎么玩(儿童学棋入门教程)
- 收纳梦之岛拒做恋爱脑怎么过
- 光遇欧若拉季网易云黑胶会员怎么领取
- 原神复苏之梦怎么完成
- 骁龙870和天玑1200处理器哪个好?
- 一个人玩飞行棋怎么玩(玩飞行棋的诀窍)
- 原神11月4日礼包兑换码是多少