你好,我是 @馬哥python說 ,這是我用Python開發的全球疫情動態條形圖,演示效果:
https://www.zhihu.com/zvideo/1560327622025969664
疫情資料從github手工下載的,地址是:
https://github.com/BlankerL/DXY-COVID-19-Data/releases/
github截圖:
資料下載後,檢視資料格式,欄位包含:
大洲中文、大洲英文、國家中文、國家英文、省份中文、省份英文、省份郵編、省份確診、省份疑似、省份治癒、省份死亡、城市中文、城市英文、城市郵編、城市確診、城市疑似、城市治癒、城市死亡、更新時間。
部分資料截圖:
注:由於網路原因,很多小夥伴打不開github,我已經下載好csv資料,公眾號「老男孩的平凡之路」後臺回覆「疫情資料」即可獲取最新csv資料!
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)
轉換前,國家為行:
轉換後,國家為列:
下面就可以開始開發視覺化程式碼了。
畫圖之前,再進行一次資料淨化:
# 資料淨化
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說」:知乎、嗶哩嗶哩、小紅書、新浪微博。