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).
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 \]
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.)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 \]
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 \]
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))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 \]
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"))
plot2plot3 <- 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 \]
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"))
plot4north_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"))
plot5cases_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 \]
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)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 \]
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 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 \]
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"))
plot10plot11 <- 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 \]
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 \]
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 \]
Google Trends é uma ferramenta do Google que mostra os mais populares termos buscados em um passado recente. A ferramenta apresenta gráficos com a frequência em que um termo particular é procurado em várias regiões do mundo, e em vários idiomas. Os números representam o interesse de pesquisa relativo ao ponto mais alto no gráfico de uma determinada região em um dado período. Um valor de 100 representa o pico de popularidade de um termo. Um valor de 50 significa que o termo teve metade da popularidade. Uma pontuação de 0 significa que não havia dados suficientes sobre o termo. Nos exemplos a seguir, a pesquisa de 3 palavras relacionadas a pandemia de COVID-19, pesquisadas no Brasil.
teste <- gtrends(c("Segunda onda"),
geo = c("BR"),
time = "today 3-m")
time_trend <-teste$interest_over_time
g1 <-ggplot(data=time_trend,
aes(x=date, y=hits, group=keyword, col=keyword)) +
geom_line(size = .9, alpha = .75) +
ylab("Interesse relativo") +
labs(subtitle = "Interesse ao longo do tempo: Últimos 3 meses",
caption = "Fonte: Google Trends") +
theme_clean(base_size = 14, base_family = "mono") +
theme(legend.title = element_blank(),
legend.position = "bottom",
legend.text = element_text(size=9),
plot.subtitle = element_text(size = 10.5, color = "#A9A9A9"),
axis.title.x = element_blank()) +
ggtitle("Volume de Busca no Google") +
scale_color_brewer(palette = "Dark2")
g1\[ \cdots \]
teste <- gtrends(c("Teste covid"),
geo = c("BR"),
time = "2020-07-01 2020-11-20")
time_trend <-teste$interest_over_time
g1 <-ggplot(data=time_trend,
aes(x=date, y=hits, group=keyword, col=keyword)) +
geom_line(size = .9, alpha = .75) +
ylab("Interesse relativo") +
labs(subtitle = "Interesse ao longo do tempo: Jul/2020 até hoje",
caption = "Fonte: Google Trends") +
theme_clean(base_size = 14, base_family = "mono") +
theme(legend.title = element_blank(),
legend.position = "bottom",
legend.text = element_text(size=9),
plot.subtitle = element_text(size = 10.5, color = "#A9A9A9"),
axis.title.x = element_blank()) +
ggtitle("Volume de Busca no Google") +
scale_color_brewer(palette = "Dark2")
g1\[ \cdots \]
teste <- gtrends(c("PCR"),
geo = c("BR"),
time = "2020-02-01 2020-11-20")
time_trend <-teste$interest_over_time
g1 <-ggplot(data=time_trend,
aes(x=date, y=hits, group=keyword, col=keyword)) +
geom_line(size = .9, alpha = .75) +
ylab("Interesse relativo") +
labs(subtitle = "Interesse ao longo do tempo: Fev/2020 até hoje",
caption = "Fonte: Google Trends") +
theme_clean(base_size = 14, base_family = "mono") +
theme(legend.title = element_blank(),
legend.position = "bottom",
legend.text = element_text(size=9),
plot.subtitle = element_text(size = 10.5, color = "#A9A9A9"),
axis.title.x = element_blank()) +
ggtitle("Volume de Busca no Google") +
scale_color_brewer(palette = "Dark2")
g1\[ \cdots \]
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")
g1plot_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 \]
\(\quad\)