JHU - COVID-19 no mundo - Novos casos e óbitos

Evolução nos quatro países com o maior número de casos acumulados

COVID-19: Evolução dos novos casos nos quatro países com o maior número de casos acumulados
COVID-19: Evolução dos novos casos nos quatro países com o maior número de casos acumulados

O gráfico acima mostra a evolução dos novos casos confirmados (últimas 24 horas) para os quatro países com o maior número de casos acumulados.

COVID-19: Evolução dos novos óbitos nos quatro países com o maior número de casos acumulados
COVID-19: Evolução dos novos óbitos nos quatro países com o maior número de casos acumulados

O gráfico acima mostra a evolução dos novos óbitos (últimas 24 horas) para os quatro países com o maior número de casos acumulados.

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, escrito em R, que gera os gráficos mostrando os casos e óbitos novos (últimas 24 horas) para os quatro países com o maior número de casos acumulados de COVID-19 vistos acima. Antes de ser executado as bibliotecas utilizadas precisam ser instaladas.

#
# source('jhu_top_novos_casos_obitos.R')
#
# Programa para gerar dois gráficos mostrando os casos e óbitos novos
# (últimas 24 horas) para os quatro países com o maior número de casos
# acumulados de COVID-19.
# As imagens dos gráficos são gravadas em disco no formato png.
# 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 quatro países com mais casos
cases <-
  jhu_cases %>% filter(Country_Region %in% c("US", "India", "Brazil", "Russia"))
deaths <-
  jhu_deaths %>% filter(Country_Region %in% c("US", "India", "Brazil", "Russia"))

# Manter apenas as datas de 15 de março de 2020 em diante
cases <- cases %>% filter(Date >= "2020-03-15")
deaths <- deaths %>% filter(Date >= "2020-03-15")

# Ficar apenas com as colunas a serem usadas
cases <- select(cases, Country_Region, Date, Total_Cases)
deaths <- select(deaths, Country_Region, Date, Total_Deaths)

# Acumular os valor por dia para cada país
cases <-
  aggregate(
    x = cases$Total_Cases,
    by = list(Country = cases$Country_Region, Date = cases$Date),
    FUN = sum
  )
deaths <-
  aggregate(
    x = deaths$Total_Deaths,
    by = list(Country = deaths$Country_Region, Date = deaths$Date),
    FUN = sum
  )

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

# Ordenar pelo país e pela data
cases <- arrange(cases, Country, Date)
deaths <- arrange(deaths, Country, Date)

# Calcular os casos e óbitos diários
cases <-
  cases %>% group_by(Country) %>% mutate(New_Cases = Total_Cases - lag(Total_Cases))
deaths <-
  deaths %>% group_by(Country) %>% mutate(New_Deaths = Total_Deaths - lag(Total_Deaths))

# Gerar o gráfico de casos novos
plot_cases <- ggplot(cases, aes(Date, New_Cases, col = Country)) +
  labs(
    title    = "COVID-19 no mundo: Evolução dos novos casos confirmados",
    subtitle = "Quatro países com o maior número de casos acumulados",
    x        = "Data",
    y        = "Casos novos (últimas 24 horas)",
    colour   = "País",
    caption = paste(
      "Dados baixados do HDX",
      "(https://data.humdata.org/dataset/novel-coronavirus-2019-ncov-cases) em",
      dataDados
    )
  ) +
  geom_smooth(method = "gam",
              formula = y ~ s(x, bs = "cs"),
              se = F) +
  geom_point() +
  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 = 0.8,
      linetype = 'solid',
      colour = "lightblue"
    ),
    panel.grid.minor = element_line(
      size = 0.4,
      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),
    plot.margin = unit(c(6, 18, 6, 6), "pt") #top, right, bottom, left
  ) +
  guides(color = guide_legend(override.aes = list(fill = NA))) +
  scale_y_continuous(limits = c(0, 5e5)) +
  scale_x_date(breaks = date_breaks("4 weeks"),
               labels = date_format("%d/%b/\n%Y"))

# Gerar o gráfico de óbitos novos
plot_deaths <-
  ggplot(deaths, aes(Date, New_Deaths, col = Country)) +
  labs(
    title   = "COVID-19 no mundo: Evolução dos novos óbitos confirmados",
    subtitle = "Quatro países com o maior número de casos acumulados",
    x       = "Data",
    y       = "Óbitos novos (últimas 24 horas)",
    colour  = "País",
    caption = paste(
      "Dados baixados do HDX",
      "(https://data.humdata.org/dataset/novel-coronavirus-2019-ncov-cases) em",
      dataDados
    )
  ) +
  geom_smooth(method = "gam",
              formula = y ~ s(x, bs = "cs"),
              se = F) +
  geom_point() +
  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 = 0.8,
      linetype = 'solid',
      colour = "pink"
    ),
    panel.grid.minor = element_line(
      size = 0.4,
      linetype = 'solid',
      colour = "pink"
    ),
    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),
    plot.margin = unit(c(6, 18, 6, 6), "pt") #top, right, bottom, left
  ) +
  guides(color = guide_legend(override.aes = list(fill = NA))) +
  scale_y_continuous(limits = c(0, 5e3)) +
  scale_x_date(breaks = date_breaks("4 weeks"),
               labels = date_format("%d/%b/\n%Y"))

# Gravar as imagens dos gráficos no disco
ggsave(
  "~/doctec/static/img/jhu/jhu_top_novos_casos.png",
  plot_cases,
  device = png(),
  width = 12.5,
  height = 6.25,
  dpi = 72
)
ggsave(
  "~/doctec/static/img/jhu/jhu_top_novos_obitos.png",
  plot_deaths,
  device = png(),
  width = 12.5,
  height = 6.25,
  dpi = 72
)

dev.off()
dev.off()