O pacote munifacil tem como objetivo facilitar a união de colunas de nome de município com o respectivo código do IBGE.
Isso é útil para posteriormente realizar procedimentos de join
usando como chave a coluna do código do IBGE (como o dplyr::left_join()
).
Instalação
Este pacote atualmente não está disponível no CRAN, podendo ser instalado através do GitHub, utilizando o código abaixo:
install.packages("remotes")
remotes::install_github("curso-r/munifacil")
Exemplo de uso
Neste exemplo, vamos usar uma base de dados que contém o nome de municípios e a UF, e vamos incluir o código do IBGE.
Preparando os dados
Primeiro, vamos carregar os pacotes necessários e importar a base de dados que usaremos neste exemplo.
arquivo <- system.file("extdata/exemplo.csv", package = "munifacil")
base_de_exemplo_bruta <- read_csv(arquivo)
Vamos dar uma olhada na base de dados que usaremos como exemplo. Nessa base, temos o nome do município, a UF, e o código do IBGE que usaremos para validar posteriormente:
glimpse(base_de_exemplo_bruta)
#> Rows: 6,786
#> Columns: 6
#> $ `Cidade abrangida` <chr> "ABADIA DE GOIÁS", "ABADIA DOS DOU…
#> $ `Código do IBGE - cidade abrangida` <chr> "5200050", "3100104", "5200100", "…
#> $ `Cidade abrangida UF` <chr> "GO", "MG", "GO", "MG", "PA", "CE"…
#> $ `Tribunal UF` <chr> "GO", "MG", "GO", "MG", "PA", "CE"…
#> $ `Tribunal município` <chr> "GUAPO", "COROMANDEL", "ABADIÂNIA"…
#> $ `Indicador Valor` <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
Agora, vamos limpar o nome das colunas e remover uma linha que não tem informação. Alguns valores da coluna codigo_do_ibge_cidade_abrangida
estão com mais de 7 dígitos, então vamos manter apenas os 7 primeiros dígitos (o número de dígitos utilizado pelo IBGE para identificar os municípios).
Essa etapa é feita apenas para facilitar a visualização do exemplo, e não é necessária para o uso do pacote.
base_de_exemplo <- base_de_exemplo_bruta |>
janitor::clean_names() |>
filter(cidade_abrangida != "-",
codigo_do_ibge_cidade_abrangida != "-") |>
mutate(
# manter apenas os 7 primeiros dígitos da coluna codigo_do_ibge_cidade_abrangida
codigo_do_ibge_cidade_abrangida = str_sub(codigo_do_ibge_cidade_abrangida, 1, 7))
glimpse(base_de_exemplo)
#> Rows: 5,534
#> Columns: 6
#> $ cidade_abrangida <chr> "ABADIA DE GOIÁS", "ABADIA DOS DOURADO…
#> $ codigo_do_ibge_cidade_abrangida <chr> "5200050", "3100104", "5200100", "3100…
#> $ cidade_abrangida_uf <chr> "GO", "MG", "GO", "MG", "PA", "CE", "P…
#> $ tribunal_uf <chr> "GO", "MG", "GO", "MG", "PA", "CE", "P…
#> $ tribunal_municipio <chr> "GUAPO", "COROMANDEL", "ABADIÂNIA", "A…
#> $ indicador_valor <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
Utilizando o pacote munifacil
Agora, vamos usar o pacote munifacil
para incluir o código do IBGE na base de dados.
A primeira etapa necessária é limpar o nome das colunas que contém o nome do município e a UF. Isso é feito com a função limpar_colunas()
.
base_colunas_limpas <- base_de_exemplo %>%
limpar_colunas(col_muni = cidade_abrangida,
col_uf = cidade_abrangida_uf)
glimpse(base_colunas_limpas)
#> Rows: 5,534
#> Columns: 8
#> $ cidade_abrangida <chr> "ABADIA DE GOIÁS", "ABADIA DOS DOURADO…
#> $ codigo_do_ibge_cidade_abrangida <chr> "5200050", "3100104", "5200100", "3100…
#> $ cidade_abrangida_uf <chr> "GO", "MG", "GO", "MG", "PA", "CE", "P…
#> $ tribunal_uf <chr> "GO", "MG", "GO", "MG", "PA", "CE", "P…
#> $ tribunal_municipio <chr> "GUAPO", "COROMANDEL", "ABADIÂNIA", "A…
#> $ indicador_valor <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
#> $ uf_join <chr> "GO", "MG", "GO", "MG", "PA", "CE", "P…
#> $ muni_join <chr> "abadia de goias", "abadia dos dourado…
Na base base_colunas_limpas
, agora temos duas novas colunas: uf_join
e muni_join
. Essas colunas estão “limpas”, de forma que facilite a união com a tabela de “de-para” que contém os códigos do IBGE para cada município.
Agora, vamos incluir o código do IBGE na base de dados. Isso é feito com a função incluir_codigo_ibge()
.
resultado <- base_colunas_limpas %>%
incluir_codigo_ibge()
#> ✔ Uhul! Deu certo!
Veja que ao usar a função incluir_codigo_ibge()
, por padrão uma mensagem sobre a quantidade de resultados que não receberam o id do município é impressa. Isso é útil para verificar se existem municípios que não foram encontrados na base de “de-para”. Essa mensagem pode ser desativada com o argumento diagnostico = FALSE
.
A função incluir_codigo_ibge()
adiciona as seguintes colunas na base de dados:
id_municipio
- código do IBGE para cada município.manual
- a informação utilizada para unir os valores foram incluídos manualmente na tabela de de-para.atencao
- indica que é importante ter atenção nesses casos. Por exemplo: podem ser municípios com nomes similares, o mesmo nome de município em UFs diferentes, etc.existia_1991
- O municipio existia em 1991?existia_2000
- O municipio existia em 2000?existia_2010
- O municipio existia em 2010?
Dentre as colunas citadas acima, a principal é a id_municipio
, que é o código do IBGE para cada município. As outras colunas são úteis para verificar se a união foi feita corretamente.
glimpse(resultado)
#> Rows: 5,539
#> Columns: 14
#> $ cidade_abrangida <chr> "ABADIA DE GOIÁS", "ABADIA DOS DOURADO…
#> $ codigo_do_ibge_cidade_abrangida <chr> "5200050", "3100104", "5200100", "3100…
#> $ cidade_abrangida_uf <chr> "GO", "MG", "GO", "MG", "PA", "CE", "P…
#> $ tribunal_uf <chr> "GO", "MG", "GO", "MG", "PA", "CE", "P…
#> $ tribunal_municipio <chr> "GUAPO", "COROMANDEL", "ABADIÂNIA", "A…
#> $ indicador_valor <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
#> $ uf_join <chr> "GO", "MG", "GO", "MG", "PA", "CE", "P…
#> $ muni_join <chr> "abadia de goias", "abadia dos dourado…
#> $ id_municipio <chr> "5200050", "3100104", "5200100", "3100…
#> $ manual <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FAL…
#> $ atencao <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FAL…
#> $ existia_1991 <lgl> FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, T…
#> $ existia_2000 <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TR…
#> $ existia_2010 <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TR…
Podemos remover as colunas que foram adicionadas e não são necessárias para a análise.
resultado_limpo <- resultado %>%
select(-c(manual, atencao, starts_with("existia"),
uf_join, muni_join))
Verificando o resultado final:
glimpse(resultado_limpo)
#> Rows: 5,539
#> Columns: 7
#> $ cidade_abrangida <chr> "ABADIA DE GOIÁS", "ABADIA DOS DOURADO…
#> $ codigo_do_ibge_cidade_abrangida <chr> "5200050", "3100104", "5200100", "3100…
#> $ cidade_abrangida_uf <chr> "GO", "MG", "GO", "MG", "PA", "CE", "P…
#> $ tribunal_uf <chr> "GO", "MG", "GO", "MG", "PA", "CE", "P…
#> $ tribunal_municipio <chr> "GUAPO", "COROMANDEL", "ABADIÂNIA", "A…
#> $ indicador_valor <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
#> $ id_municipio <chr> "5200050", "3100104", "5200100", "3100…
Verificando o resultado
- Quantidade de resultados que não receberam o ID do município:
resultado_limpo %>%
dplyr::filter(is.na(id_municipio))
#> # A tibble: 0 × 7
#> # ℹ 7 variables: cidade_abrangida <chr>, codigo_do_ibge_cidade_abrangida <chr>,
#> # cidade_abrangida_uf <chr>, tribunal_uf <chr>, tribunal_municipio <chr>,
#> # indicador_valor <dbl>, id_municipio <chr>
Todos os municípios receberam o ID do IBGE!
- Mas esses IDs estão corretos?
# Verificando a quantidade de resultados corretos
resultado_limpo %>%
mutate(resultado_correto = codigo_do_ibge_cidade_abrangida == id_municipio) %>%
count(resultado_correto) %>%
mutate(porcentagem = formattable::percent(n / sum(n))) %>%
knitr::kable()
resultado_correto | n | porcentagem |
---|---|---|
TRUE | 5539 | 100.00% |
Como contribuir?
Caso encontre alguma variação de escrita de nomes de municípios que não seja na tabela “de-para” atual do pacote munifacil, você pode contribuir com o pacote enviando essa sugestão.
Para isso, você pode abrir uma issue, ou enviar um pull request adicionando a sugestão no arquivo inst/depara_muni_codigo.csv
.