코로나19로 인한 경제적인 어려움도 있지만 가장 심각한 것은 사망자가 폭증하고 있다는 사실이다. 얼마나 코로나19로 인해 많은 사람들이 죽음으로 내몰리고 있는지 각 국가별 사망자수를 비교하면 큰 의미가 있을 것으로 생각된다. 먼저 데이터는 World Mortality Dataset [1]을 사용하고 이를 한국과 주요 국가를 비교해보자.
GitHub world_mortality 데이터를 다운로드 받아 한국과 비교되는 주요국가만 추린다.
library(tidyverse)
library(lubridate)
library(reactable)
<- read_csv("https://raw.githubusercontent.com/akarlinsky/world_mortality/main/world_mortality.csv")
mortality_raw
<- mortality_raw %>%
mortality_tbl filter(country_name %in% c("South Korea", "Japan", "Brazil", "United Kingdom", "France", "Germany", "United States", "Italy", "Sweden")) %>%
filter(year != 2021)
## 국가별로 달리되어 있는 월별, 주별 사망자 데이터를 월별로 통합
<- mortality_tbl %>%
mortality_monthly_tbl filter(time_unit == "monthly") %>%
mutate(year_mon = lubridate::ymd(glue::glue("{year}-{time}-01"))) %>%
select(국가 = country_name, 연도 = year_mon, 사망자 = deaths)
<- mortality_tbl %>%
mortality_weekly_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, 사망자 = 사망자)
<- bind_rows(mortality_monthly_tbl, mortality_weekly_tbl) %>%
deaths_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
%>%
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")
%>%
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")
영문 위키 백과사전 List of countries by real GDP growth rate 웹사이트에서 주요 국가 2015년부터 경제성장률을 데이터로 받아 시각화하자. 세계은행(world bank) 연도별 국가별 경제성장률 데이터.
library(rvest)
<- read_html("https://en.wikipedia.org/wiki/List_of_countries_by_real_GDP_growth_rate")
wiki_html
# 2020년
<- wiki_html %>%
growth_2020_raw html_nodes(xpath = '//*[@id="mw-content-text"]/div[1]/table[1]') %>%
html_table() %>%
1]] %>%
.[[as_tibble(.)
<- growth_2020_raw %>%
growth_2020_tbl 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년 이전
<- readxl::read_excel("data/API_NY.GDP.MKTP.KD.ZG_DS2_en_excel_v2_2163412.xls", sheet = "Data", skip =3)
growth_2019_raw
<- growth_2019_raw %>%
growth_2019_tbl 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)"))
<- left_join(growth_2019_tbl, growth_2020_tbl, by = "country") %>%
growth_tbl mutate_if(is.numeric, round, digits=1) %>%
rename(국가 = country)
%>%
growth_tbl ::reactable() reactable
<- growth_tbl %>%
growth_viz_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"))
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")
데이터 과학자 이광춘 저작
kwangchun.lee.7@gmail.com