JHU - COVID-19 no mundo - Casos x Óbitos acumulados

Países com mais de 2.000.000 casos confirmados

COVID-19: Casos x Óbitos nos países com mais de 2.000.000 casos confirmados
COVID-19: Casos x Óbitos nos países com mais de 2.000.000 casos confirmados

O gráfico acima relaciona o número de casos com número de óbitos para os países com mais de 2.000.000 casos confirmados de COVID-19, permitindo observar a situação de cada país individualmente e com relação aos demais países e a linha ajustada entre eles. Pode ser visto que os Estados Unidos, Índia e Brasil lideram no número de casos, enquanto o México tem um número de óbitos alto com relação ao número de casos.

Dados

Os dados são obtidos da página Novel Coronavirus (COVID-19) Cases Data, da Humanitarian Data Exchange (HDX), que contém os dados epidemiológicos desde 22 de janeiro de 2020. Os dados são compilados pelo Centro de Ciência e Engenharia de Sistemas da Universidade Johns Hopkins (JHU CCSE) a partir de várias fontes.

Programa

Abaixo está mostrado o código do programa para gerar o gráfico escrito em R, mas antes de ser executado as bibliotecas utilizadas precisam ser instaladas. Os eixos dos gráficos estão em escala logarítimica, uma vez que a diferença de valores entre os países é muito grande.

#
# source('jhu_country_cases_deaths.R')
#
# Programa para gerar um gráfico relacionando o número de casos com número
# de óbitos nos países com mais de 2.000.000 casos confirmados de COVID-19.
# Os dados são obtidos do:
# HDX - HUMANITARIAN DATA EXCHANGE
# Novel Coronavirus (COVID-19) Cases Data
# https://data.humdata.org/dataset/novel-coronavirus-2019-ncov-cases
# Novel Corona Virus (COVID-19) epidemiological data since 22 January 2020.
# The data is compiled by the Johns Hopkins University Center for
# Systems Science and Engineering (JHU CCSE) from various sources.
#
# Bibliotecas
library(tidyverse)
library(gridExtra)
library(pracma)
library(ggsci)
library(ggrepel)
library(scales)

# Ler os dados baixados (casos confirmados)
jhu_cases <- read_csv(
  "~/R/dados/time_series_covid19_confirmed_global_narrow.csv",
  skip = 2,
  col_names = c(
    "Province_State",
    "Country_Region",
    "Lat",
    "Lon",
    "Date",
    "Total_Cases",
    "ISO_3166_1_Alpha_3_Codes",
    "Region_Code",
    "Sub_region_Code",
    "Intermediate_Region_Code"
  ),
  col_types = cols(
    Province_State = col_character(),
    Country_Region = col_character(),
    Lat = col_double(),
    Lon = col_double(),
    Date = col_date(),
    Total_Cases = col_integer(),
    ISO_3166_1_Alpha_3_Codes = col_character(),
    Region_Code = col_character(),
    Sub_region_Code = col_character(),
    Intermediate_Region_Code = col_character()
  )
)

# Ler os dados baixados (óbitos)
jhu_deaths <- read_csv(
  "~/R/dados/time_series_covid19_deaths_global_narrow.csv",
  skip = 2,
  col_names = c(
    "Province_State",
    "Country_Region",
    "Lat",
    "Lon",
    "Date",
    "Total_Deaths",
    "ISO_3166_1_Alpha_3_Codes",
    "Region_Code",
    "Sub_region_Code",
    "Intermediate_Region_Code"
  ),
  col_types = cols(
    Province_State = col_character(),
    Country_Region = col_character(),
    Lat = col_double(),
    Lon = col_double(),
    Date = col_date(),
    Total_Deaths = col_integer(),
    ISO_3166_1_Alpha_3_Codes = col_character(),
    Region_Code = col_character(),
    Sub_region_Code = col_character(),
    Intermediate_Region_Code = col_character()
  )
)

# Data dos dados
dataDados <- toString(max(jhu_cases$Date))

# Manter apenas os valores da data dos dados
cases <- filter(jhu_cases, Date == dataDados)
deaths <- filter(jhu_deaths, Date == dataDados)

# Total de cada país
cases <-
  aggregate(
    x = cases$Total_Cases,
    by = list(Country = cases$Country_Region),
    FUN = sum
  )
deaths <-
  aggregate(
    x = deaths$Total_Deaths,
    by = list(Country = deaths$Country_Region),
    FUN = sum
  )

# Nomes das colunas
colnames(cases) <- c("Country", "Total_Cases")
colnames(deaths) <- c("Country", "Total_Deaths")

# Somente os países com mais de 2.000,000 de casos
cases <- filter(cases, cases$Total_Cases > 2e6)

# Casos e óbitos por país
dados <- cases %>% inner_join(deaths, by = "Country")

# Criar o gráfico
plot <- ggplot(dados, aes(x = Total_Cases, y = Total_Deaths)) +
  labs(
    title = paste("Covid-19: Casos x óbitos acumulados até ", dataDados, " por país"),
    subtitle = "Países com mais de 2.000.000 casos confirmados",
    caption = paste(
      "Dados baixados do HDX",
      "(https://data.humdata.org/dataset/novel-coronavirus-2019-ncov-cases) em",
      dataDados
    ),
    x = "Casos",
    y = "Óbitos"
  ) +
  geom_text_repel(
    aes(label = Country),
    size = 3.5,
    hjust = 1,
    vjust = 1,
    color = "#EE0000FF",
    show.legend = FALSE
  ) +
  geom_point(color = "#EE0000FF",) +
  geom_smooth(method = "lm",
              color = "#3B4992FF",
              show.legend = FALSE) +
  annotate(
    geom = "text",
    x = 2e7,
    y = min(dados$Total_Deaths) + 10,
    color = "gray",
    hjust = 1,
    size = 4.5,
    label = "(Gráfico log-log) "
  ) +
  theme_minimal() +
  theme(
    legend.direction = "horizontal",
    legend.position = "top",
    legend.text = element_text(size = 12),
    legend.title = element_text(size = 14),
    panel.grid.major = element_line(
      size = 1.0,
      linetype = 'solid',
      colour = "lightblue"
    ),
    panel.grid.minor = element_line(
      size = 0.5,
      linetype = 'solid',
      colour = "lightblue"
    ),
    axis.text.x = element_text(size = 12),
    axis.text.y = element_text(size = 12),
    axis.title.x = element_text(size = 14),
    axis.title.y = element_text(size = 14),
    plot.title = element_text(size = 20),
    plot.subtitle = element_text(size = 16),
    plot.caption = element_text(size = 12),
  ) +
  scale_x_log10(
    breaks = c(1e6, 1e7, 2e7),
    minor_breaks = seq(1e6, 9e6, 1e6),
    labels = scientific
  ) +
  scale_y_log10(
    breaks = c(25e3, 50e3, 100e3, 200e3, 400e3),
    minor_breaks = NULL,
    labels = scientific
  )

# Gravar a imagem do gráfico no disco
ggsave(
  "~/doctec/static/img/jhu/jhu_country_cases_deaths.png",
  plot,
  device = png(),
  width = 12.5,
  height = 6.25,
  dpi = 72
)

dev.off()