Skip to content

Instantly share code, notes, and snippets.

@jjesusfilho
Last active August 20, 2020 08:42
Show Gist options
  • Save jjesusfilho/f859e69f91eeb30b6751722fc649ecb3 to your computer and use it in GitHub Desktop.
Save jjesusfilho/f859e69f91eeb30b6751722fc649ecb3 to your computer and use it in GitHub Desktop.
Atribui sexo aos nomes completos ou não conforme base do IBGE br_gender
#' Atribui sexo a nomes com base no primeiro nome a partir da base do IBGE.
#'
#' @param nomes Vetor com os nomes completos ou não para realizar a busca.
#'
#' @return tibble com cinco colunas: primeiro_nome,f para feminino, m para masculino,sexo e nomes=para o nome
#' @export
#'
#' @examples
br_gender <- function(nomes) {
`%>%` <- magrittr::`%>%`
input<-nomes %>%
tibble::tibble(nomes=.) %>%
dplyr::mutate(primeiro_nome=stringr::str_extract(nomes,"\\w+"))
primeiro_nome<-unique(input$primeiro_nome)
url_f <-
paste0(
"https://servicodados.ibge.gov.br/api/v1/censos/nomes/basica?nome=",
primeiro_nome,
"&sexo=f"
) %>%
purrr::map(URLencode) %>%
unlist()
url_m <-
paste0(
"https://servicodados.ibge.gov.br/api/v1/censos/nomes/basica?nome=",
primeiro_nome,
"&sexo=m"
) %>%
purrr::map(URLencode) %>%
unlist()
cf<-crul::Async$new(
urls<-url_f
)
resf<-cf$get()
cm<-crul::Async$new(
urls<-url_m
)
resm<-cm$get()
resf<- purrr::map(resf,~{
.x$parse() %>%
stringr::str_match_all("(?:\\:)(\\d+)") %>%
unlist() %>%
magrittr::extract(6)
}) %>%
unlist()
resm<- purrr::map(resm,~{
.x$parse() %>%
stringr::str_match_all("(?:\\:)(\\d+)") %>%
unlist() %>%
magrittr::extract(6)
}) %>%
unlist()
tibble::tibble(primeiro_nome = primeiro_nome,f= resf,m=resm) %>%
purrr::modify_at(2:3, as.integer) %>%
tidyr::replace_na(list(f = 0, m = 0)) %>%
dplyr::mutate(sexo = dplyr::case_when(f > m ~ "feminino",
f < m ~ "masculino",
TRUE ~ "desconhecido")) %>%
dplyr::right_join(input,by="primeiro_nome")
}
@jjesusfilho
Copy link
Author

The classification cutoff is 50%. You can change that if you want after downloading the gender's names.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment