Limpeza e manipulação de dados de saúde com a linguagem R

Manipulação de dados

Dificilmente trabalharemos com uma base de dados que já esteja pronta. Ter de transformar valores de uma variável, excluir outras, remover ou incluir observações, criar novas variáveis é algo quase compulsório numa análise de dados.

Existem diversas possibilidades de situações que necessitem de limpeza de dados, três pacotes consegue resolver a grande maioria dos casos: dplyr, tidyr, stringr.

Muitas dessas funções pertencem ao pacote dplyr R , que fornece funções ou “verbos” para resolver a maioria dos desafios de manipulação de dados.

Em um pipeline de limpeza, a ordem das etapas é importante. As etapas de limpeza incluem:

  1. Instalação dos pacotes

  2. Importação de dados

  3. Limpar o nome das colunas

  4. Criação e transformação de colunas (por exemplo, recodificação ou padronização de valores)

  5. Filtrar linhas e colunas

Instalação dos pacotes

Primeiro, vamos instalar os pacotes necessários com a função install.packages ( ) e chamar a biblioteca com a função library ( ).

Para instalar e chamar várias bibliotecas ao mesmo tempo você pode usar a função p_load ( ) do pacote chamado pacman. Com a função p_load basta inserir o nome dos pacotes a serem instalados, dentro do parenteses, separados por uma vírgula.

install.packages ("pacman")

library (pacman)

É interessante pensar em todos os pacotes necessários para as análises dos dados e fazer a instalção uma única vez com o p_load.

Todos os pacotes de limpeza (dplyer, stringr etc) fazem parte da família Tidyverse, por isso basta instalar apenas o tidyverse. Além disso vamos instalar outros pacotes muito úteis para análise de dados como segue a baixo descrito.

pacman::p_load(
  rio,        # importar dados 
  here,       # caminho relativo do diretório de trabalho
  janitor,    # limpeza de dados e tabelas
  lubridate,  # trabalhar com datas
  epikit,     # categorias de idade
  tidyverse   # manipulação de dados 
)

Importação da base de dados

Vamos usar os dados de SRAG (Síndrome Respiratória Aguda Grave) disponível no site do opendatasus disponível para donwload, referente ao ano de 2022.

Esse arquivo com os dados após o download foi salvo em uma pasta chamada “dados” no diretório de trabalho definido ao iniciar o projeto no R. O arquivo exportado se chama INFLUD22-02-05-2022.csv.

A lógica de importação de dados com os pacotes rio e here é a seguinte: primeiro vamos eleger um nome para o data frame, no exemplo abaixo, nomeamos como sivep, seguido pelo operador de atribuição representado pelo <-.

Depois vamos utilizar duas funções a import ( ) que é a função que importa os dados, seguido da função here() que vai facilitar dizer ao R onde encontrar e salvar seus arquivos - em essência, ele cria caminhos de arquivo.

Por fim, vamos colocar o nome da pasta do diretório onde os dados estõa salvos, seguido do nome do arquivo de dados. Lembrando que os nomes dos arquivos devem vir entre aspas e separados por vírgulas. Tanto o nome do arquivo de dados como o nome da pasta onde estão armazenados devem estar escritos de forma identica.

sivep <- import(here("dados", "INFLUD22-02-05-2022.csv"))

Inspeção do banco de dados

Algumas funções bem úteis para inspecionar o banco de dados são descritas abaixo. Ou seja, elas permitem ter uma vizualização do banco.

Você pode usar a função skim() do pacote skimr para obter uma visão geral de todo o dataframe. Essa função demonstra em tabelas varias estatisticas descritivas das variáveis presentes no banco de dados.

library(skimr)

skim(sivep)

Limpeza dos dados

A primeira etapa de limpeza, vai ser filtrar os dados apenas para o Estado de São Paulo, visto que o banco, que foi exportado do opendatasus, contém dados do Brasil inteiro.

Para isso, vamos utilizar a variável chamada SG_UF. Que é referente a Unidade da Federação em que cada pessoa notificada no banco reside.

Antes do filtro, vamos olhar a classe da variável com a função class ( ). Para a função é necessário inserir o nome do data frame, seguido pelo sifrão $ e nome da variável.

Também podemos verificar com a função table ( ).

# classe da variável
class(sivep$SG_UF)
## [1] "character"
# tabela resumida 
table(sivep$SG_UF) 
## 
##          AC    AL    AM    AP    BA    CE    DF    ES    GO    MA    MG    MS 
##    55   765  2595  3400   456  9794 16876  5334  2318  7470  2440 30840  5686 
##    MT    PA    PB    PE    PI    PR    RJ    RN    RO    RR    RS    SC    SE 
##  2244  3876  3812  5841  2367 19969 16263  2027  1639   146 12854 10172  2898 
##    SP    TO 
## 69933  1829

Dplyer - Filter

Para filtrar os dados apenas para UF de SP. Vamos usar a função filter ( ) do pacote dplyer.

A sintaxe é contruída inserindo em primeiro lugar o nome de um novo objeto, para não sobreescrever nos dados brutos originais. Aqui vamos chamar de sivep_sp, seguido pelo sinal de atribuição <- e o nome da base original que vai ser filtrada.

Como vamos pedir para o R executar mais de uma ação, precisamos inserir o operador pipe %>% que vai permitir executar a criação de um novo data frame e também aplicar um filtro, ou seja são duas ações diferentes mas que podem ser executadas na mesma linha de comando graças ao operador de pipeline. Esse operador está disponível no pacote chamado magrittr. Se não tiver instaldo, faça com o install.packages ( ).

Após o operador, vamos inserir o filter ( ) seguido do nome da base de dados original, que esta sendo filtrada, seguido do operador de igualdade e o nome da categoria a ser filtrada. Como a UF de residência é do tipo texto (character) o que será filtrado precisa estar entre aspas.

# selecionando apenas os residentes em SP
sivep_sp <- sivep %>% 
  filter(sivep$SG_UF == "SP")
# verificar a mudanca
table(sivep_sp$SG_UF)
## 
##    SP 
## 69933

Só que além de filtrar os dados para os residentes de SP, queremos filtar apenas os casos de Covid-19, que estão disponiveis na variável CLASSI_FIN.

# verificando a classe da variável
class(sivep_sp$CLASSI_FIN)
## [1] "integer"
# Verificando a distribuição das categorias
table(sivep_sp$CLASSI_FIN)
## 
##     1     2     3     4     5 
##  1660  2140   438 21809 36109

Vamos criar um novo data frame e nomea-lo como covid_sp, da mesma forma que filtramos os dados por UF de residência, vamos filtar para o código de valor 5 que está na variável CLASSI_FIN, que representa os casos graves de covid-19. Como essa variável pertece a classe integer que é numérica não é necessário usar as aspas.

covid_sp <- sivep_sp %>%
  filter(sivep_sp$CLASSI_FIN == 5)

Poderiamos fazer as duas operações na mesma sintaxe, separando os dois filtros por vírgula ou através do operador &.

covid_sp <- sivep_sp %>%
  filter(sivep_sp$CLASSI_FIN == 5 & sivep_sp$SG_UF == "SP")

Dplyer - Select

A função select ( ) seleciona as colunas de um data frame que devem ser mantidas. Isso é particularmente interessante e uma boa prática na análise de dados. Não é necessário trabalhar com um banco com 160 colunas se vamos utilizar apenas 30.

Evita dessa forma, o excesso de processamento, além de deixar os dados mais organizados e de fácil visualização.

Nesse caso vamos manter no mesmo data frame, ou seja, vamos sobreescrever as alterações nele mesmo.

Todas as variáveis que devem ser mantidas são separadas por vírgula dentro da função select ( ).

# Selecionando as variáveis de interesse para a análise
covid_sp <- covid_sp %>% 
  select (DT_NOTIFIC,DT_SIN_PRI,CS_SEXO,NU_IDADE_N,TP_IDADE,
          CS_GESTANT,CS_RACA,CS_ESCOL_N,SG_UF,ID_MN_RESI,CO_MUN_RES,
          FATOR_RISC,HOSPITAL,DT_INTERNA, UTI,CLASSI_FIN,
          CRITERIO,EVOLUCAO,DT_EVOLUCA,VACINA_COV)

Ao invés de escolher as variáveis que ficam no banco, podemos definir as que não devem permancer. Para isso basta incluir o -c após a função select ( ).

covid_sp <- covid_sp %>% select(-c(VACINA_COV,DT_EVOLUCA))

Dplyer - Mutate

Para criar novos campos ou transformar campos já existentes, podemos usar a mutate().

O primeiro argumento utilizado dentro da funcao mutate é o nome da variável nova que está sendo criada seguida do sinal de =

# cria variável nova de contagem 
covid_sp <- covid_sp %>% 
    mutate(contagem = 1)  
  
  # cria variavel nova identica a outra
covid_sp <- covid_sp %>% 
    mutate(sexo = CS_SEXO) 
  
# cria uma var nova que calcula a media de uma variável 
  covid_sp <- covid_sp %>% 
    mutate(media = mean(NU_IDADE_N)) 

# cria uma var nova que calcula a media e desvio padrão de uma variável 

  covid_sp <- covid_sp %>% 
    mutate(media = mean(NU_IDADE_N),
           dp = sd(NU_IDADE_N))
  
# transforme a classe da variável para numérica 
  covid_sp <- covid_sp %>% 
  mutate(NU_IDADE_N = as.numeric(NU_IDADE_N))

Dplyer - Arrange

A função arrange() serve para organizar os dados em sua ordenação. Costuma ser uma das últimas operações, normalmente usada para organizar os dados e facilitar visualizações ou criação de relatórios.

covid_sp <- covid_sp %>% 
  arrange(NU_IDADE_N)

Dplyer - Agregação de dados com group_by e summarise

O group_by() e o summarise() são operações que trabalham na agregação dos dados, ou seja, um dado mais detalhado passa a ser um dado mais agregado e agrupado, em consequência disso, menos detalhado.

A funcao summarise resume as informacoes de um banco de dados.

summarise (nome_var = n ( ))

Ela inicia sempre com o nome da variável que será criada seguido do sinal de = . Por último a função de resumo. A funcao n ( ) vai realizar uma contagem segundo um aprupamento estabelecido pelo group_by. O summarise também aceita outras funcoes: média, desvio padrão, mediana etc.

count_sexo <- covid_sp%>% 
    group_by(CS_SEXO) %>% 
    summarise(frequencia = n())

Recodificando variáveis categóricas (texto) com o mutate do dplyer

Podemos utilizar a funcao recode ( ) dentro do mutate ( ) para recodificar variáveis categoricas, ou seja, transforma os valores antigos para novos valores mais intuitivos.

Essa etapa de recodificar as variaveis categoricas é particularmente importante na hora de plotar graficos e tabelas.

A funcao recode o valor antigo fica a esquerda da igualdade e o novo valor a direita, separamos por vírgula as diferentes recodificacoes da variável

covid_sp <- covid_sp %>% 
  mutate(sexo = recode(CS_SEXO, 
                       "F" = "Feminino",
                       "M" = "Masculino",
                       "I" = "Ignorado")) 

Renomeando colunas

Para renomear o nome de uma coluna, utilizamos a funão replace ( ), o nome novo da variavel fica a esquerda do sinal de igualdade. e o valor antigo a direita.

## Renomear nome da coluna
covid_sp <- covid_sp %>% 
  rename(data_sintomas = DT_SIN_PRI,
         municipio = ID_MN_RESI)