Predizendo sexo a partir de nomes próprios com o genderBR
Com um exemplo de classificação de autores de mais de 200 mil teses defendidas no Brasil
Para quem trabalha com bases de dados públicas, não é incomum encontrar
o seguinte problema: ter disponível em alguma coluna o nome de várias
pessoas, mas não a informação sobre o sexo delas. Para lidar com esse
problema, há alguns meses desenvolvi um pacote para R
, o
genderBR,
que oferece um método simples para resolvê-lo: usando dados do Censo
de 2010 do IBGE, ele inferie o
sexo de uma pessoa a partir de seu nome próprio (como descrito em
maiores detalhes
aqui).
Comparado à tarefa manual de classificar sexo a partir desses nomes, o
método não só é infinitamente mais rápido, mas também evita erros de
imputação, tornando replicável qualquer pesquisa que o use.
Apesar da utilidade do pacote para resolver esse problema, ele fazia
isso com algumas limitações. A principal delas é a de tempo gasto na
tarefa, às vezes na casa de horas ou dias. Basicamente, isso ocorre por
causa da forma com que a principal função do pacote, get_gender
, faz
predições: para cada nome solicitado, ela envia uma requisição ao
serviço online de nomes do IBGE (daqui para frente,
API),
recebe as informações necessárias e, com base nelas, calcula a
probabilidade desse nome pertencer a um a homem ou a uma mulher. Como
esse processo consome cerca de 0.1 segundos, as consequências são
inevitáveis: para 10 mil nomes, a função pode facilmente rodar por mais
de 15 horas.
A partir da recém lançada versão do pacote, contudo, isso deixou de ser
um problema. Aproveitando que o IBGE divulgou a base de dados que
alimenta a API do serviço de
nomes,
agora o genderBR
dispõe internamente dessas informações.
Especificamente, a função get_gender
ganhou um argumento opcional,
internal
, que permite escolher entre usar os dados internos do pacote
(internal = TRUE
, que agora é o padrão) ou requisitar os dados da API
(internal = FALSE
). Optando pelo primeiro, o processo de predizer
nomes consome poucos segundos – e isso mesmo em bases com milhares ou
milhões de nomes próprios.[1]
Como usar o genderBR
O primeiro passo para usar o genderBR
é simples: com o R
aberto, só
é necessário executar install.packages("genderBR")
para instalá-lo.
Feito isso, predizer sexo a partir de nomes próprios é uma questão de
chamar a função get_gender
:
# Carrega o pacote
library(genderBR)
# Prediz o sexo de oito nomes
nomes <- c("Guilherme", "Maria", "Ana", "Arnaldo", "Martha", "Carlos", "Almir", "Cida")
get_gender(nomes)
## [1] "Male" "Female" "Female" "Male" "Female" "Male" "Male" "Female"
Mais útil que isso, é possível predizer o sexo de nomes contidos numa base de dados, adicionando o resultado dessa predição numa nova variável. Exemplo:
base <- data.frame(nome = c("Ana Maria", "Roberto Silva", "Marcia Campos"),
idade = c(25, 42, 33),
grupo = c("A", "A", "B")
)
base$sexo <- get_gender(base$nome)
base
## nome idade grupo sexo
## 1 Ana Maria 25 A Female
## 2 Roberto Silva 42 A Male
## 3 Marcia Campos 33 B Female
Nos dois casos, as predições usam os dados internos ao pacote. Para
desabilitar essa opção, fazendo requisições diretamente à API do IBGE,
basta declarar como falso o argumento internal
: get_gender(nomes,
internal = FALSE)
. Como mostro na sequência, entretanto, usar essa
opção consome muito mais tempo.
O desempenho da nova versão do genderBR
Quão rápido é predizer o sexo usando os dados internos do pacote
genderBR
? A título de ilustração, podemos comparar o tempo gasto para
predizer o sexo daqueles 8 nomes do primeiro exemplo usando a API do
IBGE, i.e. internal = FALSE
, e os dados internos do pacote, internal
= TRUE
. Repeti essa operação 100 vezes com cada método, registrando o
tempo gasto para concluir a predição em cada uma. Resultado: com os
dados internos, o pacote leva cerca de 0.06 segundos para concluir a
predição dos 8 nomes, em média; já usando a API do IBGE, o tempo
necessário gira em torno de 1.4 segundos. Em outras palavras, o novo
método adicionado ao pacote é cerca de 23 vezes mais rápido nesse
exemplo.
Na verdade, usar os dados internos é ainda mais rápido se levarmos em
conta as pausas entre requisições, aplicadas pela função get_gender
quando o número de nomes a serem consultados na API do IBGE excede 100.
Além disso, os ganhos em escala do método interno são imensos porque ele
consome quase o mesmo tempo para predizer o sexo de 100, 1000, ou 10000
nomes. Isso, de novo, não acontece ao usar a opção internal = FALSE
para extrair dados da API do IBGE.
Em resumo, predizer sexo a partir de nomes próprios com o genderBR
ficou extremamente mais rápido.
Exemplo: sexo de autores de teses de Doutorado no Brasil
Para exemplificar os usos do pacote genderBR
, classifiquei o sexo de
autores(as) de todas as 221990 teses de Doutorado defendidas no Brasil
entre 1987 e 2016. Esses dados vêm do Banco de Teses e Dissertações da
Capes,
disponíveis no novo portal de dados
abertos da instituição – onde
também estão outros sobre a composição dos programas de pós-graduação
no país, ou sobre a produção acadêmica de doscentes e discentes, por
exemplo.
O importante a notar é que a Capes disponibiliza apenas informações
sobre instituição, área de avaliação e nome dos autores das teses
defendidas no período, mas não o sexo de quem as defendeu.[2] É aí que
entra o genderBR
: usando os dados internos do pacote, predizer o sexo
para todos os nomes na base leva menos de 5 segundos. Com essa
informação, podemos criar um gráfico como esse.
O gráfico acima ilustra bem o trabalho do genderBR
: ele classificou a
imensa maioria dos nomes como pertencendo a homens ou mulheres (96% do
total). Ainda assim, como os dados disponibilizados pelo IBGE incluem
apenas nomes com mais de 20 ocorrências no país, alguns na base da
Capes, cerca de 3% deles, foram classificados como Desconhecido, o que
indica que não encontraram correspondência. Em outros casos, nomes
classificados podem ser tanto de homens quanto de mulheres – como Ariel,
Darci, Noá e Elir, por exemplo –, dificultando a tarefa de atribuir sexo
(os Unissex do gráfico). De qualquer forma, como é possível ver, ambos
os casos são residuais.
Voltando ao gráfico, dá para notar que mulheres defenderam cerca de metade das teses registradas no banco da Capes no período. Entretanto, como o número de defesas era pequeno até os anos 2000 – em 1987, por exemplo, apenas 939 teses defendidas foram registradas, e mesmo em 2000 esse número ainda era de apenas 5344 –, acompanhar o crescimento absoluto, ano a ano, dessa série dificulta detectar tendências. Por essa razão, podemos focar apenas na percentagem de teses defendidas por mulheres, excluindo da base pessoas com sexo classificado como Desconhecido ou Unissex.
A tendência geral, agora, é clara: com o passar do tempo, mulheres aumentaram sua participação na defesa de teses no Brasil.
Defesas de tese por grandes áreas
O mesmo padrão, entretanto, certamente varia entre áreas: pode ser que mulheres defendam mais teses em algumas grandes áreas da Capes, menos em outras. Como o Banco de Teses contém variáveis indicando essas grandes áreas, verificar isso é relativamente simples.
Por um lado, mulheres defendem mais teses no Brasil, ao menos nos últimos anos. Por outro lado, é possível ver que essa participação é desigual entre grandes áreas da Capes: mulheres defendem mais teses nas Ciências Biológicas, nas Humanas e nas Letras; homens, entretanto, estão sobrerrepresentados nas áreas de Engenharia e Exatas. O gradual aumento no número de mulheres defendendo teses não ocorreu nessas duas últimas.
Defesas de tese por área de avaliação
Enquanto que classificar o sexo de autores(as) de teses por grande área revela um cenário detalhado da participação de mulheres, é possível ir além com os dados da Capes. Em especial, podemos usar a classificação por área de avaliação, que é usada para classificar os programas de pós-graduação no país. Aqui, vou fazer isso para algumas dessas: para a Ciência Política, separadamente, e em algumas outras, mais próximas dessa. Os resultados, também aqui, mostram que mulheres participam mais na produção e defesa de teses em algumas áreas; já em outras, inclusa a Ciência Política, a presença delas fica aquém – às vezes muito aquém – da de homens.
Final
Classificar por sexo autores(as) de teses no Brasil é apenas uma das
utilidades do genderBR
. Usando as mesmas fontes de dados, na verdade,
é possível investigar as causas da variação na participação de homens e
mulheres na produção de teses; mapear a distribuição de docentes e
discentes por sexo em todos os programas de pós-graduação; ou, ainda,
aplicar o mesmo método para classificar qualquer outro tipo de produção
por sexo do(a) autor(a). Isso tudo, note-se, apenas com os dados da
Capes, o que está longe de esgotar todas as aplicações possíveis do
pacote.
A mensagem mais geral desse texto, entretanto, é outra: com a nova
atualização, usar o genderBR
para predizer sexo a partir de nomes
próprios ficou muito mais rápido. Como o exemplo anterior indica, isso
pode ser feito em poucos segundos mesmo em bases de dados grandes;
quando os nomes próprios estão formatados de diferentes maneiras; e
levando em conta diferenças no uso de nomes por sexo entre estados (ver
aqui) – nesse
caso, usando a API do IBGE. Como já discuti no
texto da
versão anterior do pacote, as predições do genderBR
, além disso, são
bastante precisas: nos testes que realizei, o método prediz o sexo a
partir de um nome de forma correta mais de 99% das vezes, além de
produzir poucos missings, como no caso do exemplo anterior. Tudo
somado, o genderBR
não só é incomparavelmente mais rápido do que
classificar manualmente sexo a partir de nomes, mas também mais
recomendado para evitar erros de imputação e contribuir para a
replicabilidade de qualquer pesquisa que o use.
Dados e cógido
Os dados e o código usados nesse posto podem ser encontrados
aqui. Como o pacote
genderBR
é open source, o que significa que qualquer um pode consultar ou trabalhar em
cima do seu código, disponível no
GitHub. Críticas e sugestões
são bem-vindos.
-
A única ressalva, aqui, é que esse método só está disponível quando outro argumento,
state
, não é declarado. Com isso, apenas pela API do IBGE é possível obter predições considerando variação entre estados. -
Os dados do Banco de Teses e Dissertações da Capes têm muitos problemas, como missings, campos preenchidos de forma incorreta, incosistência de classificação em alguns anos, entre outros. Como meu objetivo é apenas exemplificar o pacote, fiz uma limpeza superficial na base. Os dados e o código usados nesse post, de qualquer forma, podem ser encontrados aqui.