JHU - COVID-19 na América do Sul - Casos Novos x Acumulados

Argentina, Brasil, Chile, Colômbia, Equador, Peru e Uruguai

COVID-19: Casos Novos X Casos Acumulados na América do Sul
COVID-19: Casos Novos X Casos Acumulados na América do Sul

O gráfico acima relaciona o número de casos confirmados de COVID-19 acumulados com a média móvel de 7 dias dos novos casos (últimas 24 horas), para alguns países selecionados da América do Sul. Apresentar os dados dessa maneira permite ver quando o país dobrou a curva, por causa da inflexão que se forma quando os casos novos começam a baixar.

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 o gráfico, mas antes de ser executado as bibliotecas utilizadas precisam ser instaladas. Os eixos dos gráficos estão em escala logarítimica na base 10.

#
# source('jhu_casos_acum_casos_novos.R')
#
# Programa para gerar um gráfico relacionando o número de casos confirmados de
# COVID-19 acumulados com a média móvel de 7 dias dos novos casos (últimas 24
# horas) para alguns países escolhidos da América do Sul.
#
# 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()
    )
)

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

# Manter apenas os países da Amérca do Sul escolhidos
cases <-
    jhu_cases %>% filter(
        Country_Region %in% c(
            "Argentina",
            "Brazil",
            "Chile",
            "Colombia",
            "Ecuador",
            "Peru",
            "Uruguay"
        )
    )

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

# 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
    )

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

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

# Calcular os casos diários
cases <-
    cases %>% group_by(Country) %>% mutate(New_Cases = Total_Cases - lag(Total_Cases))

# Calcular a média móvel diária
cases <-
    cases %>% group_by(Country) %>% mutate(Mov_Avg = movavg(New_Cases, 6, type = "s"))

# Ficar apenas com os dias onde a média móvel foi maior ou igual a 1
cases <- filter(cases, Mov_Avg >= 1)

# Criar o gráfico
plot <-
    ggplot(cases, aes(x = Total_Cases, y = Mov_Avg, color = Country)) +
    labs(
        title = "COVID-19: Casos Novos X Casos Acumulados na América do Sul",
        subtitle = paste(
            "Fonte: Johns Hopkins University Center for",
            "Systems Science and Engineering (JHU CCSE)"
        ),
        caption = paste(
            "Dados baixados do HDX",
            "(https://data.humdata.org/dataset/novel-coronavirus-2019-ncov-cases) em",
            dataDados
        ),
        colour  = NULL
    ) +
    geom_point(size = 1) +
    annotate(
        geom = "text",
        x = 1e6,
        y = 0.8e1,
        color = "gray",
        hjust = "left",
        vjust = "top",
        size = 4.1,
        label = "(Log-log scale plot)"
    ) +
    theme_minimal() +
    theme(
        legend.title = element_text(size = 14),
        legend.text = element_text(size = 12),
        legend.direction = "horizontal",
        legend.position = "top",
        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.5,
            angle = 60,
            hjust = 1
        ),
        axis.text.y = element_text(size = 11),
        axis.title.x = element_text(size = 16),
        axis.title.y = element_text(size = 16),
        plot.title = element_text(size = 20),
        plot.subtitle =  element_text(size = 17),
        plot.margin = unit(c(6, 12, 6, 6), "pt") #top, right, bottom, left
    ) +
    guides(color = guide_legend(title = "País")) +
    scale_x_log10(name = "Casos Acumulados") +
    scale_y_log10(name = "Casos Novos (média móvel de 7 dias)") +
    scale_color_npg()

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

dev.off()

Veja também