Skip to content

Commit

Permalink
padronizar_logradouros_com_tipo() -> padronizar_logradouros_completos()
Browse files Browse the repository at this point in the history
  • Loading branch information
dhersz committed May 17, 2024
1 parent fb34ef3 commit 925a1f1
Show file tree
Hide file tree
Showing 8 changed files with 115 additions and 76 deletions.
2 changes: 1 addition & 1 deletion NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export(padronizar_complementos)
export(padronizar_enderecos)
export(padronizar_estados)
export(padronizar_logradouros)
export(padronizar_logradouros_com_tipo)
export(padronizar_logradouros_completos)
export(padronizar_municipios)
export(padronizar_numeros)
export(padronizar_tipos_de_logradouro)
Expand Down
26 changes: 15 additions & 11 deletions R/correspondencia_logradouro.R
Original file line number Diff line number Diff line change
@@ -1,34 +1,38 @@
#' Correspondência entre os campos de logradouro e tipo de logradouro e suas
#' colunas
#' Correspondência entre os campos do logradouro completo e as colunas que os
#' descrevem
#'
#' Cria um vetor de caracteres que especifica as colunas que representam os
#' campos de logradouro e tipo de logradouro em um dataframe.
#' campos de logradouro (tipo, nome e número) em um dataframe de endereços.
#'
#' @param tipo_de_logradouro O nome da coluna que representa o tipo de
#' logradouro no dataframe de endereços.
#' @param logradouro O nome da coluna que representa o logradouro no dataframe
#' de endereços.
#'
#' @return Um vetor nomeado de caracteres, cujos nomes são `tipo_de_logradouro`
#' e `logradouro` e os valores as respectivas colunas que os descrevem no
#' @param logradouro O nome da coluna que representa o nome do logradouro no
#' dataframe de endereços.
#' @param numero O nome da coluna que representa o numero do logradouro no
#' dataframe de endereços.
#'
#' @return Um vetor nomeado de caracteres, em que os nomes representam os campos
#' do logradouro e os valores as colunas que os descrevem no dataframe.
#'
#' @examples
#' correspondencia_logradouro(
#' tipo_de_logradouro = "tipo_de_logradouro",
#' logradouro = "logradouro"
#' logradouro = "logradouro",
#' numero = "numero"
#' )
#'
#' @export
correspondencia_logradouro <- function(tipo_de_logradouro, logradouro) {
correspondencia_logradouro <- function(tipo_de_logradouro, logradouro, numero) {
col <- checkmate::makeAssertCollection()
checkmate::assert_string(tipo_de_logradouro, add = col)
checkmate::assert_string(logradouro, add = col)
checkmate::assert_string(numero, add = col)
checkmate::reportAssertions(col)

vetor_correspondencia <- c(
tipo_de_logradouro = tipo_de_logradouro,
logradouro = logradouro
logradouro = logradouro,
numero = numero
)

return(vetor_correspondencia)
Expand Down
4 changes: 3 additions & 1 deletion R/enderecopadrao.R
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ utils::globalVariables(
"municipio",
"estado",
".tmp_tipo_padrao",
".tmp_log_padrao"
".tmp_log_padrao",
".tmp_num_padrao",
"logradouro_completo"
)
)
Original file line number Diff line number Diff line change
@@ -1,33 +1,32 @@
#' Padronizar logradouros e tipos de logradouro simultaneamente
#' Padronizar logradouros completos
#'
#' Padroniza o logradouro e seu tipo (dois campos diferentes) de forma
#' simultânea, produzindo um novo campo (`logradouro_com_tipo`) que garante a
#' consistência dos dados.
#' Padroniza o logradouro completo a partir de diversos campos (tipo de
#' logradouro, nome do logradouro e número), garantindo a consistência da
#' informação.
#'
#' @param enderecos Um dataframe. Os endereços a serem padronizados, deve
#' incluir uma coluna com o tipo de logradouro e outra com o logradouro em si.
#' @param enderecos Um dataframe. Os endereços a serem padronizados. Ao menos
#' uma de suas colunas deve corresponder a um campo do logradouro.
#' @param campos_do_logradouro Um vetor nomeado de caracteres. A correspondência
#' entre os campos a serem padronizados (nomes do vetor) e as colunas que os
#' representam no dataframe (valores em si). a função
#' `correspondencia_logradouro()` facilita a criação deste vetor, fazendo
#' também algumas verificações do conteúdo imputado. caso deseje criar o vetor
#' manualmente, note que seus nomes devem ser `logradouros` e
#' `tipos_de_logradouro`.
#' manualmente, note que seus nomes devem ser os mesmos nomes dos parâmetros
#' da função `correspondencia_logradouro()`.
#' @param manter_cols_extras Um logical. Se colunas não especificadas em
#' `campos_do_logradouro` devem ser mantidas no output ou não (por exemplo,
#' uma coluna com a informação de bairro ou de id do conjunto de dados sendo
#' padronizado). Por padrão, `TRUE`.
#' uma coluna com a informação de bairro ou com o id do conjunto de dados
#' sendo padronizado). Por padrão, `TRUE`.
#'
#' @return Caso `manter_cols_extras` seja `TRUE`, o mesmo dataframe de input,
#' mas sem as colunas descrevendo o logradouro e o tipo de logradouro e com
#' uma coluna padronizada adicional `logradouro_com_tipo`. Caso
#' `manter_cols_extras` seja `FALSE`, um dataframe de apenas uma coluna,
#' `logradouro_com_tipo`.
#' mas sem as colunas descrevendo o logradouro e com uma coluna padronizada
#' adicional `logradouro_completo`. Caso `manter_cols_extras` seja `FALSE`, um
#' dataframe de apenas uma coluna, `logradouro_completo`.
#'
#' @examples
#' enderecos <- data.frame(
#' id = 1,
#' tipo_logradouro = "r",
#' tipoLogradouro = "r",
#' logradouro = "ns sra da piedade",
#' nroLogradouro = 20,
#' complemento = "qd 20",
Expand All @@ -38,20 +37,21 @@
#' )
#'
#' campos <- correspondencia_logradouro(
#' tipo_de_logradouro = "tipo_logradouro",
#' logradouro = "logradouro"
#' tipo_de_logradouro = "tipoLogradouro",
#' logradouro = "logradouro",
#' numero = "nroLogradouro"
#' )
#'
#' padronizar_logradouros_com_tipo(enderecos, campos)
#' padronizar_logradouros_completos(enderecos, campos)
#'
#' padronizar_logradouros_com_tipo(
#' padronizar_logradouros_completos(
#' enderecos,
#' campos,
#' manter_cols_extras = FALSE
#' )
#'
#' @export
padronizar_logradouros_com_tipo <- function(
padronizar_logradouros_completos <- function(
enderecos,
campos_do_logradouro = correspondencia_logradouro(),
manter_cols_extras = TRUE
Expand All @@ -64,9 +64,9 @@ padronizar_logradouros_com_tipo <- function(

campos_extras <- setdiff(names(enderecos), campos_do_logradouro)
campos_finais <- if (manter_cols_extras) {
c(campos_extras, "logradouro_com_tipo")
c(campos_extras, "logradouro_completo")
} else {
"logradouro_com_tipo"
"logradouro_completo"
}

enderecos_padrao[
Expand All @@ -81,8 +81,33 @@ padronizar_logradouros_com_tipo <- function(
enderecos[[campos_do_logradouro["logradouro"]]]
)
]
enderecos_padrao[
,
.tmp_num_padrao := padronizar_numeros(
enderecos[[campos_do_logradouro["numero"]]]
)
]


enderecos_padrao[
,
logradouro_completo := data.table::fcase(
is.na(.tmp_log_padrao), .tmp_num_padrao,
is.na(.tmp_num_padrao), .tmp_log_padrao,
!is.na(.tmp_log_padrao) & !is.na(.tmp_num_padrao), paste(.tmp_log_padrao, .tmp_num_padrao)
)
]
enderecos_padrao[
,
logradouro_completo := data.table::fcase(
is.na(.tmp_tipo_padrao), logradouro_completo,
is.na(logradouro_completo), .tmp_tipo_padrao,
!is.na(.tmp_tipo_padrao) & !is.na(logradouro_completo), paste(.tmp_tipo_padrao, logradouro_completo)
)
]
enderecos_padrao[
,
c(".tmp_tipo_padrao", ".tmp_log_padrao", ".tmp_num_padrao") := NULL
]

campos_a_remover <- setdiff(names(enderecos), campos_finais)
enderecos_padrao[, (campos_a_remover) := NULL]
Expand All @@ -104,7 +129,7 @@ checa_campos_do_logradouro <- function(campos_do_logradouro, enderecos) {
checkmate::assert_names(
names(campos_do_logradouro),
type = "unique",
subset.of = c("tipo_de_logradouro", "logradouro"),
subset.of = c("tipo_de_logradouro", "logradouro", "numero"),
add = col
)
checkmate::assert_names(
Expand Down
2 changes: 1 addition & 1 deletion _pkgdown.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ reference:
- title: "Padronização de múltiplos campos simultaneamente"
- contents:
- padronizar_enderecos
- padronizar_logradouros_com_tipo
- padronizar_logradouros_completos
- title: "Padronização de campos individuais"
- contents:
- padronizar_estados
Expand Down
23 changes: 13 additions & 10 deletions man/correspondencia_logradouro.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 10 additions & 5 deletions tests/testthat/test-correspondencia_logradouro.R
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
tester <- function(tipo_de_logradouro = "tipo_de_logradouro",
logradouro = "logradouro") {
logradouro = "logradouro",
numero = "numero") {
correspondencia_logradouro(
tipo_de_logradouro = tipo_de_logradouro,
logradouro = logradouro
logradouro = logradouro,
numero = numero
)
}

Expand All @@ -11,19 +13,22 @@ test_that("da erro com inputs != de caracteres", {
expect_error(tester(tipo_de_logradouro = c("oi", "ola")))
expect_error(tester(logradouro = 1))
expect_error(tester(logradouro = c("oi", "ola")))
expect_error(tester(numero = 1))
expect_error(tester(numero = c("oi", "ola")))
})

test_that("retorna vetor de caracteres", {
expect_identical(
tester(),
c(
tipo_de_logradouro = "tipo_de_logradouro",
logradouro = "logradouro"
logradouro = "logradouro",
numero = "numero"
)
)

expect_identical(
tester(tipo_de_logradouro = "oi", logradouro = "ola"),
c(tipo_de_logradouro = "oi", logradouro = "ola")
tester(tipo_de_logradouro = "oi", logradouro = "ola", numero = "hello"),
c(tipo_de_logradouro = "oi", logradouro = "ola", numero = "hello")
)
})

0 comments on commit 925a1f1

Please sign in to comment.