library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5 ✓ purrr 0.3.4
## ✓ tibble 3.1.4 ✓ dplyr 1.0.7
## ✓ tidyr 1.1.3 ✓ stringr 1.4.0
## ✓ readr 2.0.1 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(arrow)
## See arrow_info() for available features
##
## Attaching package: 'arrow'
## The following object is masked from 'package:utils':
##
## timestamp
library(DT)
library(ggbeeswarm)
library(scales)
##
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
##
## discard
## The following object is masked from 'package:readr':
##
## col_factor
library(ggrepel)
library(stringr)
library(lubridate)
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
library(forcats)
library(scales)
# load("../appcorona_etl/dados/db_sivep_2020_gripe.RData")
# load("../appcorona_etl/dados/db_sivep_2021_gripe.RData")
# sivep <- bind_rows(sivep_gripe_2020_db, sivep_gripe_2021_db)
# rm(sivep_gripe_2020_db, sivep_gripe_2021_db)
# write_parquet(x = sivep, sink = "sivep.parquet")
sivep <- read_parquet(file = "sivep.parquet")
res <- sivep %>%
# Notificação à partir de fevereiro
filter(DT_NOTIFIC >= as.Date("2021-04-01")) %>%
# Apenas diagnóstico COVID-19 %>%
filter(CLASSI_FIN == "SRAG COVID-19") %>%
# Altera as categorias de internação
mutate(HOSPITAL = recode(HOSPITAL,
"Sim" = "Hospitalizado",
"Não" = "Não hospitalizado")) %>%
# Altera as categorias de vacinação
mutate(VACINA_COV = recode(VACINA_COV,
"1" = "Vacinado",
"2" = "Não vacinado",
"9" = "Ignorado")) %>%
# Altera os missing de vacina para a mesma categoria de ignorado
mutate(VACINA_COV = replace_na(VACINA_COV, "Ignorado")) %>%
# Agrupa os registros
group_by(SG_UF_NOT, HOSPITAL, VACINA_COV) %>%
# Calcula totais
summarise(freq = n())
## `summarise()` has grouped output by 'SG_UF_NOT', 'HOSPITAL'. You can override using the `.groups` argument.
ggplot(data = res, aes(y = SG_UF_NOT, x = freq, fill = VACINA_COV)) +
geom_bar(position = "fill", stat = "identity") +
scale_x_continuous(labels = percent) +
facet_wrap(~ HOSPITAL) +
labs(title = "Vacinação para COVID-19 por hospitalização e UF",
subtitle = "Cada ponto é uma unidade de saúde",
x = "Percentual",
y = "UF",
fill = "Vacinação COVID-19") +
theme_minimal() +
theme(legend.position = "bottom")
datatable(res)
rm(res)
sivep %>%
# Internações à partir de fevereiro
filter(DT_INTERNA >= as.Date("2021-02-01") & DT_INTERNA <= Sys.Date()) %>%
# Apenas hospitalizados
filter(HOSPITAL == "Sim") %>%
# Apenas diagnóstico COVID-19 %>%
filter(CLASSI_FIN == "SRAG COVID-19") %>%
# Variável mes
mutate(mes = fct_reorder(as.character(month(DT_INTERNA)), month(DT_INTERNA)) ) %>%
# Altera as categorias de vacinação
mutate(VACINA_COV = recode(VACINA_COV,
"1" = "vacina_sim",
"2" = "vacina_nao",
"9" = "vacina_na")) %>%
# Altera os missing de vacina para a mesma categoria de ignorado
mutate(VACINA_COV = replace_na(VACINA_COV, "vacina_na")) %>%
# Agrupa os registros
group_by(mes, SG_UF_NOT, ID_MUNICIP, ID_UNIDADE, VACINA_COV) %>%
# Resumo de frequências
summarise(freq = n()) %>%
# Pivoteia a variável de vacinação e preenche os NAs com zero
pivot_wider(names_from = VACINA_COV, values_from = freq, values_fill = 0) %>%
# Calcula os percentuais
mutate(
total = vacina_sim + vacina_nao + vacina_na,
vacina_sim_per = round(vacina_sim/total*100, 2),
vacina_nao_per = round(vacina_nao/total*100, 2),
vacina_na_per = round(vacina_na/total*100, 2)
) %>%
# Seleciona variáveis
select(mes_internacao = mes, uf = SG_UF_NOT, mun = ID_MUNICIP, unidade = ID_UNIDADE, vacina_sim_per, vacina_nao_per, vacina_na_per) %>%
# Ordena decrescente pela quantidade de NAs
arrange(desc(vacina_na_per)) %>%
# Gráfico
ggplot(aes(x = mes_internacao, y = vacina_na_per, color = uf)) +
geom_quasirandom(alpha = .5, size = 1) +
facet_wrap(~ uf) +
labs(title = "Percentual do campo VACINA_COV não preenchido ou ignorado, por mês de internação e UF",
subtitle = "Cada ponto é uma unidade de saúde",
x = "UF",
y = "Percentual") +
theme_minimal() +
theme(legend.position = "none")
## `summarise()` has grouped output by 'mes', 'SG_UF_NOT', 'ID_MUNICIP', 'ID_UNIDADE'. You can override using the `.groups` argument.
res <- sivep %>%
# Internações à partir de abril
filter(DT_INTERNA >= as.Date("2021-04-01")) %>%
# Apenas hospitalizados
filter(HOSPITAL == "Sim") %>%
# Apenas diagnóstico COVID-19 %>%
filter(CLASSI_FIN == "SRAG COVID-19") %>%
# Altera as categorias de vacinação
mutate(VACINA_COV = recode(VACINA_COV,
"1" = "vacina_sim",
"2" = "vacina_nao",
"9" = "vacina_na")) %>%
# Altera os missing de vacina para a mesma categoria de ignorado
mutate(VACINA_COV = replace_na(VACINA_COV, "vacina_na")) %>%
# Agrupa os registros
group_by(SG_UF_NOT, ID_MUNICIP, ID_UNIDADE, VACINA_COV) %>%
# Resumo de frequências
summarise(freq = n()) %>%
# Pivoteia a variável de vacinação e preenche os NAs com zero
pivot_wider(names_from = VACINA_COV, values_from = freq, values_fill = 0) %>%
# Calcula os percentuais
mutate(
total = vacina_sim + vacina_nao + vacina_na,
vacina_sim_per = round(vacina_sim/total*100, 2),
vacina_nao_per = round(vacina_nao/total*100, 2),
vacina_na_per = round(vacina_na/total*100, 2)
) %>%
# Apenas unidades com 100 ou mais internações
filter(total >= 100) %>%
# Seleciona variáveis
select(uf = SG_UF_NOT, mun = ID_MUNICIP, unidade = ID_UNIDADE, vacina_sim_per, vacina_nao_per, vacina_na_per) %>%
# Ordena decrescente pela quantidade de NAs
arrange(desc(vacina_na_per))
## `summarise()` has grouped output by 'SG_UF_NOT', 'ID_MUNICIP', 'ID_UNIDADE'. You can override using the `.groups` argument.
res %>%
# Considera apenas as instituições com 10% ou menos de missing
filter(vacina_na_per <= 10) %>%
# Prepara rótulos para o gráfico
mutate(label = ifelse(vacina_sim_per > 30, str_to_title(str_wrap(string = unidade, width = 20)), "")) %>%
# Gráfico
ggplot(aes(x = uf, y = vacina_sim_per, color = uf)) +
geom_quasirandom(alpha = .7, size = 2) +
geom_text_repel(aes(label = label), position = position_quasirandom(), size = 3, box.padding = .70) +
coord_cartesian(ylim = c(0, 70)) +
labs(title = "Pacientes internados com COVID-19 que já receberam a vacina, por unidade de saúde",
subtitle = "Cada ponto é uma unidade de saúde",
x = "UF",
y = "Percentual") +
theme_minimal() +
theme(legend.position = "none")
## Warning: ggrepel: 169 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
datatable(data = res)
rm(res)
sivep %>%
# Internações à partir de abril
filter(DT_NOTIFIC >= as.Date("2021-04-01")) %>%
# Apenas diagnóstico COVID-19 %>%
filter(CLASSI_FIN == "SRAG COVID-19") %>%
# Altera as categorias de vacinação
mutate(VACINA_COV = recode(VACINA_COV,
"1" = "Vacinado",
"2" = "Não vacinado",
"9" = "Ignorado")) %>%
# Altera os missing de vacina para a mesma categoria de ignorado
mutate(VACINA_COV = replace_na(VACINA_COV, "Ignorado")) %>%
mutate(obito = ifelse(EVOLUCAO == "Óbito", "Óbito", "Cura/\nEm andamento")) %>%
ggplot(aes(fill = obito, y = VACINA_COV)) +
geom_bar(position = "fill")
res <- sivep %>%
# Internações à partir de abril
filter(DT_INTERNA >= as.Date("2021-04-01")) %>%
# Apenas hospitalizados
filter(HOSPITAL == "Sim") %>%
# Apenas diagnóstico COVID-19 %>%
filter(CLASSI_FIN == "SRAG COVID-19") %>%
# Altera as categorias de vacinação
mutate(VACINA_COV = recode(VACINA_COV,
"1" = "vacina_sim",
"2" = "vacina_nao",
"9" = "vacina_na")) %>%
# Altera os missing de vacina para a mesma categoria de ignorado
mutate(VACINA_COV = replace_na(VACINA_COV, "vacina_na")) %>%
# Cria campo de óbito
mutate(obito = ifelse(EVOLUCAO == "Óbito", "Óbito", "Cura/\nEm andamento")) %>%
# Agrupa os registros
group_by(SG_UF_NOT, ID_MUNICIP, ID_UNIDADE, obito, VACINA_COV) %>%
# Resumo de frequências
summarise(freq = n()) %>%
# Pivoteia a variável de vacinação e preenche os NAs com zero
pivot_wider(names_from = VACINA_COV, values_from = freq, values_fill = 0) %>%
# Calcula os percentuais
mutate(
total = vacina_sim + vacina_nao + vacina_na,
vacina_sim_per = round(vacina_sim/total*100, 2),
vacina_nao_per = round(vacina_nao/total*100, 2),
vacina_na_per = round(vacina_na/total*100, 2)
) %>%
# Apenas unidades com 100 ou mais internações
filter(total >= 100) %>%
# Seleciona variáveis
select(uf = SG_UF_NOT, mun = ID_MUNICIP, unidade = ID_UNIDADE, obito, vacina_sim_per, vacina_nao_per, vacina_na_per) %>%
# Retira unidades de saúde com preechimento ruim
filter(vacina_na_per <= 10)
## `summarise()` has grouped output by 'SG_UF_NOT', 'ID_MUNICIP', 'ID_UNIDADE', 'obito'. You can override using the `.groups` argument.
ggplot(data = res, aes(x = vacina_sim_per, y = obito, color = vacina_sim_per)) +
geom_quasirandom(alpha = .7, size = 2, groupOnX = FALSE) +
labs(title = "Percentual de vacinação entre os internados segundo desfecho, por unidade de saúde",
subtitle = "Cada ponto é uma unidade de saúde",
x = "Percentual de vacinados para COVID-19",
y = "Desfecho") +
theme_minimal() +
theme(legend.position = "none") +
scale_colour_viridis_c()
datatable(res)