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

Países com mais de 1 milhão de casos confirmados

Casos de Covid-19 acumulados por país
Casos de Covid-19 acumulados por país

O gráfico acima mostra os casos de Covid-19 acumulados por país, para os países com mais de 500.000 casos confirmados. A diferença entre os três países com mais casos acumulados (EUA, Índia e Brasil) para os demais países é significativa.

Óbitos por Covid-19 acumulados por país
Óbitos por Covid-19 acumulados por país

O gráfico acima mostra os óbitos por Covid-19 acumulados por país, para os países com mais de 500.000 casos confirmados.

Letalidade da Covid-19 por país
Letalidade da Covid-19 por país

O gráfico acima mostra a taxa de letalidade (óbitos/casos) da Covid-19 por país, para os países com mais de 500.000 casos confirmados.

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 acumulados por país. Antes de ser executado as bibliotecas utilizadas precisam ser instaladas.

#
# source('jhu_top_countries_bar_plot.R')
#
# Programa para gerar três gráficos de barras, o primeiro contendo o
# número de casos acumulados, o segundo o número de óbitos acumulados,
# e o terceiro a taxa de letalidade para os países com mais de 1 milhão
# de 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(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 1 milhão de casos confirmados
cases <- filter(cases, cases$Total_Cases > 1e6)

# Manter nos óbitos os mesmos países dos casos
deaths <- deaths %>% semi_join(cases, by = "Country")

# Transformar caracter em fator
cases <- mutate_if(cases, is.character, as.factor)
deaths <- mutate_if(deaths, is.character, as.factor)

# Letalidade
lethality <- deaths %>% inner_join(cases, by = "Country")
lethality <-
    lethality %>%  mutate(Lethality = Total_Deaths / Total_Cases)

# Gráfico de casos acumulados
plot_cases <- ggplot(cases, aes(x = Country, y = Total_Cases)) +
    labs(
        title = paste("Casos de Covid-19 acumulados até ", dataDados, " por país"),
        caption = paste(
            "Dados baixados do HDX",
            "(https://data.humdata.org/dataset/novel-coronavirus-2019-ncov-cases) em",
            dataDados
        ),
        x = "Países com mais de 1 milhão de casos confirmados de COVID-19",
        y = "Casos"
    ) +
    geom_bar(stat = "identity",
             fill = "#5F559BFF") +
    geom_text(
        aes(label = prettyNum(
            Total_Cases, big.mark = ".", decimal.mark = ","
        )),
        hjust = 0,
        vjust = 0.5,
        color = "black",
        position = position_stack(vjust = 1),
        size = 3.0,
        angle = 0
    ) +
    coord_flip() +
    guides(fill = guide_legend(title = NULL)) +
    theme_minimal() +
    theme(
        legend.position = "none",
        legend.text = element_text(size = 12),
        legend.title = element_text(size = 14),
        panel.grid.major = element_line(
            size = 0.4,
            linetype = 'solid',
            colour = "LightBlue"
        ),
        panel.grid.minor = element_line(
            size = 0.1,
            linetype = 'solid',
            colour = "LightBlue"
        ),
        axis.text.x = element_text(size = 10),
        axis.text.y = element_text(size = 10),
        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)
    ) +
    xlim(rev(levels(cases$Country))) +
    scale_y_continuous(labels = scientific,
                       limits = c(0, 4e7))

# Gráfico de óbitos acumulados
plot_deaths <- ggplot(deaths, aes(x = Country, y = Total_Deaths)) +
    labs(
        title = paste("Óbitos por Covid-19 acumulados até ", dataDados, " por país"),
        caption = paste(
            "Dados baixados do HDX",
            "(https://data.humdata.org/dataset/novel-coronavirus-2019-ncov-cases) em",
            dataDados
        ),
        x = "Países com mais de 1 milhão de casos confirmados de COVID-19",
        y = "Casos"
    ) +
    geom_bar(stat = "identity",
             fill = "#A20056FF") +
    geom_text(
        aes(label = prettyNum(
            Total_Deaths, big.mark = ".", decimal.mark = ","
        )),
        hjust = 0,
        vjust = 0.5,
        color = "black",
        position = position_stack(vjust = 1),
        size = 3.0,
        angle = 0
    ) +
    coord_flip() +
    guides(fill = guide_legend(title = NULL)) +
    theme_minimal() +
    theme(
        legend.position = "none",
        legend.text = element_text(size = 12),
        legend.title = element_text(size = 14),
        panel.grid.major = element_line(
            size = 0.4,
            linetype = 'solid',
            colour = "Pink"
        ),
        panel.grid.minor = element_line(
            size = 0.1,
            linetype = 'solid',
            colour = "Pink"
        ),
        axis.text.x = element_text(size = 10),
        axis.text.y = element_text(size = 10),
        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)
    ) +
    xlim(rev(levels(deaths$Country))) +
    scale_y_continuous(labels = scientific,
                       limits = c(0, 7e5))

# Gráfico de letalidade
plot_lethality <-
    ggplot(lethality, aes(x = Country, y = Lethality)) +
    labs(
        title = paste("Taxa de letalidade da Covid-19 até ", dataDados, " por país em %"),
        caption = paste(
            "Dados baixados do HDX",
            "(https://data.humdata.org/dataset/novel-coronavirus-2019-ncov-cases) em",
            dataDados
        ),
        x = "Países com mais de 1 milhão de casos confirmados de COVID-19",
        y = "Casos"
    ) +
    geom_bar(stat = "identity",
             fill = "#008280FF") +
    geom_text(
        aes(label = sprintf("%.2f%%", 100 * Lethality)),
        hjust = 0,
        vjust = 0.5,
        color = "black",
        position = position_stack(vjust = 1),
        size = 3.0,
        angle = 0
    ) +
    coord_flip() +
    guides(fill = guide_legend(title = NULL)) +
    theme_minimal() +
    theme(
        legend.position = "none",
        legend.text = element_text(size = 12),
        legend.title = element_text(size = 14),
        panel.grid.major = element_line(
            size = 0.4,
            linetype = 'solid',
            colour = "PaleGreen"
        ),
        panel.grid.minor = element_line(
            size = 0.1,
            linetype = 'solid',
            colour = "PaleGreen"
        ),
        axis.text.x = element_text(size = 10),
        axis.text.y = element_text(size = 10),
        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)
    ) +
    xlim(rev(levels(lethality$Country))) +
    scale_y_continuous(labels = percent, limits = c(0, 0.10))

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