COVID-19疫情已席捲全球近2年,至今奪走了5百多萬條寶貴的生命。自疫苗面世後,各國也在積極施打疫苗,希望可以增加國內的接種人數,以盡快達到群體免疫門檻。專家預測,若一個國家想要達到群體免疫,完全接種疫苗(即已接種兩劑疫苗,並間隔14天以上)的人口百分比至少得達到70%。當然,這個數字只是一個估計值。因應疫苗的效力及病毒的變異,實際上的門檻數字有可能會更高。不過,我們姑且以這個百分比為基準點,看看目前世界上有多少百分比的國家已達成了這個目標。
世界衛生組織的官網(https://covid19.who.int/info/)有詳細記載相關資訊,我們可以下載標題為『Vaccination data』的資料集來進行分析。
為了方便處理,小編已將下載後的資料集放至Github。因此,讀者可以直接透過下列程式來讀取資料。此處我們透過index_col參數,將COUNTRY欄位設為輸出DataFrame之Index,同時檢視該DataFrame之欄位名稱。
其中,完全接種疫苗的人口百分比會存在PERSONS_FULLY_VACCINATED_ PER100欄位中。我們可以利用它來建立一個過濾器(布林陣列),篩選出超過百分比門檻(即70%)的國家:
full為一布林陣列,內存的資料值為True或False,端看某個項目是否符合我們的篩選條件。在進行數值運算時,Pandas會將其中的True值視為1;False值則視為0。因此,若想知道符合條件的項目所佔之百分比,可以直接使用mean()方法來取得:
以上輸出意味著,共有17.1%的國家已達到群體免疫的門檻。需要特別留意的是,此處我們並沒有考量到缺失值。若資料中出現缺失值,所求得的統計數據也會有所偏誤。因此,我們搭配isna()和sum()來找出PERSONS_FULLY_ VACCINATED_PER100欄位中出現的缺失值數量:
以上程式的輸出結果為4,表示該欄位中共有4個缺失值。我們可以透過dropna()方法除去缺失值,然後再重新計算百分比(數字會略微上升)。
順帶一提,Pandas的describe()方法非常好用,可以一次過計算出不同的統計資訊,如:平均值、中位數、最小值等。現在,我們先將達到群體免疫門檻的國家找出來(透過full這個布林陣列),並將其資料另存成data_full變數。接下來,將describe()套用在data_full的TOTAL_VACCINATIONS(內存有該國家的總疫苗施打數)上,進而分析輸出的統計資訊:
從輸出可見,該欄位的最小值(74)與最大值(195490201)差了千萬倍。這是因為資料集中也包含了某些人數極少的國家資料,因而導致統計數據的變異量很大。如果想排除這些國家,我們可以另外建立一個布林陣列,搭配先前的full一併使用。在以下程式中,我們將同時找出總疫苗施打數大於5百萬,以及完全接種疫苗的人口百分比至少達到70%的國家。
結果顯示,共有20個國家同時符合我們的所有條件。以上程式已放到Colab筆記本中,有興趣的讀者可以跑跑看。
若想了解更多的資料分析範例,歡迎參考旗標出版的《Python資料分析必備套件!Pandas資料清理、重塑、過濾、視覺化》一書。全書涵蓋了 Pandas 資料分析的 114 技,保證您學好學滿!現正與《NumPy 高速運算徹底解說》合購75折優惠中,兩個Python熱門套件,幫您一次搞定!