JHU - Casos e óbitos por Covid-19 na União Europeia

Alemanha, Áustria, Bulgária, Bélgica, Chipre, Croácia, Dinamarca, Eslováquia, Eslovênia, Espanha, Estônia, Finlândia, França, Grécia, Holanda, Hungria, Irlanda, Itália, Letônia, Lituânia, Luxemburgo, Malta, Polônia, Portugal, República Tcheca, Romênia e Suécia

Casos de Covid-19 na União Europeia
Casos de Covid-19 na União Europeia

O gráfico acima mostra a evolução dos novos casos confirmados (últimas 24 horas) para os vinte e sete países membros da União Europeia. Pode ser observado que, embora o número de casos tenha diminuído após o primeiro pico ocorrido em abril, ocorreu um novo pico, superior ao primeiro, em novembro.

Óbitos por Covid-19 na União Europeia
Óbitos por Covid-19 na União Europeia

O gráfico acima mostra a evolução dos novos óbitos (últimas 24 horas) para os vinte e sete países membros da União Europeia. Pode ser observado que, embora o número de óbitos tenha diminuído após o pico ocorrido em abril, voltou a subir a partir de outubro, a níveis até maiores do que o de abril, e está se mantendo elevado.

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 vinte e sete países membros da União Europeia vistos acima. Antes de ser executado as bibliotecas utilizadas precisam ser instaladas.

# source('jhu_ue_casos_obitos.R')
#
# Programa para gerar gráficos mostrando os casos e óbitos diários por COVID-19
# nos 27 países membros da União Europeia.
# 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.
# Referências:
# Member state of the European Union
# https://en.wikipedia.org/wiki/Member_state_of_the_European_Union
# COVID-19 situation update for the EU/EEA and the UK
# https://www.ecdc.europa.eu/en/cases-2019-ncov-eueea
# The 26 countries of the Schengen area
# https://www.axa-schengen.com/en/countries-schengen-area
# Countries in the EU and EEA
# https://www.gov.uk/eu-eea
#
# 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))

# Países da União Europeia
ue <- c(
    "Austria",
    "Belgium",
    "Bulgaria",
    "Croatia",
    "Cyprus",
    "Czechia",
    "Denmark",
    "Estonia",
    "Finland",
    "France",
    "Germany",
    "Greece",
    "Hungary",
    "Ireland",
    "Italy",
    "Latvia",
    "Lithuania",
    "Luxembourg",
    "Malta",
    "Netherlands",
    "Poland",
    "Portugal",
    "Romania",
    "Slovakia",
    "Slovenia",
    "Spain",
    "Sweden"
)

# Manter apenas os países da União Europeia
cases <-
    jhu_cases %>% filter(Country_Region %in% ue)
deaths <-
    jhu_deaths %>% filter(Country_Region %in% ue)

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

# Acumular os valor por dia
cases <-
    aggregate(
        x = cases$Total_Cases,
        by = list(Date = cases$Date),
        FUN = sum
    )
deaths <-
    aggregate(
        x = deaths$Total_Deaths,
        by = list(Date = deaths$Date),
        FUN = sum
    )

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

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

# Manter os dados de 1º de março em diante apenas
cases <- filter(cases, Date >= "2020-03-01")
deaths <- filter(deaths, Date >= "2020-03-01")

# Gerar o gráfico de casos novos
plot_cases <- ggplot(cases, aes(Date, New_Cases)) +
    labs(
        title = paste("Casos de Covid-19 na União Europeia entre 2020-03-01 e ",
                      dataDados),
        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
        ),
        x = "Data",
        y = "Casos novos (últimas 24 horas)"
    ) +
    geom_point(color = "#00468BFF") +
    geom_smooth(
        method = "gam",
        formula = y ~ s(x),
        se = FALSE,
        color = "#0099B4FF"
    ) +
    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 = 16),
        axis.title.y = element_text(size = 16),
        plot.title = element_text(size = 20),
        plot.subtitle = element_text(size = 16),
        plot.caption = element_text(size = 12),
    ) +
    scale_x_date(breaks = date_breaks("4 weeks"),
                 labels = date_format("%d/%b/\n%Y")) +
    scale_y_continuous(limits = c(0, 3e5))

# Gerar o gráfico de óbitos novos
plot_deaths <- ggplot(deaths, aes(Date, New_Deaths)) +
    labs(
        title = paste(
            "Óbitos por Covid-19 na União Europeia entre 2020-03-01 e ",
            dataDados
        ),
        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
        ),
        x = "Data",
        y = "Óbitos (últimas 24 horas)"
    ) +
    geom_point(color = "#AD002AFF") +
    geom_smooth(
        method = "gam",
        formula = y ~ s(x),
        se = FALSE,
        color = "#ED0000FF"
    ) +
    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 = 16),
        axis.title.y = element_text(size = 16),
        plot.title = element_text(size = 20),
        plot.subtitle = element_text(size = 16),
        plot.caption = element_text(size = 12),
    ) +
    scale_x_date(breaks = date_breaks("4 weeks"),
                 labels = date_format("%d/%b/\n%Y")) +
    scale_y_continuous(limits = c(0, 6e3))

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

dev.off()
dev.off()
Referências