Skip to content

Commit

Permalink
rename match types
Browse files Browse the repository at this point in the history
  • Loading branch information
rafapereirabr committed Feb 8, 2025
1 parent 71776e6 commit df718ee
Show file tree
Hide file tree
Showing 13 changed files with 304 additions and 281 deletions.
19 changes: 10 additions & 9 deletions R/download_cnefe.R
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
#' Download the CNEFE data set
#' Faz download dos dados do CNEGE
#'
#' Downloads an enriched version of the CNEFE (National Registry of Addresses
#' for Statistical Purposes, in portuguese) data set, purposefully built to be
#' used with this package.
#' Faz o download de uma versão pre-processada e enriquecida do CNEFE (Cadastro
#' Nacional de Endereços para Fins Estatísticos) que foi criada para o uso deste
#' pacote.
#'
#' @param verboso A logical. Whether to display a download progress bar.
#' Defaults to `TRUE`.
#' @template verboso
#' @template cache
#'
#' @return Invisibly returns the path to the directory where the data was saved.
#' @return Retorna o caminho para o diretório onde os dados foram salvos.
#'
#' @examplesIf identical(tolower(Sys.getenv("NOT_CRAN")), "true")
#' download_cnefe(verboso = FALSE)
Expand All @@ -20,10 +19,10 @@ download_cnefe <- function(verboso = TRUE, cache = TRUE) {

all_files <- c(
"municipio_logradouro_numero_localidade.parquet", # 4 largest files ok 3
"municipio_logradouro_numero_cep_localidade.parquet", # 4 largest files ok 1
"municipio.parquet",
"municipio_cep.parquet",
"municipio_cep_localidade.parquet",
"municipio_logradouro_numero_cep_localidade.parquet", # 4 largest files ok 1
"municipio_localidade.parquet",
# "municipio_logradouro.parquet",
# "municipio_logradouro_numero_cep.parquet", # 4 largest files
Expand Down Expand Up @@ -96,11 +95,13 @@ perform_requests_in_parallel <- function(requests, dest_files, verboso) {
# related help page:
# https://testthat.r-lib.org/reference/local_mocked_bindings.html

if (verboso) { message_baixando_cnefe() }

httr2::req_perform_parallel(
requests,
paths = dest_files,
on_error = "continue",
progress = ifelse(verboso == TRUE, "Baixandos dados do CNEFE", FALSE)
progress = ifelse(verboso == TRUE, '', FALSE)
)
}

Expand Down
16 changes: 10 additions & 6 deletions R/geocode.R
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ geocode <- function(enderecos,
# check input
checkmate::assert_data_frame(enderecos)
checkmate::assert_logical(resultado_completo, any.missing = FALSE, len = 1)
checkmate::assert_logical(resolver_empates, any.missing = FALSE, len = 1)
checkmate::assert_logical(resultado_sf, any.missing = FALSE, len = 1)
checkmate::assert_logical(verboso, any.missing = FALSE, len = 1)
checkmate::assert_logical(cache, any.missing = FALSE, len = 1)
Expand Down Expand Up @@ -238,7 +239,8 @@ geocode <- function(enderecos,
# Disconnect from DuckDB when done
duckdb::dbDisconnect(con)

# lida com casos de empate
# casos de empate -----------------------------------------------

if (nrow(output_df) > n_rows) {

# encontra casos de empate
Expand All @@ -253,7 +255,6 @@ geocode <- function(enderecos,
by = tempidgeocodebr
]


output_df[empate == TRUE,
dist_geocodebr := ifelse(is.na(dist_geocodebr), 0, dist_geocodebr)
]
Expand All @@ -267,7 +268,6 @@ geocode <- function(enderecos,
# update casos de empate
output_df[, empate := ifelse(.N > 1, TRUE, FALSE), by = tempidgeocodebr]


# conta numero de casos empatados
ids_empate <- output_df[empate == TRUE, ]$tempidgeocodebr
n_casos_empate <- unique(ids_empate) |> length()
Expand All @@ -291,10 +291,14 @@ geocode <- function(enderecos,
output_df <- output_df[output_df[, .I[1], by = tempidgeocodebr]$V1]
output_df[, c('empate', 'contagem_cnefe') := NULL]

cli::cli_warn(
"Foram encontrados e resolvidos {n_casos_empate} casos de empate."
)
if (verboso) {
plural <- ifelse(n_casos_empate==1, 'caso', 'casos')
message(glue::glue(
"Foram encontrados e resolvidos {n_casos_empate} {plural} de empate."
))
}
}

}

# drop geocodebr temp id column
Expand Down
4 changes: 4 additions & 0 deletions R/message.R
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ message_standardizing_addresses <- function() {
geocodebr_message(c("i" = "Padronizando endere\u00e7os de entrada"))
}

message_baixando_cnefe <- function() {
geocodebr_message(c("i" = "Baixandos dados do CNEFE"))
}

message_looking_for_matches <- function() {
geocodebr_message(c("i" = "Geolocalizando endere\u00e7os"))
}
82 changes: 41 additions & 41 deletions R/utils.R
Original file line number Diff line number Diff line change
Expand Up @@ -105,15 +105,15 @@ add_precision_col <- function(con, update_tb = NULL){
query_precision <- glue::glue("
UPDATE {update_tb}
SET precisao = CASE
WHEN tipo_resultado IN ('en01', 'en02', 'en03', 'en04',
WHEN tipo_resultado IN ('dn01', 'dn02', 'dn03', 'dn04',
'pn01', 'pn02', 'pn03', 'pn04') THEN 'numero'
WHEN tipo_resultado IN ('ei01', 'ei02', 'ei03', 'ei04',
'pi01', 'pi02', 'pi03', 'pi04') THEN 'numero_aproximado'
WHEN tipo_resultado IN ('er01', 'er02', 'er03', 'er04',
'pr01', 'pr02', 'pr03', 'pr04') THEN 'logradouro'
WHEN tipo_resultado IN ('ec01', 'ec02') THEN 'cep'
WHEN tipo_resultado = 'eb01' THEN 'localidade'
WHEN tipo_resultado = 'em01' THEN 'municipio'
WHEN tipo_resultado IN ('da01', 'da02', 'da03', 'da04',
'pa01', 'pa02', 'pa03', 'pa04') THEN 'numero_aproximado'
WHEN tipo_resultado IN ('dl01', 'dl02', 'dl03', 'dl04',
'pl01', 'pl02', 'pl03', 'pl04') THEN 'logradouro'
WHEN tipo_resultado IN ('dc01', 'dc02') THEN 'cep'
WHEN tipo_resultado = 'db01' THEN 'localidade'
WHEN tipo_resultado = 'dm01' THEN 'municipio'
ELSE NULL
END;")

Expand Down Expand Up @@ -200,29 +200,29 @@ create_index <- function(con, tb, cols, operation, overwrite=TRUE){


get_key_cols <- function(case) {
relevant_cols <- if (case %in% c('en01', 'ei01', 'pn01', 'pi01') ) {
relevant_cols <- if (case %in% c('dn01', 'da01', 'pn01', 'pa01') ) {
c("estado", "municipio", "logradouro", "numero", "cep", "localidade")
} else if (case %in% c('en02', 'ei02', 'pn02', 'pi02')) {
} else if (case %in% c('dn02', 'da02', 'pn02', 'pa02')) {
c("estado", "municipio", "logradouro", "numero", "cep")
} else if (case %in% c('en03', 'ei03', 'pn03', 'pi03')) {
} else if (case %in% c('dn03', 'da03', 'pn03', 'pa03')) {
c("estado", "municipio", "logradouro", "numero", "localidade")
} else if (case %in% c('en04', 'ei04', 'pn04', 'pi04')) {
} else if (case %in% c('dn04', 'da04', 'pn04', 'pa04')) {
c("estado", "municipio", "logradouro", "numero")
} else if (case %in% c('er01', 'pr01')) {
} else if (case %in% c('dl01', 'pl01')) {
c("estado", "municipio", "logradouro", "cep", "localidade")
} else if (case %in% c('er02', 'pr02')) {
} else if (case %in% c('dl02', 'pl02')) {
c("estado", "municipio", "logradouro", "cep")
} else if (case %in% c('er03', 'pr03')) {
} else if (case %in% c('dl03', 'pl03')) {
c("estado", "municipio", "logradouro", "localidade")
} else if (case %in% c('er04', 'pr04')) {
} else if (case %in% c('dl04', 'pl04')) {
c("estado", "municipio", "logradouro")
} else if (case == 'ec01') {
} else if (case == 'dc01') {
c("estado", "municipio", "cep", "localidade")
} else if (case == 'ec02') {
} else if (case == 'dc02') {
c("estado", "municipio", "cep")
} else if (case == 'eb01') {
} else if (case == 'db01') {
c("estado", "municipio", "localidade")
} else if (case == 'em01') {
} else if (case == 'dm01') {
c("estado", "municipio")
}

Expand All @@ -231,23 +231,23 @@ get_key_cols <- function(case) {


all_possible_match_types <- c(
"en01", "ei01", # "pn01", "pi01",
"en02", "ei02", # "pn02", "pi02",
"en03", "ei03", # "pn03", "pi03",
"en04", "ei04", # #"pn04", "pi04", # too costly
"er01", # "pr01",
"er02", # "pr02",
"er03", # "pr03",
"er04", # # pr04", # too costly
"ec01", "ec02", "eb01", "em01"
"dn01", "da01", # "pn01", "pa01",
"dn02", "da02", # "pn02", "pa02",
"dn03", "da03", # "pn03", "pa03",
"dn04", "da04", # #"pn04", "pa04", # too costly
"dl01", # "pl01",
"dl02", # "pl02",
"dl03", # "pl03",
"dl04", # # pl04", # too costly
"dc01", "dc02", "db01", "dm01"
)

number_exact_types <- c(
"en01", "en02", "en03", "en04"
"dn01", "dn02", "dn03", "dn04"
)

number_interpolation_types <- c(
"ei01", "ei02", "ei03", "ei04"
"da01", "da02", "da03", "da04"
)

probabilistic_exact_types <- c(
Expand All @@ -256,20 +256,20 @@ probabilistic_exact_types <- c(
)

probabilistic_interpolation_types <- c(
"pi01", "pi02", "pi03", "pi04"
"pa01", "pa02", "pa03", "pa04"
)

exact_types_no_number <- c(
"er01", "er02", "er03", "er04",
"ec01", "ec02", "eb01", "em01"
"dl01", "dl02", "dl03", "dl04",
"dc01", "dc02", "db01", "dm01"
)

probabilistic_types_no_number <- c(
"pr01", "pr02", "pr03", "pr04"
"pl01", "pl02", "pl03", "pl04"
)

exact_types__no_logradouro <- c(
"ec01", "ec02", "eb01", "em01"
"dc01", "dc02", "db01", "dm01"
)


Expand Down Expand Up @@ -325,26 +325,26 @@ dt_haversine <- function(lat_from, lon_from, lat_to, lon_to, r = 6378137){

get_reference_table <- function(key_cols, match_type){

# key_cols = get_key_cols('ei03')
# key_cols = get_key_cols('da03')

# read corresponding parquet file
table_name <- paste(key_cols, collapse = "_")
table_name <- gsub('estado_municipio', 'municipio', table_name)

# reference table
if (match_type %like% 'en02|pn02|ei02|pi02|en03|pn03') {
if (match_type %like% 'dn02|pn02|da02|pa02|dn03|pn03') {
table_name <- "municipio_logradouro_numero_cep_localidade"
}

if (match_type %like% 'ei03|pi03|en04|ei04') {
if (match_type %like% 'da03|pa03|dn04|da04') {
table_name <- "municipio_logradouro_numero_localidade"
}

if (match_type %like% 'er02|pr02|er03|pr03') {
if (match_type %like% 'dl02|pl02|dl03|pl03') {
table_name <- "municipio_logradouro_cep_localidade"
}

if (match_type %like% 'er04') {
if (match_type %like% 'dl04') {
table_name <- "municipio_logradouro_localidade"
}

Expand Down
6 changes: 3 additions & 3 deletions README.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,10 @@ df <- geocodebr::geocode(

```

Cabe destacar aqui o papel de três argumentos da função `geocode()`:
- `resultado_completo`: serve para indicar se o usuário quer que o output contenha colunas extras, como o endereço encontrado, bairro encontrado etc.
Cabe também destacar aqui outros dois argumentos da função `geocode()`:

- `resolver_empates`: serve para indicar se o usuário quer que a função resolva automaticamente casos de empate, i.e. casos que o endereço de input do usuário pode ser referir a diferentes localidades na cidade (e.g. logradouros diferentes com mesmo nome mas em bairros distintos)
- `resultado_sf`: quando `TRUE`, o output retornado como um objeto espacial de classe `sf` simple feature.
- `resultado_sf`: quando `TRUE`, o output é retornado como um objeto espacial de classe `sf` simple feature.



Expand Down
17 changes: 8 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,15 +75,14 @@ df <- geocodebr::geocode(
)
```

Cabe destacar aqui o papel de três argumentos da função `geocode()`: -
`resultado_completo`: serve para indicar se o usuário quer que o output
contenha colunas extras, como o endereço encontrado, bairro encontrado
etc. - `resolver_empates`: serve para indicar se o usuário quer que a
função resolva automaticamente casos de empate, i.e. casos que o
endereço de input do usuário pode ser referir a diferentes localidades
na cidade (e.g. logradouros diferentes com mesmo nome mas em bairros
distintos) - `resultado_sf`: quando `TRUE`, o output retornado como um
objeto espacial de classe `sf` simple feature.
Cabe também destacar aqui outros dois argumentos da função `geocode()`:

- `resolver_empates`: serve para indicar se o usuário quer que a função
resolva automaticamente casos de empate, i.e. casos que o endereço de
input do usuário pode ser referir a diferentes localidades na cidade
(e.g. logradouros diferentes com mesmo nome mas em bairros distintos)
- `resultado_sf`: quando `TRUE`, o output é retornado como um objeto
espacial de classe `sf` simple feature.

Os resultados do **{geocodebr}** são classificados em seis categorias
gerais de `precisao`, dependendo do nível de exatidão com que cada
Expand Down
11 changes: 6 additions & 5 deletions inst/CITATION
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
citHeader("To cite geocodebr in publications use:")
citHeader("Para citar o pacote geocodebr em publicações, use:")

bibentry(
bibtype = "Manual",
title = "geocodebr: Download Data from Brazil's Population Census",
author = "Rafael H. M. Pereira [aut, cre]",
year = 2024,
version = "v0.1.0"
author = c( person("Rafael H. M. Pereira"),
person("Daniel Herszenhut")),
title = "geocodebr: Geolocalização de Endereços Brasileiros",
year = 2025,
version = "v0.1.0"
)
15 changes: 8 additions & 7 deletions man/download_cnefe.Rd

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

Loading

0 comments on commit df718ee

Please sign in to comment.