Testes - API IBGE
Como todos já devem saber, alguns órgãos públicos constumam disponibilizar seus dados para uma consulta aberta. Sendo assim, resolvi…
Testes - API IBGE
Como todos já devem saber, alguns órgãos públicos constumam disponibilizar seus dados para uma consulta aberta. Sendo assim, resolvi explorar a API do IBGE onde constam os nomes registrados no Brasil de 1930 a 2010. *Este não é um artigo de alta complexidade e visa apenas expor algumas práticas e possibilidades de exploração dos dados extraídos via API.

⚠️Disclaimer
Essa é uma API pública com dados coletados no Censo de 2010, onde os nomes são classificados por década de nascimento. Para consultar a documentação completa, acesse: *https://servicodados.ibge.gov.br/api/docs/nomes?versao=2#api-faq*
Etapa 1
Nesta etapa, exportei as bibliotecas que julguei necessárias para a extração, tratamento e exibição dos dados.
import pandas as pd
import requests
import duckdb
import seaborn as sns
import matplotlib.pyplot as plt
Já para a requisição, utilizei o método “GET” para referenciar o link da API e os parâmetros de retorno escolhidos conforme sugere a documentação. *Neste teste, escolhi os nomes “Enzo” e “Romário”, pois ambos os nomes apresentaram uma certa popularidade em períodos diferentes. Um dos objetivos é entender a curva temporal de registro entre esses dois nomes.
url_e = 'https://servicodados.ibge.gov.br/api/v2/censos/nomes/enzo?sexo=M'
response_e = requests.request('GET', url = url_e)
url_r = 'https://servicodados.ibge.gov.br/api/v2/censos/nomes/romário?sexo=M'
response_r = requests.request('GET', url = url_r)
Após as requisições retornarem a resposta desejada, tranformei o retorno em “json” e aninhei essa etapa com a conversão do resultado para um “dataframe”. Onde será possível manipular com mais facilidade nas próximas etapas. *Vale destacar que no nome das variáveis, estou utilizando a letra “e” para referenciar as variáveis referentes ao nome “Enzo” e “r” para “Romário”.
e_df = pd.DataFrame(response_e.json()[0]['res'])
r_df = pd.DataFrame(response_r.json()[0]['res'])
Etapa 2
Com os dataframes prontos, dei início a etapa de tratamento utilizando o SQL via “duckdb”. Optei por padronizar o range de décadas e as colunas de nomes para obtermos uma visualização mais amigável da tabela final e além disso, utilizei a coluna de frequência como chave para fazer o join entre os dois dataframes.
select
case
when a.periodo = '1930[' then '1930'
when a.periodo = '[1930,1940[' then '1930 a 1940'
when a.periodo = '[1940,1950[' then '1940 a 1950'
when a.periodo = '[1950,1960[' then '1950 a 1960'
when a.periodo = '[1960,1970[' then '1960 a 1970'
when a.periodo = '[1970,1980[' then '1970 a 1980'
when a.periodo = '[1980,1990[' then '1980 a 1990'
when a.periodo = '[1990,2000[' then '1990 a 2000'
when a.periodo = '[2000,2010[' then '2000 a 2010'
else 'Outros' end as "Período"
,a.frequencia as 'Enzo'
,b.frequencia as 'Romário'
,(a.frequencia + b.frequencia) as 'Total Registros'
from e_df as a
left join r_df as b on a.periodo = b.periodo
Como resultado, obtivemos a tabela abaixo:

Fig.1: Resultado da Query_1
Etapa 3
Para enxergarmos a curva evolutiva com mais clareza, utilizei um gráfico de linhas do “matplotlib” diferenciando as segmentações, conforme mostra o código abaixo:
sns.set_style("white")
cores = {
'Enzo': '#4774de',
'Romário': '#3ee9e6'
}
query_long = query_1.melt(
id_vars='Período',
value_vars=['Enzo', 'Romário'],
var_name='Registros',
value_name='Valor'
)
sns.lineplot(
data=query_long,
x='Período',
y='Valor',
hue='Registros',
palette = cores
)
plt.xlabel('')
plt.ylabel('')
plt.xticks(rotation=60)
plt.show()
Como resultado, obtivemos a visão da Fig.2, que evidencia que no intervalo de 2000 a 2010, houve um aumento substâncial de registros com o nome “Enzo”, no entanto, de 1990 a 2000, os registros com o nome “Romário”, apresentaram um crescimento bem semelhante. Podemos atribuir essa popularidade, ao título da copa do mundo de 1994.

Fig.2: Evolutivo de registros
Ainda que o crescimento de registros com o nome “Enzo” seja bem expressivo. No cenário geral comparativo, a proporção de “Romários” ainda representava a maior fatia dos registros até 2010, conforme mostra a Fig.3:

*Para a Fig.3 utilizei a mesma estrutura da query anterior, porém o agrupamento foi feito pela função de agregação “sum()”.
Projeto Completo
메타데이터
- post_id
- c66b07837d13
- slug
- testes-na-api-do-ibge-c66b07837d13
- url
- https://medium.com/@rafael.93rj/testes-na-api-do-ibge-c66b07837d13
- canonical_url
- https://medium.com/@rafael.93rj/testes-na-api-do-ibge-c66b07837d13
- author_url
- https://medium.com/@rafael.93rj
- status
- ok
- fetched_at
- 2026-07-13 06:23:13