Zhong, Yun Sheng

自2021開始,各廠牌疫苗已陸續透過EUA上市,疫苗覆蓋率是目前公衛推行的首要目標,希望能透過疫苗緩解目前Covid-19的傳播。目前疫苗施打持續進行中,有些國家甚至已經達成50%施打率,透過來自Johns Hopkins University 所彙整的全球Covid-19資料,希望了解目前施打疫苗後與緩解Covid-19傳播情況。

*透過pandas進行Data Preparing and Cleaning,並主要以Plotly進行Visualization

import pandas as pd
import numpy as np
import plotly.express as px

Covid-19 World Spread

首先透過世界圖可以看到自2020-1-24到2021-10-31,確診病例分佈的情況

Untitled

data_url = '<https://raw.githubusercontent.com/datasets/covid-19/main/data/countries-aggregated.csv>'
df = pd.read_csv('countries-aggregated.csv')
# global Covid-19 spread
fig = px.choropleth(df, 
										locations='Country', locationmode='country names',
										color='Confirmed',animation_frame='Date')
fig.update_layout(title_text='Global spread of Covid-19')
fig.show()

Maximun Confirmed per day

接下來我們也想知道,各個國家的最大單一確診量,並排序出前50名,可以看到幾乎都由人口大國包辦(USA, India, Brazil),但China卻沒有上榜,可能是他們對於防疫真的做得很好,但也有可能是資料缺少 or 政治因素(?)。

Untitled

def max_infection_number_per_day():
    df = pd.read_csv('owid-covid-data.csv')

		# Data clean
    countries = df['iso_code'].unique()
    countries = [i for i in countries if len(i) == 3]

    # loop over all countries
    max_number = []
    for c in countries:
        df_c = df[df['iso_code'] == c]
        max_ = df_c['new_cases'].max()
        max_number.append(max_)

		# create new dataframe 
    df_max = pd.DataFrame()
    df_max['Country'] = countries
    df_max['Maximum Confirmed Case per day'] = max_number

		# select top 50 countries
    df_max_rate_top_50 = df_max.sort_values(by='Maximum Confirmed Case per day', ascending=False).iloc[0:49]
    px.bar(df_max_rate_top_50, x='Country', y='Maximum Confirmed Case per day', color='Country',
           title='Top 50 Maximum Confirmed Number Per Day').show()

max_infection_number_per_day()

完全疫苗接種率50%的國家以及接種數量

接下來我們想知道,各國達成50%接種率的時間和施打的疫苗總量分佈

Untitled

def vaccination_rate_and_pop():
    df = pd.read_csv('owid-covid-data.csv')
		
    df.sort_values('date', inplace=True)
    countries = df['iso_code'].unique()
    date_30_vaccinated, country, pop, total_vac, death = [], [], [], [], []
    number = 50
		# loop over all countries,指定iso_code == 3        
    for c in countries:
        if len(c) == 3:
            df_usa = df[df['iso_code'] == c]
            df_usa['full_vaccinated%'] = df_usa['people_fully_vaccinated'] / df_usa['population'] * 100
            if df_usa['full_vaccinated%'].max() > number:
                df_usa_vaccinated_half = (df_usa[df_usa['full_vaccinated%'] >= number])['date'].iloc[0]
                df_usa_total_vac = (df_usa[df_usa['full_vaccinated%'] >= number])['total_vaccinations'].iloc[0]
                df_usa_death_cases = (df_usa[df_usa['full_vaccinated%'] >= number])['new_deaths'].iloc[0]
                date_30_vaccinated.append(df_usa_vaccinated_half)
                country.append(c)
                pop.append(df_usa['population'].max())
                total_vac.append(df_usa_total_vac)
                death.append(df_usa_death_cases)
    new_df = pd.DataFrame()
    new_df[f'Date of vaccinated rate above {number}%'] = date_30_vaccinated
    new_df['country'] = country
    new_df['Population'] = pop
    new_df['Total vaccinations'] = total_vac
    new_df['New deaths'] = death
 
    # 達成率50%
    fig = px.scatter(new_df, x=f'Date of vaccinated rate above {number}%', y='Total vaccinations', size='Population',
                     color='Population', text='country', log_y=True, size_max=120, title=f'已達成{number}%接種率國家')
    # for i in range(sort_df.shape[0]):
    #    fig.add_annotation(x=sort_df['Date of vaccinated rate above 50%'][i], y=sort_df['population'][i],
    #                       text=sort_df['country'][i])
    fig.update_layout(showlegend=False)
    fig.show()

美國和中國施打疫苗的數量都非常龐大。但從疫苗施打開始(1月)也是到接近8月完整施打疫苗數量才過半,而最左邊的以色列五月就已經施打過半的人口。另一個延伸的問題是:

       **完全施打率超過50%的國家(美國和以色列為例),單日確診數量是否有明顯的下降?**