R/gera-crescimento-ras.R

Defines functions gera_crescimento_ras

Documented in gera_crescimento_ras

#' @title Gera dados de casos-obitos por 100k
#'
#' @description Avalia os dados de casos e obitos da SSP e gera um data.table com as informacoes de variacao de casos e obitos semanais por UF
#'
#' @param dados data.frame ou data.table com os dados de cadastro da SSP
#'
#' @return um data.table com os dados de crescimento de casos e obitos semanais por UF
#'
#' @import data.table

gera_crescimento_ras = function(dados){
  # Conformando ao tipo data.table
  dados = transforma_dt(dados)

  # Definindo parametros
  top = 6

  # Gerando serie de casos
  casos = dados[,.(casos = .N), by = .(cadastro, localidade = ra)]

  # Gerando serie de obitos
  obitos = dados[!is.na(data_obito), .(obitos = .N), by = .(data_obito, localidade = ra)]

  # Renomeando variavel
  data.table::setnames(casos, "cadastro", "data")
  data.table::setnames(obitos, "data_obito", "data")

  # Alterando formato da data
  casos[, data := as.Date(data)]
  obitos[, data := as.Date(data)]

  # Criando tabela de datas
  base = data.table(
    expand.grid(data = seq(as.Date("2021-01-01"), max(dados$cadastro), by = "day"),
                localidade = unique(casos$localidade)))

  # Gerando dados de semana
  base[, semana := cumsum(weekdays(data) == weekdays(max(data + 1))), by = localidade]

  # Colocando dados de semana na serie
  dados = base[casos, `:=`(casos = casos), on = .(data, localidade)]
  dados = dados[obitos, `:=`(obitos = obitos), on = .(data, localidade)]
  dados = dados[,`:=`(casos = ifelse(is.na(casos), 0, casos),
                      obitos = ifelse(is.na(obitos), 0, obitos))]

  # Serie de dados
  dados = dados[, .(casos = sum(casos),
                    obitos = sum(obitos),
                    data = max(data)), by = .(semana, localidade)]

  # Crescimento de casos nas ultimas duas semanas
  dados_filtrando = dados[, `:=`(crescimento_casos = casos + shift(casos, 1),
                                 crescimento_obitos = obitos + shift(obitos, 1)), by = localidade]

  # Removendo datas na
  dados = dados[!is.na(data),]

  # Considerando apenas localidades validas
  dados_filtrando = dados_filtrando[semana == max(semana, na.rm = TRUE) & !localidade %in% c("Outros Estados", "NA", "Distrito Federal", "Não Informado"), ]

  # Filtra ras com maior crescimento de casos e obitos
  top_casos = dados_filtrando[crescimento_casos %in% sort(dados_filtrando$crescimento_casos, decreasing = TRUE)[1:top],]
  top_obitos = dados_filtrando[crescimento_obitos %in% sort(dados_filtrando$crescimento_obitos, decreasing = TRUE)[1:top],]

  # Colocando em forma de data.tables
  top_casos[,fator_casos := forcats::fct_reorder(localidade, crescimento_casos, .desc = TRUE)]
  top_obitos[,fator_obitos := forcats::fct_reorder(localidade, crescimento_obitos, .desc = TRUE)]

  top_casos = top_casos[,.(localidade, fator_casos)]
  top_obitos = top_obitos[,.(localidade, fator_obitos)]

  # Adicionando localidades com maior crescimento de obitos e casos
  dados = dados[top_casos, fator_casos := fator_casos, on = "localidade"]
  dados = dados[top_obitos, fator_obitos := fator_obitos, on = "localidade"]

  # Filtrando apenas dados das ras com maior crescimento de casos e obitos
  dados = dados[semana %in% (max(semana, na.rm = TRUE)-3):max(semana, na.rm = TRUE) & (!is.na(fator_casos) | !is.na(fator_obitos) == TRUE),]

  # Definindo fator
  dados[, data_inicial := data - 6]
  setorder(dados, data)

  vetor = paste0(strftime(dados$data_inicial, format = "%d/%m/%Y"),
                " até\n",
                strftime(dados$data, format = "%d/%m/%Y"))

  dados$fator = factor(vetor, levels = unique(vetor), ordered = TRUE)

  # Removendo fator obito de localidades sem obitos
  dados_localidades_obitos = dados[, .(obitos = sum(obitos)), by = localidade]
  localidades_sem_obitos = dados_localidades_obitos[obitos == 0,]$localidade

  levels(dados$fator_obitos)[levels(dados$fator_obitos) %in% localidades_sem_obitos] = NA

  # Retorna Resultados
  return(dados)
}
mellohenrique/codeplan.boletim2 documentation built on March 20, 2022, 3:15 a.m.