Resumo

Realizar uma análise Exploratória dos Dados da COVID-19 no mundo, através do pacote coronavirus criado por Rami Krispin. Os dados brutos são extraídos do Johns Hopkins University Center for Systems Science and Engineering (JHU CCSE) -> Coronavirus repository. Além de acrescentar um conjunto de dados da população mundial obtido pelo kaggle. Também é introduzido o conceito de médias móveis, para extrair estatísticas dos dados gerados pela pandemia. Ao final, uma breve análise com o pacote gtrendsR obtendo informações de palavras buscadas no google (no Brasil) relacionadas ao novo coronavírus, e ainda, explorar os dados de países que já sofrem de novos picos de contágio, após ter contido a “primeira onda” do vírus.

coronavirus dataset tem os seguintes campos:

date - A data do resumo;
province - A província ou estado, quando aplicável;
country - O nome do país ou região;
lat - Ponto de latitude;
long - Ponto de longitude;
type - o tipo de caso;
cases - o número de casos diários (correspondendo ao tipo de caso).

Pacotes usados

Vamos inicialmente atualizar o banco de dados, para que fique o mais atualizado possível. Nesse caso, pela descrição do pacote teremos a base atualizada diariamente (caso instalado via GitHub com o pacote devtools), assim que os dados são disponibilizados na base de dados brutos.

# if(!require("devtools")) install.packges("devtools")
# devtools::install_github("RamiKrispin/coronavirus")
coronavirus::update_dataset(silence = TRUE)
if(!require("pacman")) install.packges("pacman")

pacman::p_load(tidyverse,
               magrittr,
               ggthemes,
               kableExtra,
               zoo,
               gtrendsR,
               lubridate,
               gridExtra,
               corrplot,
               coronavirus)

\[ \star \]

Manipulando dados

Carregando os dados do pacote coronavirus.

data(coronavirus)

Carregando os dados .csv da população mundial por país em 2020 encontrada nesse link.

df <- read.csv("population_by_country_2020.csv")
colnames(df)
##  [1] "Country..or.dependency." "Population..2020."      
##  [3] "Yearly.Change"           "Net.Change"             
##  [5] "Density..P.Km²."        "Land.Area..Km²."       
##  [7] "Migrants..net."          "Fert..Rate"             
##  [9] "Med..Age"                "Urban.Pop.."            
## [11] "World.Share"

Vou usar apenas as colunas Country..or.dependency. e Population..2020..

df %<>% 
    select(Country..or.dependency., Population..2020.)

População mundial

Fazendo uma breve análise para deixar os países iguais ao dataset do pacote do coronavirus.

linhas <- data.frame(Country..or.dependency. = c("Diamond Princess",
                             "MS Zaandam",
                             "Kosovo",
                             "West Bank and Gaza",
                             "Saint Vincent and the Grenadines"),
                 Population..2020. = c(NA, NA, NA, NA, NA))

df <- rbind(df, linhas)
df <- tbl_df(df)
df %<>% rename(country = Country..or.dependency.)
df %<>% rename(population = Population..2020.)

aux <- df %>% filter(country %in% c("United States",
                                  "Taiwan",
                                  "Sao Tome & Principe",
                                  "Saint Kitts & Nevis",
                                  "South Korea",
                                  "Czech Republic (Czechia)",
                                  "Côte d'Ivoire",
                                  "DR Congo",
                                  "Congo",
                                  "Myanmar"))
aux <- data.frame(aux)
pop <- aux$population
linhas2 <- data.frame(country = c("US",
                                  "Taiwan*",
                                  "Sao Tome and Principe",
                                  "Saint Kitts and Nevis",
                                  "Korea, South",
                                  "Czechia",
                                  "Cote d'Ivoire",
                                  "Congo (Kinshasa)",
                                  "Congo (Brazzaville)",
                                  "Burma"),
                      population = pop)

df <- rbind(df, linhas2)

\[ \cdots \]

Agregando ao dataset coronavirus

Armazenando em um único conjunto de dados, todas as informações relevantes, como casos e mortes nas últimas 24 horas, dados acumulados, e estatísticas baseadas na população.

data_anterior = Sys.Date() - 1
last24_c <- coronavirus %>%
    filter(date == data_anterior & type == "confirmed") %>% 
    group_by(country) %>% 
    summarise(last24_cases = sum(cases))

last24_d <- coronavirus %>%
    filter(date == data_anterior & type == "death") %>% 
    group_by(country) %>% 
    summarise(last24_death = sum(cases))
summary_cases_df <- coronavirus %>%
    filter(type == "confirmed") %>%
    group_by(country) %>%
    summarise(total_cases = sum(cases)) %>%
    arrange(-total_cases)
summary_death_df <- coronavirus %>%
    filter(type == "death") %>%
    group_by(country) %>%
    summarise(death = sum(cases)) %>%
    arrange(-death)
summary_recovered_df <- coronavirus %>%
    filter(type == "recovered") %>%
    group_by(country) %>%
    summarise(recovered = sum(cases)) %>%
    arrange(-recovered)
summary_df <- summary_cases_df %>% left_join(summary_death_df)
summary_df <- summary_df %>% left_join(summary_recovered_df)
summary_df <- summary_df %>% mutate(active = ((total_cases - death) - recovered))
summary_df <- summary_df %>% mutate(death_rate = round((death * 100) / total_cases, digits=2))
summary_covid <- inner_join( summary_df,df, by = c("country"="country"))

summary_covid <- summary_covid %>% 
    mutate(tot_1m_pop = round((total_cases / population) * 10**6, digits=2))

summary_covid <- summary_covid %>% 
    mutate(death_1m_pop = round((death / population) * 10**6, digits=2))
summary_covid <- inner_join(summary_covid, last24_c, by = c("country"="country"))
summary_covid <- inner_join(summary_covid, last24_d, by = c("country"="country"))
summary_covid <- summary_covid %>% 
    select(country, total_cases, last24_cases, death, last24_death, death_rate, active, recovered, tot_1m_pop, death_1m_pop, population)

\[ \cdots \]

Panorama geral

Agora no novo conjunto de dados do coranavírus, os 15 países com maior número de casos registrados, ordenados do maior para o menor. Abaixo a situação global.

kable(head(summary_covid, 15),
      col.names = c("País",
                    "Casos",
                    "Casos(24hr)",
                    "Mortes",
                    "Mortes(24hr)",
                    "M(%)",
                    "Ativos",
                    "Recuperados",
                    "Tot/1M pop",
                    "Morte/1M pop",
                    "População")) %>% 
    kable_styling(full_width = FALSE,
                  bootstrap_options = c("striped","hover","condensed","responsive"))
País Casos Casos(24hr) Mortes Mortes(24hr) M(%) Ativos Recuperados Tot/1M pop Morte/1M pop População
US 13088821 205557 264858 1404 2.02 7876517 4947446 39502.56 799.35 331341050
India 9351109 41322 136200 485 1.46 454940 8759969 6764.67 98.53 1382345085
Brazil 6238350 34130 171974 514 2.76 484940 5581436 29312.53 808.07 212821986
France 2248209 12672 51999 958 2.31 2030717 165493 34429.49 796.32 65298930
Russia 2196691 27267 38175 487 1.74 460898 1697618 15051.44 261.57 145945524
Spain 1628208 10853 44668 294 2.74 1433164 150376 34822.03 955.30 46757980
United Kingdom 1593250 14821 57648 520 3.62 1532140 3462 23447.98 848.41 67948282
Italy 1538217 28342 53677 827 3.49 787893 696647 25447.77 888.02 60446035
Argentina 1407277 7846 38216 275 2.72 133804 1235257 31088.06 844.23 45267449
Colombia 1290510 10023 36214 195 2.81 64797 1189499 25315.91 710.41 50976248
Mexico 1078594 0 104242 0 9.66 170771 803581 8350.45 807.04 129166028
Germany 1038649 20819 16011 371 1.54 317425 705213 12389.80 190.99 83830972
Poland 958416 17304 16147 579 1.68 425633 516636 25328.62 426.73 37839255
Peru 956347 3908 35785 100 3.74 33543 887019 28936.18 1082.75 33050211
Iran 922397 14051 47095 406 5.11 235237 640065 10957.84 559.48 84176929

Casos no mundo:

Total de casos Total de mortes Mortes (%)
61645535 1442664 2.34

\[ \cdots \]

Visualização dos dados

cases_growth <- coronavirus %>% 
    group_by(type, date) %>%
    summarise(total_cases = sum(cases)) %>%
    pivot_wider(names_from = type, values_from = total_cases) %>%
    arrange(date) %>%
    mutate(active = confirmed - death - recovered) %>%
    mutate(active_total = cumsum(active),
            recovered_total = cumsum(recovered),
            death_total = cumsum(death),
           confirmed_total = cumsum(confirmed))

Distribuição dos casos no mundo

plot1 <- ggplot(cases_growth) +
    geom_area(aes(x = date,
                  y = (recovered_total + active_total + death_total) / 10^6,
                  fill = "Recuperados")) +
    geom_area(aes(x = date,
                  y = (death_total + active_total) / 10^6,
                  fill = "Mortes")) +
    geom_area(aes(x = date,
                  y = (active_total) / 10^6,
                  fill = "Ativos")) +

    labs(x = "Fonte: Johns Hopkins University Center for Systems Science and Engineering",
         y = "Número de casos (em milhões)",
         title = "Distribuição dos casos de COVID-19 no mundo") +
    theme_clean(base_size = 14,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 10,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 8),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9)) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_continuous(n.breaks = 6) +
    scale_fill_manual(values = c("Recuperados" = "#3CB371",
                                 "Mortes" = "#DC143C",
                                 "Ativos" = "#4169E1"))
plot1

\[ \cdots \]

Escala logarítmica

plot2 <- ggplot(cases_growth) +
    geom_line(aes(x = date,
                  y = death_total),
              color = "#DC143C",
              size = 1.3) +

    labs(x = "Fonte: Johns Hopkins University Center for Systems Science and Engineering",
         y = "Número de mortes (escala log)",
         title = "Distribuição das mortes de COVID-19 no mundo") +
    theme_clean(base_size = 14,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 10,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 8),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9)) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_log10(breaks = c(10**2,10**3,10**4,10**5,10**6),
                  labels = c("100","1.000","10.000","100.000","1M"))
plot2

plot3 <- ggplot(cases_growth) +
    geom_line(aes(x = date,
                  y = (recovered_total + active_total + death_total)),
              color = "#4169E1",
              size = 1.3) +

    labs(x = "Fonte: Johns Hopkins University Center for Systems Science and Engineering",
         y = "Número de casos (escala log)",
         title = "Distribuição dos casos de COVID-19 no mundo") +
    theme_clean(base_size = 14,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 10,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 8),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9)) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_log10(breaks = c(10**3,10**4,10**5,10**6,10**7,10**8),
                  labels = c("1.000","10.000","100.000","1M","10M","100M"))
plot3

\[ \cdots \]

Distribuição dos casos por continente

south_amer <- coronavirus %>% 
    filter(country %in% c("Brazil",
                          "Argentina",
                          "Colombia",
                          "Peru",
                          "Chile",
                          "Ecuador",
                          "Bolivia",
                          "Venezuela",
                          "Paraguay",
                          "Uruguay",
                          "Suriname",
                          "Guyana"))
europe <- coronavirus %>% 
    filter(country %in% c("France",
                          "Russia",
                          "Spain",
                          "United Kingdom",
                          "Italy",
                          "Germany",
                          "Poland",
                          "Ukraine",
                          "Belgium",
                          "Czechia",
                          "Netherlands",
                          "Romania",
                          "Switzerland",
                          "Portugal",
                          "Austria",
                          "Sweden",                          
                          "Hungary",
                          "Serbia",
                          "Belarus",
                          "Bulgaria",
                          "Croatia",
                          "Moldova",
                          "Slovakia",
                          "Greece",
                          "Bosnia and Herzegovina",
                          "Denmark",
                          "Ireland",
                          "Slovenia",
                          "North Macedonia",
                          "Lithuania",
                          "Albania",
                          "Norway",
                          "Montenegro",
                          "Finland",
                          "Latvia",
                          "Estonia",
                          "Malta",
                          "Andorra",
                          "Iceland",
                          "Luxembourg",
                          "San Marino",
                          "Liechtenstein",
                          "Monaco"))
cases_growth_SA <- south_amer %>% 
    group_by(type, date) %>%
    summarise(total_cases = sum(cases)) %>%
    pivot_wider(names_from = type, values_from = total_cases) %>%
    arrange(date) %>%
    mutate(active = confirmed - death - recovered) %>%
    mutate(active_total = cumsum(active),
            recovered_total = cumsum(recovered),
            death_total = cumsum(death),
           confirmed_total = cumsum(confirmed))
plot4 <- ggplot(cases_growth_SA) +
    geom_area(aes(x = date,
                  y = (recovered_total + active_total + death_total) / 10^6,
                  fill = "Recuperados")) +
    geom_area(aes(x = date,
                  y = (death_total + active_total) / 10^6,
                  fill = "Mortes")) +
    geom_area(aes(x = date,
                  y = (active_total) / 10^6,
                  fill = "Ativos")) +

    labs(x = "Fonte: Johns Hopkins University Center for Systems Science and Engineering",
         y = "Número de casos (em milhões)",
         title = "Distribuição dos casos de COVID-19",
         subtitle = "Dados da América do Sul") +
    theme_clean(base_size = 14,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 10,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 8),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9),
          plot.subtitle = element_text(size = 10.5, color = "#A9A9A9")) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_continuous(n.breaks = 6) +
    scale_fill_manual(values = c("Recuperados" = "#3CB371",
                                 "Mortes" = "#DC143C",
                                 "Ativos" = "#4169E1"))
plot4

north_amer <- coronavirus %>% 
    filter(country %in% c("US", "Canada", "Mexico"))

cases_growth_NA <- north_amer %>% 
    group_by(type, date) %>%
    summarise(total_cases = sum(cases)) %>%
    pivot_wider(names_from = type, values_from = total_cases) %>%
    arrange(date) %>%
    mutate(active = confirmed - death - recovered) %>%
    mutate(active_total = cumsum(active),
            recovered_total = cumsum(recovered),
            death_total = cumsum(death),
           confirmed_total = cumsum(confirmed))

plot5 <- ggplot(cases_growth_NA) +
    geom_area(aes(x = date,
                  y = (recovered_total + active_total + death_total) / 10^6,
                  fill = "Recuperados")) +
    geom_area(aes(x = date,
                  y = (death_total + active_total) / 10^6,
                  fill = "Mortes")) +
    geom_area(aes(x = date,
                  y = (active_total) / 10^6,
                  fill = "Ativos")) +

    labs(x = "Fonte: Johns Hopkins University Center for Systems Science and Engineering",
         y = "Número de casos (em milhões)",
         title = "Distribuição dos casos de COVID-19",
         subtitle = "Dados da América do Norte") +
    theme_clean(base_size = 14,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 10,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 8),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9),
          plot.subtitle = element_text(size = 10.5, color = "#A9A9A9")) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_continuous(n.breaks = 6) +
    scale_fill_manual(values = c("Recuperados" = "#3CB371",
                                 "Mortes" = "#DC143C",
                                 "Ativos" = "#4169E1"))
plot5

cases_growth_europe <- europe %>% 
    group_by(type, date) %>%
    summarise(total_cases = sum(cases)) %>%
    pivot_wider(names_from = type, values_from = total_cases) %>%
    arrange(date) %>%
    mutate(active = confirmed - death - recovered) %>%
    mutate(active_total = cumsum(active),
            recovered_total = cumsum(recovered),
            death_total = cumsum(death),
           confirmed_total = cumsum(confirmed))

plot6 <- ggplot(cases_growth_europe) +
    geom_area(aes(x = date,
                  y = (recovered_total + active_total + death_total) / 10^6,
                  fill = "Recuperados")) +
    geom_area(aes(x = date,
                  y = (death_total + active_total) / 10^6,
                  fill = "Mortes")) +
    geom_area(aes(x = date,
                  y = (active_total) / 10^6,
                  fill = "Ativos")) +

    labs(x = "Fonte: Johns Hopkins University Center for Systems Science and Engineering",
         y = "Número de casos (em milhões)",
         title = "Distribuição dos casos de COVID-19",
         subtitle = "Dados da Europa") +
    theme_clean(base_size = 14,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 10,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 8),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9),
          plot.subtitle = element_text(size = 10.5, color = "#A9A9A9")) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_continuous(n.breaks = 6) +
    scale_fill_manual(values = c("Recuperados" = "#3CB371",
                                 "Mortes" = "#DC143C",
                                 "Ativos" = "#4169E1"))
plot6

\[ \cdots \]

Médias móveis

Em Estatística, uma média móvel (MM) é um estimador calculado a partir de amostras sequenciais da população. Médias móveis são comumente usadas com séries temporais para suavizar flutuações curtas e destacar tendências de longo prazo.

# Crescimento na Europa
cases_growth_europe <- cases_growth_europe %>%
    mutate(MM7_death_eur = zoo::rollmean(death, k = 7, fill = NA))

cases_growth_europe <- cases_growth_europe %>%
    mutate(MM7_conf_eur = zoo::rollmean(confirmed, k = 7, fill = NA))

cases_growth_europe2 <- cases_growth_europe %>% 
    select(date, MM7_conf_eur, MM7_death_eur)

# Crescimento na America do Norte
cases_growth_NA <- cases_growth_NA %>%
    mutate(MM7_death_NA = zoo::rollmean(death, k = 7, fill = NA))

cases_growth_NA <- cases_growth_NA %>%
    mutate(MM7_conf_NA = zoo::rollmean(confirmed, k = 7, fill = NA))

cases_growth_NA2 <- cases_growth_NA %>% 
    select(date, MM7_conf_NA, MM7_death_NA)

# Crescimento na America do Sul
cases_growth_SA <- cases_growth_SA %>%
    mutate(MM7_death_SA = zoo::rollmean(death, k = 7, fill = NA))

cases_growth_SA <- cases_growth_SA %>%
    mutate(MM7_conf_SA = zoo::rollmean(confirmed, k = 7, fill = NA))

cases_growth_SA2 <- cases_growth_SA %>% 
    select(date, MM7_conf_SA, MM7_death_SA)

# Crescimento no Mundo
cases_growth <- cases_growth %>%
    mutate(MM7_death = zoo::rollmean(death, k = 7, fill = NA))

cases_growth <- cases_growth %>%
    mutate(MM7_conf = zoo::rollmean(confirmed, k = 7, fill = NA))

cases_growth_comp <- cases_growth %>% 
    select(date, MM7_conf, MM7_death)

# Agregando conjunto de dados
cases_growth_comp <- inner_join(cases_growth_comp,
                                cases_growth_europe2,
                                by = c("date"="date"))

cases_growth_comp <- inner_join(cases_growth_comp,
                                cases_growth_NA2,
                                by = c("date"="date"))

cases_growth_comp <- inner_join(cases_growth_comp,
                                cases_growth_SA2,
                                by = c("date"="date"))

cases_growth_comp <- cases_growth_comp %>% 
    mutate(per_tot = 1)

cases_growth_comp <- cases_growth_comp %>% 
    mutate(per_death_eur = MM7_death_eur / MM7_death)

cases_growth_comp <- cases_growth_comp %>% 
    mutate(per_death_NA = MM7_death_NA / MM7_death)

cases_growth_comp <- cases_growth_comp %>% 
    mutate(per_death_SA = MM7_death_SA / MM7_death)

cases_growth_comp <- cases_growth_comp %>% 
    mutate(per_confirmed_NA = MM7_conf_NA / MM7_conf)

cases_growth_comp <- cases_growth_comp %>% 
    mutate(per_confirmed_SA = MM7_conf_SA / MM7_conf)

cases_growth_comp <- cases_growth_comp %>% 
    mutate(per_confirmed_eur = MM7_conf_eur / MM7_conf)

cases_growth_comp <- na.omit(cases_growth_comp)

Percentual Europa

No primeiro pico de óbitos causados pela COVID-19 no mundo, a Europa chegou a uma marca negativa de 75% das mortes no mundo, serem de cidadãos do continente. Após um grande número de mortes, outros países tiveram uma crescente nos números da doença, como Brasil e EUA. Porém, desde Setembro podemos obervar uma nova tendência no continente europeu, chegando novamente a concentrar a maioria dos óbitos no mundo.

plot7 <- ggplot(cases_growth_comp) +
    geom_area(aes(x = date,
                  y = per_tot,
                  fill = "Outros países")) +
    geom_area(aes(x = date,
                  y = per_death_eur,
                  fill = "Europa")) +
    geom_hline(aes(yintercept = 0.5),
               color = "black",
               linetype = "dashed",
               size = 1) +

    labs(x = "Fonte: Johns Hopkins University Center for Systems Science and Engineering",
         y = "Porcentagem",
         title = "Percentual de Mortes de COVID-19 por dia",
         subtitle = "Média móvel de 7 dias") +
    theme_clean(base_size = 14,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 10,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 8),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9),
          plot.subtitle = element_text(size = 10.5, color = "#A9A9A9")) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_continuous(n.breaks = 5) +
    scale_fill_manual(values = c("Outros países" = "#D3D3D3",
                                 "Europa" = "#DC143C"))
plot7

\[ \cdots \]

Óbitos no mundo

Média móvel dos óbitos no mundo. Podemos notar que a visualização fica mais clara, pois as flutuações são suavizadas.

plot8 <- ggplot(cases_growth) +
    geom_bar(aes(x = date,
                  y = death),
             stat = "identity",
                  fill = "#E6E6FA") +
    geom_line(aes(x = date,
                  y = MM7_death),
                  color = "#DC143C",
              size = 1.15)+

    labs(x = "Fonte: Johns Hopkins University Center for Systems Science and Engineering",
         y = "Mortes/dia",
         title = "Mortes de COVID-19 por dia no mundo",
         subtitle = "Média móvel de 7 dias") +
    theme_clean(base_size = 14,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 10,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 8),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9),
          plot.subtitle = element_text(size = 10.5, color = "#A9A9A9")) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_continuous(n.breaks = 7)
plot8

\[ \cdots \]

Comparativo por continente

Comparativo de óbitos por médias móveis, na Europa, América do Sul e América do Norte.

plot9 <- ggplot(cases_growth_comp) +

    geom_line(aes(x = date,
                  y = MM7_death,
                  color = "Todos os países"),
              size = 1.2) +
    geom_line(aes(x = date,
                  y = MM7_death_eur,
                  color = "Europa"),
              size = 1.2) +
    geom_line(aes(x = date,
                  y = MM7_death_NA,
                  color = "Am. Norte"),
              size = 1.2) +
    geom_line(aes(x = date,
                  y = MM7_death_SA,
                  color = "Am. Sul"),
              size = 1.2) +
    
    labs(x = "Fonte: Johns Hopkins University Center for Systems Science and Engineering",
         y = "Mortes/dia",
         title = "Mortes de COVID-19 por dia",
         subtitle = "Média móvel de 7 dias") +
    theme_clean(base_size = 14,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 10,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 8),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9),
          plot.subtitle = element_text(size = 10.5, color = "#A9A9A9")) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_continuous(n.breaks = 5) +
    scale_color_manual(values = c("Todos os países" = "#D3D3D3",
                                         "Europa" = "#4169E1",
                                         "Am. Norte" = "#3CB371",
                                         "Am. Sul" = "#DC143C"))
plot9

\[ \cdots \]

Letalidade na Europa

A “segunda onda” de casos na Europa traz ao debate alguns questionamentos sobre a evolução da doença. Podemos analisar, por exemplo, a letalidade da doença no continente ao longo do tempo, comparando com os dados mundiais. Nota-se que as mortes estão crescendo mais lentamente na Europa, se comparado ao número de novos casos registrados. Daí, existem algumas especulações/suposições do porque desta diferença. No primeiro momento, a resposta parece estar associada a combinações de diversos fatores e não só a alguma justificativa isolada. Esses fatores podem ser, por exemplo: melhores protocolos de tratamento, maior conhecimento sobre a doença no meio científico e nos hospitais, maior estrutura para testagem em massa, diferença de idade dos infectados entre os picos dos surtos.

No primeiro gráfico vemos um “descolamento” após o primeiro pico de casos, em relação a número de casos e número de mortes. No segundo gráfico, vemos que a “onda” de casos na segunda vez, é muito maior do que a primeira, enquanto na situação de óbitos, não cresce na mesma velocidade.

plot10 <- ggplot(cases_growth_comp) +

    geom_line(aes(x = date,
                  y = MM7_conf_eur,
                  color = "Casos"),
              size = 1.2) +
    geom_line(aes(x = date,
                  y = MM7_death_eur,
                  color = "Mortes"),
              size = 1.2) +
    
    labs(x = "Fonte: Johns Hopkins University Center for Systems Science and Engineering",
         y = "População afetada/dia",
         title = "COVID-19 na Europa",
         subtitle = "Média móvel de 7 dias e escala logarítmica") +
    theme_clean(base_size = 14,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 10,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 8),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9),
          plot.subtitle = element_text(size = 10.5, color = "#A9A9A9")) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_log10(n.breaks = 6) +
    scale_color_manual(values = c("Casos" = "#4169E1",
                                  "Mortes" = "#DC143C"))
plot10

plot11 <- ggplot(cases_growth_comp) +

    geom_line(aes(x = date,
                  y = MM7_conf_eur),
                  color = "#4169E1",
              size = 0.9) +
    
    labs(x = "",
         y = "Número de casos/dia",
         title = "Casos de COVID-19",
         subtitle = "Média móvel de 7 dias") +
    theme_clean(base_size = 10,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 8,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 6),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9),
          plot.subtitle = element_text(size = 10.5, color = "#A9A9A9")) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_continuous(n.breaks = 6)

plot12 <- ggplot(cases_growth_comp) +

    geom_line(aes(x = date,
                  y = MM7_death_eur),
                  color = "#DC143C",
              size = 0.9) +
    
    labs(x = "Fonte: Johns Hopkins University Center for Systems Science and Engineering",
         y = "Número de mortes/dia",
         title = "Mortes de COVID-19",
         subtitle = "Média móvel de 7 dias") +
    theme_clean(base_size = 10,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 8,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 5.25),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9),
          plot.subtitle = element_text(size = 9.5, color = "#A9A9A9")) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_continuous(n.breaks = 6)

grid.arrange(plot11, plot12, ncol = 2, top = "Dados na Europa. (Gráficos não comparáveis pois cada um está em sua própia escala)")

Com o gráfico da taxa de letalidade (porcentagem dos óbitos) também podemos extrair essa informação, de que o número de óbitos não acompanha proporcionalmente o aumento dos casos confirmados.

# Gráfico da taxa de letalidade
cases_growth_europe2 <- cases_growth_europe2 %>%
    mutate(death_rate = round((MM7_death_eur * 100) / MM7_conf_eur, digits=2))

plot13 <- ggplot(cases_growth_europe2) +

    geom_line(aes(x = date,
                  y = death_rate),
                  color = "#DC143C",
              size = 1.0) +
    
    labs(x = "Fonte: Johns Hopkins University Center for Systems Science and Engineering",
         y = "Porcentagem",
         title = "Taxa de Letalidade COVID-19 na Europa",
         subtitle = "Média móvel de 7 dias") +
    theme_clean(base_size = 14,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 10,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 8),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9),
          plot.subtitle = element_text(size = 10.5, color = "#A9A9A9")) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_continuous(n.breaks = 10)
    
plot13

\[ \cdots \]

Explorando dados diários

Últimos dias

Evolução dos casos confirmados de COVID-19 nos últimos 15 dias.

cases_growth2 <- cases_growth %>% arrange(desc(date))
cases_growth2 <- cases_growth2 %>% mutate(date2 = format(date, "%d/%b/%Y"))
cases_growth2 <- cases_growth2 %>%
    select(date2, confirmed_total, confirmed, death_total, death)

#ultimos 15 dias
kable(head(cases_growth2, 15),
      col.names = c("Data",
                    "Total de confirmados",
                    "Confirmados no dia",
                    "Total de mortes",
                    "Mortes no dia")) %>% 
    kable_styling(full_width = FALSE,
                  bootstrap_options = c("striped","hover","condensed","responsive"))
Data Total de confirmados Confirmados no dia Total de mortes Mortes no dia
27/nov/2020 61645535 671885 1442664 10617
26/nov/2020 60973650 581197 1432047 10739
25/nov/2020 60392453 632945 1421308 12056
24/nov/2020 59759508 588416 1409252 12785
23/nov/2020 59171092 521723 1396467 8315
22/nov/2020 58649369 483799 1388152 7081
21/nov/2020 58165570 586304 1381071 8785
20/nov/2020 57579266 666146 1372286 11840
19/nov/2020 56913120 650567 1360446 10973
18/nov/2020 56262553 623670 1349473 11323
17/nov/2020 55638883 608102 1338150 11084
16/nov/2020 55030781 528449 1327066 7839
15/nov/2020 54502332 473006 1319227 6259
14/nov/2020 54029326 593975 1312968 8984
13/nov/2020 53435351 648785 1303984 9554

\[ \cdots \]

Dias com mais mortes

10 dias com mais mortes de COVID-19. Podemos perceber que há vários dias do mês de Novembro.

# 10 dias com mais mortes
death_days <- cases_growth2 %>% arrange(desc(death)) %>% select(date2, death)
kable(head(death_days, 10),
      col.names = c("Data",
                    "Mortes no dia")) %>% 
    kable_styling(full_width = FALSE,
                  bootstrap_options = c("striped","hover","condensed","responsive"))
Data Mortes no dia
24/nov/2020 12785
25/nov/2020 12056
20/nov/2020 11840
18/nov/2020 11323
17/nov/2020 11084
04/nov/2020 11017
19/nov/2020 10973
26/nov/2020 10739
27/nov/2020 10617
11/nov/2020 10440

\[ \cdots \]

Análise sobre o Japão e Irã

Agora, vamos analisar países que já enfrentam novos surtos de contágio do vírus. A escolha tem como objetivo analisar países que já tiveram uma “primeira onda” e já enfrentam um segundo ou terceiro pico de infecção. Além disso, também são países que são muito diferentes no ponto de vista cultural, religioso, distribuição demográfica, região geográfica e aspecto de renda da população. Nos noticiários na imprensa local e mundial vemos que o Japão e Irã seriam bons exemplos para essa análise.

summary_ir_jp <- summary_covid %>%  
    filter(country %in% c("Iran", "Japan"))
kable(head(summary_ir_jp, 2),
      col.names = c("País",
                    "Casos",
                    "Casos(24hr)",
                    "Mortes",
                    "Mortes(24hr)",
                    "M(%)",
                    "Ativos",
                    "Recuperados",
                    "Tot/1M pop",
                    "Morte/1M pop",
                    "População")) %>% 
    kable_styling(full_width = FALSE,
                  bootstrap_options = c("striped","hover","condensed","responsive"))
País Casos Casos(24hr) Mortes Mortes(24hr) M(%) Ativos Recuperados Tot/1M pop Morte/1M pop População
Iran 922397 14051 47095 406 5.11 235237 640065 10957.84 559.48 84176929
Japan 142778 2553 2028 32 1.42 23041 117709 1129.51 16.04 126407422
jp_c <- coronavirus %>% 
    filter(country %in% c("Japan"), type == "confirmed") %>% 
    mutate(MM7 = zoo::rollmean(cases, k = 7, fill = NA))

jp_d <- coronavirus %>%
    filter(country %in% c("Japan"), type == "death") %>% 
    mutate(MM7 = zoo::rollmean(cases, k = 7, fill = NA))

br_c <- coronavirus %>%
    filter(country %in% c("Brazil"), type == "confirmed") %>% 
    mutate(MM7 = zoo::rollmean(cases, k = 7, fill = NA))

br_d <- coronavirus %>%
    filter(country %in% c("Brazil"), type == "death") %>% 
    mutate(MM7 = zoo::rollmean(cases, k = 7, fill = NA))

us_c <- coronavirus %>% 
    filter(country %in% c("US"), type == "confirmed") %>% 
    mutate(MM7 = zoo::rollmean(cases, k = 7, fill = NA))

us_d <- coronavirus %>%
    filter(country %in% c("US"), type == "death") %>% 
    mutate(MM7 = zoo::rollmean(cases, k = 7, fill = NA))

iran_c <- coronavirus %>%
    filter(country %in% c("Iran"), type == "confirmed") %>% 
    mutate(MM7 = zoo::rollmean(cases, k = 7, fill = NA))

iran_d <- coronavirus %>%
    filter(country %in% c("Iran"), type == "death") %>% 
    mutate(MM7 = zoo::rollmean(cases, k = 7, fill = NA))

comparativo <- rbind(br_c, jp_c, us_c, iran_c)
comparativo <- comparativo %>% filter(MM7 > 1)

g1 <- ggplot(data = comparativo) +
    geom_line(mapping=aes(x = date, 
                          y = MM7,
                          color = country),
              size = 1) +
    
    labs(x = "Fonte: Johns Hopkins University Center for Systems Science and Engineering",
         y = "Casos confirmados/dia",
         title = "Casos de COVID-19 por dia",
         subtitle = "Média móvel de 7 dias e escala logarítmica") +
    theme_clean(base_size = 14,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 10,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 8),
          legend.title = element_blank(),
          legend.position = "right",
          legend.text = element_text(size=9),
          plot.subtitle = element_text(size = 10.5, color = "#A9A9A9")) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_log10(breaks = c(1, 10, 10**2,10**3, 10**4, 10**5, 10**6),
                  labels = c("1","10", "100","1.000","10.000","100.000","1M"),
                  limits = c(1, 10**6)) +
        scale_color_brewer(palette = "Dark2")

g1

plot_jp <- ggplot(jp_c) +

    geom_line(aes(x = date,
                  y = MM7),
                  color = "#483D8B",
              size = 0.9) +
    
    labs(x = "",
         y = "Número de casos/dia",
         title = "Casos de COVID-19",
         subtitle = "Média móvel de 7 dias") +
    theme_clean(base_size = 10,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 8,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 6),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9),
          plot.subtitle = element_text(size = 10.5, color = "#A9A9A9")) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_continuous(n.breaks = 6)

plot_jp2 <- ggplot(jp_d) +

    geom_line(aes(x = date,
                  y = MM7),
                  color = "#DDA0DD",
              size = 0.9) +
    
    labs(x = "Fonte: Johns Hopkins University Center for Systems Science and Engineering",
         y = "Número de mortes/dia",
         title = "Mortes de COVID-19",
         subtitle = "Média móvel de 7 dias") +
    theme_clean(base_size = 10,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 8,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 5.25),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9),
          plot.subtitle = element_text(size = 9.5, color = "#A9A9A9")) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_continuous(n.breaks = 6)

grid.arrange(plot_jp, plot_jp2, ncol = 2, top = "Dados no Japão. (Gráficos não comparáveis pois cada um está em sua própia escala)")

plot_iran <- ggplot(iran_c) +

    geom_line(aes(x = date,
                  y = MM7),
                  color = "#FF8C00",
              size = 0.9) +
    
    labs(x = "",
         y = "Número de casos/dia",
         title = "Casos de COVID-19",
         subtitle = "Média móvel de 7 dias") +
    theme_clean(base_size = 10,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 8,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 6),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9),
          plot.subtitle = element_text(size = 10.5, color = "#A9A9A9")) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_continuous(n.breaks = 6)

plot_iran2 <- ggplot(iran_d) +

    geom_line(aes(x = date,
                  y = MM7),
                  color = "#A52A2A",
              size = 0.9) +
    
    labs(x = "Fonte: Johns Hopkins University Center for Systems Science and Engineering",
         y = "Número de mortes/dia",
         title = "Mortes de COVID-19",
         subtitle = "Média móvel de 7 dias") +
    theme_clean(base_size = 10,
                base_family = "mono") +
    theme(axis.text.x = element_text(size = 8,
                                     angle = 45,
                                     colour = "black",
                                     vjust = 1,
                                     hjust = 1),
          axis.title.x = element_text(size = 5.25),
          legend.title = element_blank(),
          legend.position = "top",
          legend.text = element_text(size=9),
          plot.subtitle = element_text(size = 9.5, color = "#A9A9A9")) +
    scale_x_date(date_labels = "%b/%y", breaks = "1 month") +
    scale_y_continuous(n.breaks = 6)

grid.arrange(plot_iran, plot_iran2, ncol = 2, top = "Dados no Irã. (Gráficos não comparáveis pois cada um está em sua própia escala)") 

Nesse caso do Irã, diferentemente do que analisamos na Europa, os gráficos parecem ser muito mais correlacionados e portanto, a taxa de letalidade tendem a ser constantes. No caso da Europa vimos que na “primeira onda”, a taxa de letalidade foi muito maior do que vemos agora durante o novo pico. No caso do Japão também vemos que o número de mortes da “segunda onda” não acompanha o aumento do número de casos registrados. Apesar de ainda não ser suficiente para afirmar que o terceiro pico da doença no Japão não será tão letal (em termos proporcionais de casos X óbitos) quanto a “primeira onda”, os dados indicam para isso. Nesse caso, as mesma suposições ditas anteriormente na análise européia, também caberiam nessa situação japonesa.


  • Correlações e gráficos de dispersão

A partir dos gráficos anteriores, podemos tentar mensurar matematicamente a correlação dos casos com os óbitos em cada região, e tentar visualizar se há um crescimento linear com um gráfico de dispersão. No caso de não se aproximar de um crescimento linear, poderíamos averiguar mais a fundo como está sendo conduzido o combate a pandemia na região ou país. Até onde temos informação sobre o vírus, não há maior chance de óbito (biologicamente), para cada região do planeta, ou seja, a letalidade tende a estar relacionada como cada região vem combatendo o contágio, e se esforçando para testar o maior número de pessoas.

ir <- coronavirus %>% 
    filter(country %in% c("Iran"))

jp <- coronavirus %>% 
    filter(country %in% c("Japan"))

cases_growth_Ir <- ir %>% 
    group_by(type, date) %>%
    summarise(total_cases = sum(cases)) %>%
    pivot_wider(names_from = type, values_from = total_cases) %>%
    arrange(date) %>%
    mutate(active = confirmed - death - recovered) %>%
    mutate(active_total = cumsum(active),
            recovered_total = cumsum(recovered),
            death_total = cumsum(death),
           confirmed_total = cumsum(confirmed))

cases_growth_Jp <- jp %>% 
    group_by(type, date) %>%
    summarise(total_cases = sum(cases)) %>%
    pivot_wider(names_from = type, values_from = total_cases) %>%
    arrange(date) %>%
    mutate(active = confirmed - death - recovered) %>%
    mutate(active_total = cumsum(active),
            recovered_total = cumsum(recovered),
            death_total = cumsum(death),
           confirmed_total = cumsum(confirmed))
d1 <- ggplot(cases_growth, aes(x = confirmed_total,
                            y = death_total)) + 
        geom_point(color = "black", size = 0.1) +

        labs(x = "Casos",
             y = "Óbitos",
             title = "Mundo") +
        theme_clean(base_size = 10,
                    base_family = "mono") +
        theme(axis.text.x = element_blank(),
              axis.text.y = element_blank())

d2 <- ggplot(cases_growth_SA, aes(x = confirmed_total,
                            y = death_total)) + 
        geom_point(color = "#DC143C", size = 0.1) +

        labs(x = "Casos",
             y = "Óbitos",
             title = "América Sul") +
        theme_clean(base_size = 10,
                    base_family = "mono") +
        theme(axis.text.x = element_blank(),
              axis.text.y = element_blank())

d3 <- ggplot(cases_growth_NA, aes(x = confirmed_total,
                            y = death_total)) + 
        geom_point(color = "#3CB371", size = 0.1) +

        labs(x = "Casos",
             y = "Óbitos",
             title = "América do Norte") +
        theme_clean(base_size = 10,
                    base_family = "mono") +
        theme(axis.text.x = element_blank(),
              axis.text.y = element_blank())

d4 <- ggplot(cases_growth_europe, aes(x = confirmed_total,
                            y = death_total)) + 
        geom_point(color = "#4169E1", size = 0.1) +

        labs(x = "Casos",
             y = "Óbitos",
             title = "Europa") +
        theme_clean(base_size = 10,
                    base_family = "mono") +
        theme(axis.text.x = element_blank(),
              axis.text.y = element_blank())

d5 <- ggplot(cases_growth_Ir, aes(x = confirmed_total,
                            y = death_total)) + 
        geom_point(color = "#FF8C00", size = 0.1) +

        labs(x = "Casos",
             y = "Óbitos",
             title = "Irã") +
        theme_clean(base_size = 10,
                    base_family = "mono") +
        theme(axis.text.x = element_blank(),
              axis.text.y = element_blank())

d6 <- ggplot(cases_growth_Jp, aes(x = confirmed_total,
                            y = death_total)) + 
        geom_point(color = "#483D8B", size = 0.1) +

        labs(x = "Casos",
             y = "Óbitos",
             title = "Japão") +
        theme_clean(base_size = 10,
                    base_family = "mono") +
        theme(axis.text.x = element_blank(),
              axis.text.y = element_blank())

grid.arrange(d1, d2, d3, d4, d5, d6, ncol = 2, top = "Gráfico de dispersão entre Casos X Óbitos da COVID-19 (Fonte:JHU CCSE)") 

correl <- data.frame(Mundo.casos = cases_growth$confirmed_total,
                     Mundo.mortes = cases_growth$death_total,
                     AmSul.casos = cases_growth_SA$confirmed_total,
                     AmSul.mortes = cases_growth_SA$death_total,
                     AmNorte.casos = cases_growth_NA$confirmed_total,
                     AmNorte.mortes = cases_growth_NA$death_total,
                     Europa.casos = cases_growth_europe$confirmed_total,
                     Europa.mortes = cases_growth_europe$death_total,
                     Iran.casos = cases_growth_Ir$confirmed_total,
                     Iran.mortes = cases_growth_Ir$death_total,
                     Japao.casos = cases_growth_Jp$confirmed_total,
                     Japao.mortes = cases_growth_Jp$death_total)

col1 <- colorRampPalette(c("#FC4E07", "orange", "gray", "#00AFBB", "purple"))

corrplot(cor(correl), method = "color", type = "lower", tl.col = "black", tl.srt = 35, diag = F, addCoef.col = "white", number.digits = 2, tl.cex = 0.55, cl.cex = 0.55, number.cex = 0.75, addgrid.col = "darkgray", cl.pos = "b", col = col1(100))

\[ \star \]

Referências


\(\quad\)