Prenomes registrados no Brasil

Olá, pessoal. Beleza?

Vocês podem me recomendar uma base de dados com prenomes brasileiros? Eu tenho um arquivo que tem uma série de informações e eu quero manter nesse arquivo apenas os nomes próprios.

Por isso, pensei em arrumar um arquivo com nomes registrados no Brasil e pedir para manter nesse meu arquivo apenas o tal prenome brasileiro e a string seguinte (possivelmente sobrenome).

Ou vocês me sugerem outro caminho?

Obrigada.

2 Curtidas

O @turicas tem um dataset disso. Ele estudou no Brasil.IO a classificação de gênero em nomes brasileiros, com o uso do CENSO de 2010 (comenta se eu estiver falando besteira @turicas)

Então acho que você pode baixar os dados dele e isolar apenas os nomes brasileiros. Em Python:

import requests
import pandas as pd

payload = {}
headers= {}

# São 101 páginas na API
for n in range(1, 102):
    print(n)
    n = str(n)
    
    url = "https://brasil.io/api/dataset/genero-nomes/nomes/data?page=" + n
    
    response = requests.request("GET", url, headers=headers, data = payload)
    
    dados = response.json()
    
    df = pd.DataFrame(dados['results'])
    
    if n == 1:
        df_nomes = df.copy()
    else:
        df_nomes = df_nomes.append(df)

# Isola só a coluna de nome e cria novo dataframe
df_nomes_separa = df_nomes['first_name'].reset_index()
df_nomes_separa = df_nomes_separa[pd.notnull(df_nomes_separa['first_name'])]
df_nomes_separa.to_csv("nomes_brasil.csv", index=False)
2 Curtidas

Como o @reichaves comentou, no Brasil.IO tem um dataset que baixei do IBGE Nomes os dados, com classificação por gênero e desambiguação por grupos de nomes (ex: Tiago, Thiago, Thyago estão no mesmo grupo). Porém, não precisa fazer tantas requisições pra API: também é possível baixar em um arquivo só o dataset completo do Brasil.IO. Fiz uma função que baixa o arquivo (é um CSV compactado), descompacta e lê os registros - caso o arquivo já exista no seu HD, ele não baixa novamente (ou seja, vai ficar lento só na primeira vez que for rodar, nas demais, tendo o arquivo, ele só lê local). Você não precisa instalar nenhuma biblioteca extra (além do Python) para rodar esse código. Espero que seja útil:

import csv
import gzip
import io
import os
from urllib.request import urlopen


def get_names(filename):
    if not os.path.exists(filename):
        # File doesn't exist, so we download it from Brasil.IO
        data = urlopen("https://data.brasil.io/dataset/genero-nomes/nomes.csv.gz").read()
        with open(filename, mode="wb") as writer_fobj:
            writer_fobj.write(data)
    fobj = io.TextIOWrapper(gzip.open(filename, mode="rb"), encoding="utf-8")
    return list(csv.DictReader(fobj))


names = get_names("/tmp/nomes.csv.gz")
for name_data in names:
    if name_data["first_name"] == "ALVARO":
        print(name_data)

Esse script demorou 4.978s na primeira vez que executei e 0.792s nas demais.

Eu também criei um post no Blog do Brasil.IO mostrando em mais detalhes como classificar nomes por gênero usando esse dataset, comparando a utilização da API com a utilização acima (baixar o dataset completo): Classificando nomes por gênero usando dados públicos.

2 Curtidas

Obrigada pela ajuda, @reichaves e @turicas. Vou rodar por aqui e, mais para a frente, eu conto se deu tudo certo!

2 Curtidas

O @turicas e o @reichaves já comentaram, mas só adicionando uma outra alternativa na resposta deles, no R, tem o pacote genderBR (https://github.com/meirelesff/genderBR) - Acho que pode te ajudar também :slight_smile:

2 Curtidas