Distribuição do número total de casos confirmados entre número de mortes, recuperados e não recuperados.

  1. Para facilitar a visualização das unidades nos eixos foi utilizada a função addUnits fornecida em addUnits

  2. A partir da base completa coronavirus, uma nova base nomeada corona.pais foi gerada pela soma do número de casos por país e por tipo.

coronavirus = coronavirus %>% filter(date <= '2020-11-15')
corona.pais = coronavirus %>%
  group_by(country, type) %>% 
  summarise(total = sum(cases)) %>% 
  arrange(desc(total))
  1. Na base corona.pais, os registros com tipo confirmed foram substituídos pelo tipo not_recovered com o número de não recuperados (not_recovered = confirmed - (recovered + death)). Desta forma, o número de confirmados pode ser recuperado pela soma dos três tipos de casos.
for(i in unique(corona.pais$country)){
  idx = which(corona.pais$country == i & corona.pais$type == 'confirmed')
  corona.pais$total[idx] = corona.pais$total[idx] - (corona.pais$total[which(corona.pais$country == i & corona.pais$type == 'recovered')] + corona.pais$total[which(corona.pais$country == i & corona.pais$type == 'death')])
}

corona.pais$type[corona.pais$type == 'confirmed'] = 'not_recovered'
  1. Para a visualização seguinte, foram selecionados os 20 países com maior soma de casos confirmados. Esta lista de países foi gerada pela função abaixo:
top.paises.contaminados = coronavirus %>% 
  filter(type == 'confirmed') %>% 
  group_by(country) %>% 
  summarise(total_casos = sum(cases)) %>% 
  arrange(desc(total_casos))
corona.pais %>%
  filter(country %in% head(top.paises.contaminados$country, 20)) %>% 
ggplot(aes(x = country, y = total, fill = type)) +
  geom_bar(stat = "identity", position = "stack") +
  scale_y_continuous(labels = addUnits) +
  labs(title = 'Distribuição entre número de mortes, casos recuperados e não recuperados dos 20 países com mais casos confirmados', x = NULL, y = 'Casos confirmados', fill = 'Tipo de casos') +
  scale_fill_manual(values = c('brown', 'Tomato', 'Turquoise'), labels = c('Mortes', 'Não recuperados', 'Recuperados')) +
  theme_minimal() +
  theme(title = element_text(size = 15),
        axis.text.x = element_text(angle=30, size = 12), 
        axis.text.y = element_text(size = 12))

Países/províncias e seus números de casos por categoria

dc.prov = coronavirus %>%
  group_by(country, province, type, lat, long) %>% 
  summarise(total = sum(cases))
#Nome das labels em cada plot do facet_wrap
type.labels = c('Confirmados', 'Recuperados')
names(type.labels) = c('confirmed', 'recovered')

confirmados.recuperados = ggplot(dc.prov %>% filter(type != 'death'), aes(x = long, y = lat)) +
  geom_point(aes(size = total), color = 'SaddleBrown') +
  facet_wrap(type ~., scale = 'free', nrow = 2, labeller = labeller(type = type.labels)) +
  geom_label(data = dc.prov %>% filter(type != 'death', total > 10^6), aes(x=long, y=lat, label=country), label.padding = unit(0.15, "lines"), size = 5, vjust = "outward", hjust = "outward", check_overlap = TRUE) +
  geom_label(data = dc.prov %>% filter(type != 'death', province != '', total > 5 * 10^4), aes(x=long, y=lat, label=province), check_overlap = TRUE, label.padding = unit(0.15, "lines"), size = 5, vjust = "outward", hjust = "outward") +
  labs(title = 'Casos confirmados e recuperados por país e/ou província', subtitle = 'Países e províncias identificados possuem respectivamente mais de 1 milhão (M) e 50 mil (K) casos confirmados/recuperados', x = 'Longitude', y = 'Latitude', 
       size = 'Casos confirmados/recuperados') +
  theme_minimal() +
  theme(title = element_text(size = 15),
        strip.text.x = element_text(size=12, face="bold"),
        legend.text = element_text(size = 15),
        legend.position = 'bottom')


mortes = ggplot(dc.prov, aes(x = long, y = lat)) +
  geom_point(aes(size = total), color = 'SaddleBrown') +
  geom_label(data = dc.prov %>% filter(type == 'death') %>% group_by(country) %>%  summarise(total = sum(total), lat = max(lat), long = max(long)) %>%  filter(total > 5 * 10^4), aes(x=long, y=lat, label=country), label.padding = unit(0.15, "lines"), size = 5, vjust = "outward", hjust = "outward") +
  geom_label(data = dc.prov %>% filter(type == 'death', province != '', total > 5 * 10^3), aes(x=long, y=lat, label=province), label.padding = unit(0.15, "lines"), size = 5, vjust = "outward", hjust = "outward") +
  labs(title = 'Casos de mortes por país e/ou província', subtitle = 'Países e províncias identificados possuem respectivamente mais de 50 mil (K) e 5 mil (K) casos de mortes', x = 'Longitude', y = 'Latitude', size = 'Casos de mortes') +
  theme_minimal() +
  theme(title = element_text(size = 15), legend.text = element_text(size = 15),
        legend.position = 'bottom')

confirmados.recuperados

mortes

Casos confirmados nos países por mês

dc.mes = coronavirus %>% 
  filter(type == 'confirmed') %>% 
  group_by(country, lat, long, mes = month(date, label = TRUE, abbr = FALSE)) %>% 
  summarise(total_casos = sum(cases))
ggplot(dc.mes, aes(x = long, y = lat, label = country)) +
  geom_point(aes(size = total_casos), color = 'SaddleBrown') +
  facet_wrap(mes ~., scale = 'free', nrow = 6, ncol = 2) +
  geom_label(data = dc.mes %>%  filter(total_casos > 2 * 10^5), check_overlap = TRUE, size = 4, vjust = "outward", hjust = "outward", label.padding = unit(0.15, "lines"), fontface = "bold") +
  labs(title = 'Casos confirmados por mês', subtitle = paste0('Países identificados possuem mais de 200 mil casos confirmados por mês. *Dados até ', max(coronavirus$date)), x = 'Longitude', y = 'Latitude', size = 'Casos confirmados') +
  theme_minimal() +
  theme(title = element_text(size = 15),
        strip.text.x = element_text(size = 12, face = "bold"),
        legend.text = element_text(size = 15),
        legend.position = 'bottom')

Casos confirmados por mês na China e nos 10 países com maior número de casos

dc.mes %>%
    filter(country %in% append('China', head(top.paises.contaminados$country, 10))) %>% 
ggplot(aes(x = mes, y = total_casos)) +
  geom_bar(stat = "identity", fill = 'SaddleBrown') +
  scale_y_continuous(labels = addUnits) +
  facet_wrap(country ~., scale = 'free', nrow = 6, ncol = 2) +
  labs(title = 'Casos confirmados por mês', subtitle = paste0('Países com mais casos confirmados acumulados. *Dados até ', max(coronavirus$date)), x = NULL, y = 'Casos confirmados') +
  theme_minimal() +
  theme(title = element_text(size = 15), 
        axis.text.x = element_text(angle=30, size = 12), 
        axis.text.y = element_text(size = 12), 
        strip.text.x = element_text(size=12, face="bold"))

Casos confirmados por dia da semana

dc.semana = coronavirus %>% 
  filter(type == 'confirmed') %>% 
  group_by(country, semana = wday(date, label = TRUE, abbr = FALSE)) %>% 
  summarise(total_casos = sum(cases))

Global

dc.semana %>%  group_by(semana) %>% summarise(total_casos = sum(total_casos)) %>% 
  ggplot(aes(x = total_casos, y = semana)) +
  geom_bar(stat = "identity", fill = 'SaddleBrown', width = 0.7) +
  scale_x_continuous(labels = addUnits) +
  labs(title = 'Casos confirmados por dia da semana no mundo', x = 'Casos confirmados', y = 'Dia da semana') +
  theme_minimal() +
  theme(title =  element_text(size = 15),
        axis.text.x = element_text(size = 12),
        axis.text.y = element_text(size = 12))

  • Ao visualizar o número de casos confirmados por dia da semana globalmente, não há uma discrepância entre os dias da semana, sendo domingo e segunda os dias com menores resgistros acumulados, e sexta e quinta-feira com os maiores.

Na China e nos 10 países com maior número de casos confirmados

dc.semana %>%
    filter(country %in% append('China', head(top.paises.contaminados$country, 10))) %>% 
ggplot(aes(x = total_casos, y = semana)) +
  geom_bar(stat = "identity", fill = 'SaddleBrown', width = 0.7) +
  facet_wrap(country ~., nrow = 6, ncol = 2) +
  scale_x_continuous(labels = addUnits) +
  labs(title = 'Casos confirmados por dia da semana', x = 'Casos confirmados', y = 'Dia da semana') +
  theme_minimal() +
  theme(title = element_text(size = 15),
        axis.text.x = element_text(size = 12), 
        axis.text.y = element_text(size = 12),
        strip.text.x = element_text(size = 12, face="bold"))

  • França e Espanha registraram isoladamente na segunda-feira quase o dobro do número de casos dos demais dias da semana;
  • No caso do Brasil, foram registrados no domingo e segunda-feira menos que o dobro dos demais dias da semana;
  • Argentina, China, Colômbia, Itália, Rússia e Reino Unido registramram valores próximos de casos confirmados durante os dias da semana, ou seja, as notificações e registros de casos é bem distribuído entre todos os dia da semana.