【疫情動態條形圖】用Python開發全球疫情排名動態條形圖bar_chart_race

一、開發背景你好,我是 @馬哥python說 ,這是我用Python開發的全球疫情動態條形圖,演示效果:https://www.zhihu.com/zvideo/1560327622025969664

【疫情動態條形圖】用Python開發全球疫情排名動態條形圖bar_chart_race

文章插圖
二、講解代碼2.1 獲取數據疫情數據從github手工下載的,地址是:https://github.com/BlankerL/DXY-COVID-19-Data/releases/
github截圖:
【疫情動態條形圖】用Python開發全球疫情排名動態條形圖bar_chart_race

文章插圖
數據下載后,查看數據格式,字段包含:
大洲中文、大洲英文、國家中文、國家英文、省份中文、省份英文、省份郵編、省份確診、省份疑似、省份治愈、省份死亡、城市中文、城市英文、城市郵編、城市確診、城市疑似、城市治愈、城市死亡、更新時間 。
部分數據截圖:
【疫情動態條形圖】用Python開發全球疫情排名動態條形圖bar_chart_race

文章插圖
注:由于網絡原因,很多小伙伴打不開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)轉換前,國家為行:
【疫情動態條形圖】用Python開發全球疫情排名動態條形圖bar_chart_race

文章插圖
轉換后,國家為列:
【疫情動態條形圖】用Python開發全球疫情排名動態條形圖bar_chart_race

文章插圖
下面就可以開始開發可視化代碼了 。
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說”:知乎、嗶哩嗶哩、小紅書、新浪微博 。

    推薦閱讀