Data Science

[python] 파이썬 데이터 분석 코로나 19 동적 시각화 분석하기 3편

sTricky 2021. 5. 7. 17:32

[python] 파이썬 데이터 분석 코로나 19 동적 시각화 분석하기 3편

[python] 파이썬 데이터 분석 코로나 19 동적 시각화 분석하기 3편

코로나 19 데이터를 이용한 동적 시각화 분석 세번째 시간 입니다.
아직 1, 2편을 안보신 분들은 아래 링크로 이동 하셔서 1, 2편을 먼저 보시고 이 회차를 시작 하시면 됩니다.
그럼 바로 시작 해보겠습니다.

# 이전 포스트 보러가기

2021.03.29 - [Data Science] - [python 데이터 분석 실습] 코로나 19 2021 현재 시점 분석하기 1편

 

[python 데이터 분석 실습] 코로나 19 2021 현재 시점 분석하기 1편

코로나 19 2021 현재 시점 python으로 데이터 분석하기 안녕하세요. 파이썬 데이터 분석 실습 쉽게 따라해보기~ 이번 시간은 코로나 19의 2021년 현재 상황 분석 하기 입니다. 우리 세상을 뒤덮고, 일

stricky.tistory.com

2021.04.22 - [Data Science] - [python 데이터 분석 실습] 코로나 19 2021 현재 시점 데이터 동적 시각화 분석하기 2편

 

[python 데이터 분석 실습] 코로나 19 2021 현재 시점 데이터 동적 시각화 분석하기 2편

[python 데이터 분석 실습] 코로나 19 2021 현재 시점 데이터 동적 시각화 분석하기 2편 파이썬 데이터 분석 코로나19 데이터 분석 실습 두번째 시간 입니다. 1편을 올리고 시간이 좀 늦었습니다. 이번

stricky.tistory.com

10명 사망 이후 추이

최초로 10명이 사망한 이후 사망자 추이를 국가별로 나타내는 그래프 입니다.
코드는 다음과 같습니다.

n_countries = 20
n_start_death = 10
fatality_top_countires = top_country_df.sort_values('fatalities', ascending=False).iloc[:n_countries]['country'].values
country_df['date'] = pd.to_datetime(country_df['date'])


df_list = []
for country in fatality_top_countires:
    this_country_df = country_df.query('country == @country')
    start_date = this_country_df.query('fatalities > @n_start_death')['date'].min()
    this_country_df = this_country_df.query('date >= @start_date')
    this_country_df['date_since'] = this_country_df['date'] - start_date
    this_country_df['fatalities_log1p'] = np.log10(this_country_df['fatalities'] + 1)
    this_country_df['fatalities_log1p'] -= this_country_df['fatalities_log1p'].values[0]
    df_list.append(this_country_df)

tmpdf = pd.concat(df_list)
tmpdf['date_since_days'] = tmpdf['date_since'] / pd.Timedelta('1 days')

fig = px.line(tmpdf,
              x='date_since_days', y='fatalities_log1p', color='country',
              title=f'Fatalities by country since 10 deaths, as of {target_date}')
fig.add_trace(go.Scatter(x=[0, 28], y=[0, 4], name='Double by 7 days', line=dict(dash='dash', color=('rgb(200, 200, 200)'))))
fig.add_trace(go.Scatter(x=[0, 56], y=[0, 4], name='Double by 14 days', line=dict(dash='dash', color=('rgb(200, 200, 200)'))))
fig.add_trace(go.Scatter(x=[0, 84], y=[0, 4], name='Double by 21 days', line=dict(dash='dash', color=('rgb(200, 200, 200)'))))
fig.show()

아래와 같은 그래프가 생성 됩니다.

10명 사망 이후 추이

 

 

 

국가 별 일일 신규 확인 사례

이번엔 국가 별 일일 신규 확진자 사례를 시각화 하도록 하겠습니다.
코드는 다음과 같습니다.

country_df['prev_confirmed'] = country_df.groupby('country')['confirmed'].shift(1)
country_df['new_case'] = country_df['confirmed'] - country_df['prev_confirmed']
country_df['new_case'].fillna(0, inplace=True)
top30_country_df = country_df[country_df['country'].isin(top30_countries)]

fig = px.line(top30_country_df,
              x='date', y='new_case', color='country',
              title=f'DAILY NEW Confirmed cases by country')
fig.show()

그래프를 한번 보실께요.
국가 별로 일일 확진자가 어떻게 나오는지 한눈에 볼 수 있습니다.
범례를 클릭하시면 해당 국가것만 볼 수 있습니다.

국가 별 일일 신규 확인 사례

국가별 신규 확진자 factor 지표

다음은 국가별 신규 확진자의 factor 지표 입니다.
코드부터 보겠습니다.

country_df['avg_new_case'] = country_df.groupby('country')['new_case'].rolling(7).mean().reset_index(0, drop=True)
country_df['prev_new_case'] = country_df.groupby('country')['avg_new_case'].shift(1)
country_df['growth_factor'] = country_df['avg_new_case'] / country_df['prev_new_case']

country_df['growth_factor'].fillna(0, inplace=True)
top30_country_df = country_df[country_df['country'].isin(top30_countries)]

fig = px.line(top30_country_df,
              x='date', y='growth_factor', color='country',
              title=f'Growth factor by country')
fig.add_trace(go.Scatter(x=[ww_df['date'].min(), ww_df['date'].max()], y=[1., 1.], name='Growth factor=1.', line=dict(dash='dash', color=('rgb(255, 0, 0)'))))
fig.update_yaxes(range=[0., 5.])
fig.show()

그래프는 다음과 같이 그려 집니다.
역시 마찬가지로 범례를 이용해 보세요.

국가별 신규 확진자 factor 지표

 

 

 

시간대별 코로나 19 확산 추이

이번엔 세계지도를 그리고 그 위에 색상으로 시간대별 코로나 19 확산 추이를 보도록 하겠습니다.
코드는 다음과 같습니다.

country_df['date'] = country_df['date'].apply(str)
country_df['confirmed_log1p'] = np.log1p(country_df['confirmed'])
country_df['fatalities_log1p'] = np.log1p(country_df['fatalities'])

fig = px.scatter_geo(country_df, locations="country", locationmode='country names', 
                     color="confirmed", size='confirmed', hover_name="country", 
                     hover_data=['confirmed', 'fatalities'],
                     range_color= [0, country_df['confirmed'].max()], 
                     projection="natural earth", animation_frame="date", 
                     title='COVID-19: Confirmed cases spread Over Time', color_continuous_scale="portland")
# fig.update(layout_coloraxis_showscale=False)
fig.show()

이렇게 나옵니다.

시간대별 코로나 19 확산 추이

신기합니다.

시간대별 일일 신규 확진자 추이

이번에는 시간대별 일일 신규 확진자를 세계지도 위에 색상으로 시각화 해보겠습니다.

country_df.loc[country_df['new_case'] < 0, 'new_case'] = 0.
fig = px.scatter_geo(country_df, locations="country", locationmode='country names', 
                     color="new_case", size='new_case', hover_name="country", 
                     hover_data=['confirmed', 'fatalities'],
                     range_color= [0, country_df['new_case'].max()], 
                     projection="natural earth", animation_frame="date", 
                     title='COVID-19: Daily NEW cases over Time', color_continuous_scale="portland")
fig.show()

아래와 같은 그림을 볼 수 있습니다.

시간대별 일일 신규 확진자 추이

자, 이렇게 데이터 시각화를 진행해 보았습니다.
이 소스 코드를 응용하셔서 가지고 계신 데이터를 가지고 활용 해보시길 바랍니다.
세편 내내 함께 하시느라 수고가 많으셨습니다.
감사합니다.

by.sTricky