4. União dos dados tabulares (não-gráficos) com bases geográficas (gráficas)

Uma das formas de armazenamento dos dados espaciais no meio digital é por meio dos arquivos vetoriais, estruturados conforme a geometria que se assimila no mundo real. Mas todo dado espacial possui atributos. Por exemplo, na vigilância ambiental é comum o uso de área das localidades de trabalho para contenção de epidemias. Essas localidades possuem identificador, extensão total, número de residências, número de comércios, números de locais de grande acúmulo de focos de vetores, sua geometria e as coordenadas de localização. Todas essas informações são atributos.

Os dados que se referem à localização, tipo da geometria e demais atributos referentes à descrição gráfica do objeto a ser representado são chamados de dados gráficos. Por vezes, algumas destas informações não estão originalmente presentes na base geográfica. São chamados de dados não-gráficos aqueles que expressam características descritivas, sociais, naturais e quantitativas armazenadas em forma de tabelas (essencialmente nos formatos “.csv”; “.xlsx”). A ligação entre estes dois tipos de dados é chamada união ou relacionamento.

Várias informações podem ser armazenadas como dados não gráficos:

  • dados populacionais,
  • contagens de eventos (como as tabelas do Tabnet),
  • taxas e razões de eventos relacionados à saúde,e
  • dados ambientais.

No próximo tópico vamos aprender como é possível a união dos dados citados utilizando a linguagem R.


4.1. União com códigos (geocódigos)

Para unir tabelas com dados gráficos a tabelas com dados não-gráficos é necessária uma chave identificadora chamada de geocódigo, presente em ambas e que fará a ligação entre elas. O geocódigo pode ser uma variável de identificação da localidade ou um código do IBGE. Mas é essencial que tenha exatamente o mesmo tipo de dado (numérico, texto) e o mesmo número de caracteres.

No R essa ligação acontece por meio de um cruzamento entre campos chamado join. Na Unidade 3 do curso básico “Análise de dados para a Vigilância em Saúde” conhecemos o conceito desse cruzamento. Neste curso, vamos praticar utilizando os dados de unidades de saúde.

O arquivo de dados geográficos de unidades de saúde contém 1008 registros e 5 colunas, incluindo a geometria. Como neste arquivo cada linha representa uma unidade de saúde, vamos inspecionar a estrutura da tabela usando a função glimpse() do pacote dplyr. Utilize o código a seguir para fazer essa inspeção:

# Inspecionando o objeto ac_unidades com a função glimpse()
glimpse(ac_unidades)
#> Rows: 1,008
#> Columns: 5
#> $ uf         <chr> "AC", "AC", "AC", "AC", "AC", "AC", "AC", "AC", "AC", "AC",…
#> $ code_state <dbl> 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,…
#> $ cod_mun    <dbl> 120035, 120001, 120001, 120001, 120001, 120001, 120001, 120…
#> $ cnes_n     <chr> "3591018", "3638685", "7245890", "7026641", "0257184", "338…
#> $ geometry   <POINT [°]> POINT (-72.68529 -9.309803), POINT (-66.883 -9.828), …

Percebemos que na base geográfica, só há informações a respeito da localização básica das unidades no estado, como código do município (cod_mun) e código da unidade de saúde (variável cnes_n). Contudo, a variável cnes_n é o código de cadastro no CNES (Cadastro Nacional de Estabelecimento de Saúde), do tipo character.

Agora, para conectar com esta tabela, vamos importar o arquivo {ac_unidades_tabela.xlsx} usando a função read_xlsx() do pacote reaxl e repetir a inspeção feita acima. Execute os seguintes códigos no seu computador:

# Carregando base de dados com a função read_xlsx()
tabela_unidades <- read_xlsx('Dados/ac_unidades_tabela.xlsx')

# Inspecionando o objeto tabela_unidades com a função glimpse()
glimpse(tabela_unidades)
#> Rows: 1,008
#> Columns: 7
#> $ codigo_cnes <chr> "3591018", "3638685", "7245890", "7026641", "0257184", "33…
#> $ nome        <chr> "ESF RIBEIRINHA ROSENDO RODRIGUES", "UNIDADE DE SAUDE DA F…
#> $ endereco    <chr> "RIO JURUA", "BR 364 KM 114", NA, NA, "RUA JOSE EMILIAO DE…
#> $ bairro      <chr> "VILA FOZ DO BREU", "ZONA RURAL", NA, NA, "NOSSA SENHORA R…
#> $ cod_mun     <dbl> 120035, 120001, 120001, 120001, 120001, 120001, 120001, 12…
#> $ code_state  <dbl> 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12…
#> $ tipo_unida  <chr> "02 - CENTRO DE SAUDE/UNIDADE BASICA", "02 - CENTRO DE SAU…

Perceba que essa tabela não possui dados gráficos ou geometrias. Há somente sete variáveis que consistem, basicamente, em identificação das unidades, como nome, endereço e tipo. Também há a variável codigo_cnes que, como o nome da variável sugere, armazena o código do CNES de cada unidade, sendo do tipo character.

Muito bem, vamos utilizar as variáveis com o código da unidade de ambos os arquivos ({ac_unidades} e {tabela_unidades}). Embora essas variáveis não estejam nomeadas exatamente iguais, isso não atrapalha a união que faremos, já que as duas são compatíveis (ambas variáveis são do tipo character e têm o mesmo comprimento).

Agora, vamos utilizar a função left_join() do pacote dplyr para realizar a união. Assim, vamos indicar no argumento by da função left_join() a variável do objeto {ac_unidades} que se liga à tabela {tabela_unidades} utilizando a função c(). Acompanhe o código abaixo com atenção e replique no seu computador:

# Salvando o objeto `ac_unidades_completo` pela união da tabela
# `ac_unidades` com a tabela tabela_unidades
ac_unidades_completo <- ac_unidades |>
  
  # Atilizando a função left_join() para união.
  # A ligação é feita pela correspondência entre as
  # colunas "cnes_n" e "codigo_cnes"
  left_join(tabela_unidades, by = c("cnes_n" = "codigo_cnes"))


Pronto! Os arquivos agora estão unidos e podem ser utilizados normalmente. Para verificar como os campos ficaram após a união, utilize a função glimpse() novamente:

glimpse(ac_unidades_completo)
#> Rows: 1,008
#> Columns: 11
#> $ uf           <chr> "AC", "AC", "AC", "AC", "AC", "AC", "AC", "AC", "AC", "AC…
#> $ code_state.x <dbl> 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1…
#> $ cod_mun.x    <dbl> 120035, 120001, 120001, 120001, 120001, 120001, 120001, 1…
#> $ cnes_n       <chr> "3591018", "3638685", "7245890", "7026641", "0257184", "3…
#> $ geometry     <POINT [°]> POINT (-72.68529 -9.309803), POINT (-66.883 -9.828)…
#> $ nome         <chr> "ESF RIBEIRINHA ROSENDO RODRIGUES", "UNIDADE DE SAUDE DA …
#> $ endereco     <chr> "RIO JURUA", "BR 364 KM 114", NA, NA, "RUA JOSE EMILIAO D…
#> $ bairro       <chr> "VILA FOZ DO BREU", "ZONA RURAL", NA, NA, "NOSSA SENHORA …
#> $ cod_mun.y    <dbl> 120035, 120001, 120001, 120001, 120001, 120001, 120001, 1…
#> $ code_state.y <dbl> 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1…
#> $ tipo_unida   <chr> "02 - CENTRO DE SAUDE/UNIDADE BASICA", "02 - CENTRO DE SA…


Caso deseje entender mais sobre os cruzamentos, indicamos fortemente a realização do curso básico “Análise de dados para a Vigilância em Saúde”. Além disso, é possível utilizar as funções de ajuda do R da seguinte forma:

help("left_join")

Da forma acima, uma página deve ser aberta no painel Help, localizada à direita do seu RStudio.