1 코로나19 사망자

1.1 코로나19 사망자 데이터

코로나19로 인한 경제적인 어려움도 있지만 가장 심각한 것은 사망자가 폭증하고 있다는 사실이다. 얼마나 코로나19로 인해 많은 사람들이 죽음으로 내몰리고 있는지 각 국가별 사망자수를 비교하면 큰 의미가 있을 것으로 생각된다. 먼저 데이터는 World Mortality Dataset [1]을 사용하고 이를 한국과 주요 국가를 비교해보자.

1.2 데이터 전처리

GitHub world_mortality 데이터를 다운로드 받아 한국과 비교되는 주요국가만 추린다.

library(tidyverse)
library(lubridate)
library(reactable)

mortality_raw <- read_csv("https://raw.githubusercontent.com/akarlinsky/world_mortality/main/world_mortality.csv")


mortality_tbl <- mortality_raw %>% 
  filter(country_name %in% c("South Korea", "Japan", "Brazil", "United Kingdom", "France", "Germany", "United States", "Italy", "Sweden")) %>% 
  filter(year != 2021) 

## 국가별로 달리되어 있는 월별, 주별 사망자 데이터를 월별로 통합
mortality_monthly_tbl <- mortality_tbl %>% 
  filter(time_unit == "monthly") %>% 
  mutate(year_mon = lubridate::ymd(glue::glue("{year}-{time}-01"))) %>% 
  select(국가 = country_name, 연도 = year_mon, 사망자 = deaths)

mortality_weekly_tbl <- mortality_tbl %>% 
  # Week --> Date
  mutate(base_year = lubridate::ymd(glue::glue("{year}-01-01"))) %>% 
  filter(time_unit == "weekly") %>% 
  mutate(date = base_year + lubridate::weeks(time -1)) %>% 
  # Date --> Year + Month
  mutate(month = month(date)) %>% 
  group_by(country_name, year, month) %>% 
  summarise(사망자 = sum(deaths)) %>% 
  ungroup() %>% 
  # Year + Month --> 연도 
  mutate(year_mon = lubridate::ymd(glue::glue("{year}-{month}-01"))) %>% 
  select(국가 = country_name, 연도 = year_mon, 사망자 = 사망자)

deaths_tbl <- bind_rows(mortality_monthly_tbl, mortality_weekly_tbl)  %>% 
  mutate(year = year(연도),
         month = month(연도)) %>% 
  mutate(is_2020 = if_else(year == 2020, "2020년", "2015~2019년")) %>% 
  mutate(국가명 = case_when(국가 == "Brazil" ~ "브라질",
                            국가 == "France" ~ "프랑스",
                            국가 == "Germany" ~ "독일",
                           국가 == "Italy" ~ "이탈리아",
                           국가 == "Japan" ~ "일본",
                           국가 == "South Korea" ~ "대한민국",
                           국가 == "Sweden" ~ "스웨덴",
                           국가 == "United Kingdom" ~ "영국",
                           국가 == "United States" ~ "미국"))

deaths_tbl %>% 
  reactable::reactable()

1.3 시각화

1.3.1 연도별 사망자수: Y 고정축

deaths_tbl %>% 
  ggplot(aes(x = as.integer(month), y=사망자, group = year, color = is_2020)) +
    geom_line() +
    facet_wrap(~국가명, scales = "fixed") +
    scale_x_continuous(limits = c(1,12), breaks = c(2,4,6,8,10)) +
    scale_y_continuous(labels = scales::comma) +
    scale_color_manual(values = c("gray50", "red")) +
    theme_minimal(base_family = "NanumGothic") +
    labs(x="", y="사망자", title = "코로나19로 인한 주요국가 월별 사망자수 비교",
         subtitle = "2015년부터 2020년 월별 사망자수",
         color = "") +
    theme(legend.position = "top")

1.3.2 연도별 사망자수: Y 변동축

deaths_tbl %>% 
  ggplot(aes(x = as.integer(month), y=사망자, group = year, color = is_2020)) +
    geom_line() +
    facet_wrap(~국가명, scales = "free_y") +
    scale_x_continuous(limits = c(1,12), breaks = c(2,4,6,8,10)) +
    scale_y_continuous(labels = scales::comma) +
    scale_color_manual(values = c("gray50", "red")) +
    theme_minimal(base_family = "NanumGothic") +
    labs(x="", y="사망자", title = "코로나19로 인한 주요국가 월별 사망자수 비교",
         subtitle = "2015년부터 2020년 월별 사망자수",
         color = "") +
    theme(legend.position = "top")

# ggsave("fig/covid19-deaths.png")

2 경제 성장률

2.1 데이터

영문 위키 백과사전 List of countries by real GDP growth rate 웹사이트에서 주요 국가 2015년부터 경제성장률을 데이터로 받아 시각화하자. 세계은행(world bank) 연도별 국가별 경제성장률 데이터.

library(rvest)

wiki_html <- read_html("https://en.wikipedia.org/wiki/List_of_countries_by_real_GDP_growth_rate") 

# 2020년 
growth_2020_raw <- wiki_html %>% 
  html_nodes(xpath = '//*[@id="mw-content-text"]/div[1]/table[1]') %>% 
  html_table() %>% 
  .[[1]] %>% 
  as_tibble(.)  

growth_2020_tbl <- growth_2020_raw %>% 
  set_names(c("rank", "country", "2020")) %>% 
  mutate(`2020` = as.numeric(`2020`)) %>% 
  mutate(country = if_else(country == "South Korea", "Korea, Rep.", country)) %>% 
  select(country, `2020`) %>% 
  filter(str_detect(country, "(Korea, Rep)|(United States)|(France)|(Japan)|(Germany)|(Sweden)|(United Kingdom)|(Brazil)|(Italy)"))

# 2019년 이전
growth_2019_raw <- readxl::read_excel("data/API_NY.GDP.MKTP.KD.ZG_DS2_en_excel_v2_2163412.xls", sheet = "Data", skip =3)

growth_2019_tbl <- growth_2019_raw %>% 
  select(country = "Country Name", `2015`, `2016`, `2017`, `2018`, `2019`) %>% 
  filter(str_detect(country, "(Korea, Rep)|(United States)|(France)|(Japan)|(Germany)|(Sweden)|(United Kingdom)|(Brazil)|(Italy)"))

growth_tbl <- left_join(growth_2019_tbl, growth_2020_tbl, by = "country") %>% 
  mutate_if(is.numeric, round, digits=1) %>% 
  rename(국가 = country)

growth_tbl %>% 
  reactable::reactable()

2.2 시각화

2.2.1 국가별 비교

growth_viz_tbl <- growth_tbl %>% 
  pivot_longer(-국가, names_to = "연도", values_to = "경제성장률") %>% 
  mutate(국가명 = case_when(국가 == "Brazil" ~ "브라질",
                            국가 == "France" ~ "프랑스",
                            국가 == "Germany" ~ "독일",
                           국가 == "Italy" ~ "이탈리아",
                           국가 == "Japan" ~ "일본",
                           국가 == "Korea, Rep." ~ "대한민국",
                           국가 == "Sweden" ~ "스웨덴",
                           국가 == "United Kingdom" ~ "영국",
                           국가 == "United States" ~ "미국")) %>% 
  mutate(is_korea = case_when(str_detect(국가명, "(대한민국)") ~ "대한민국", 
                              str_detect(국가명, "미국") ~ "미국",
                              TRUE ~ "기타"))


growth_viz_tbl %>% 
  ggplot(aes(x=연도, y=경제성장률, group = 국가명, color = is_korea)) +
    geom_line() +
    geom_point() +
    facet_wrap(~국가명) +
    theme_minimal(base_family = "NanumGothic") +
    labs(x="", y="경제성장률", title = "주요국가 경제성장률",
         subtitle = "2015년부터 2020년 경제성장률(단위: %)",
         color = "") +
    theme(legend.position = "none") +
    scale_color_manual(values = c("gray50", "blue", "red")) 

2.2.2 국가별 한장 비교

library(gghighlight)
library(ggrepel)
library(extrafont)
loadfonts()

growth_viz_tbl %>% 
  mutate(연도 = as.integer(연도)) %>% 
  mutate(label = if_else(연도 == max(연도), as.character(국가명), NA_character_))  %>% 
  ggplot(aes(x=연도, y=경제성장률, group = 국가명, color = is_korea)) +
    geom_line() +
    geom_point() +
    labs(x="", y="경제성장률", title = "코로나19 위기 속 주요국가 경제성장률",
         subtitle = "2015년부터 2020년 경제성장률(단위: %)",
         color = "") +
    geom_label_repel(aes(label = label),
                  nudge_x = 0.5,
                  na.rm = TRUE,
                  family = "NanumGothic") +
    theme_minimal(base_family = "NanumGothic") +
    theme(legend.position = "none") +
    scale_color_manual(values = c("gray75", "blue", "red")) +
    scale_x_continuous(limits = c(2015,2021)) +
    geom_hline(yintercept = 0, linetype = 3, color = "gray37")

# ggsave("fig/covid19-growth.png")
1. Karlinsky A, Kobak D. The world mortality dataset: Tracking excess mortality across countries during the COVID-19 pandemic. medRxiv. 2021. doi:10.1101/2021.01.27.21250604.
 

데이터 과학자 이광춘 저작

kwangchun.lee.7@gmail.com