← Back to list

Testes - API IBGE

Como todos já devem saber, alguns órgãos públicos constumam disponibilizar seus dados para uma consulta aberta. Sendo assim, resolvi…

Rafael Nascimento · 2026-02-17 16:48 · 0 claps · 2.9 min read
#ibge #data-analysis #data-visualization #análise-de-dados #python
Open on Medium ↗
Wiki topics: VIS · Visual & Graphic Design

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

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

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

https://github.com/Rafael93rj/dados_api_ibge


메타데이터
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