Para aqueles interessados em visualizar mapas geográficos utilizando Python e manipular dados territoriais do Brasil, este tutorial oferece uma abordagem passo a passo. O objetivo é extrair e visualizar os dados geográficos disponibilizados pelo IBGE.

Entendendo os pacotes utilizados


from datetime import datetime
import requests
import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
  • requests: faz requisições web.
  • pandas: manipulação de dados.
  • geopandas: extensão do pandas para dados geográficos.
  • matplotlib: visualização gráfica.

Extração dos dados

Os arquivos geográficos do IBGE são baixados diretamente via HTTP:


arquivos = {
    'brasil': 'https://geoftp.ibge.gov.br/.../BR_Pais_2021.zip',
    'rga':'https://geoftp.ibge.gov.br/.../BR_RG_Intermediarias_2021.zip',
    'rgi':'https://geoftp.ibge.gov.br/.../BR_RG_Imediatas_2021.zip',
    'rgme':'https://geoftp.ibge.gov.br/.../BR_Mesorregioes_2021.zip',
    'rgmi':'https://geoftp.ibge.gov.br/.../BR_Microrregioes_2021.zip',
    'uf': 'https://geoftp.ibge.gov.br/.../BR_UF_2021.zip',
    'mun': 'https://geoftp.ibge.gov.br/.../BR_Municipios_2021.zip'
}

Cada arquivo representa um nível distinto de divisão territorial:

  • brasil: contorno do país.
  • rga: Regiões Geográficas Intermediárias.
  • rgi: Regiões Geográficas Imediatas.
  • rgme: Mesorregiões.
  • rgmi: Microrregiões.
  • uf: Unidades Federativas (estados).
  • mun: Municípios (nível mais detalhado).

for i in arquivos:
    arquivo = i + ".zip"
    print("Coletando:", arquivos[i])
    data = requests.get(arquivos[i])
    with open("./input/"+arquivo, "wb") as file:
        file.write(data.content)

Visualização dos Estados Brasileiros


df = gpd.read_file('zip://input/uf.zip')
df.head()

Filtrando somente a região Nordeste:


df[df['NM_REGIAO']=='Nordeste'].plot()

Visualização dos Municípios


df = gpd.read_file('zip://input/mun.zip')
mg = df[df['SIGLA'] == 'MG']
udi = df[df['NM_MUN'] == 'Uberlândia']

fig, (ax1, ax2) = plt.subplots(1,2, figsize=(15,10))
mg.plot(ax=ax1, column="NM_MUN", cmap="YlGnBu")
udi.plot(ax=ax2, edgecolor="k")
ax1.set_title('Minas Gerais')
ax2.set_title('Uberlândia')
ax1.set_axis_off()
ax2.set_axis_off()
plt.tight_layout()
plt.show()

Exemplo mais complexo

Obtendo dados populacionais via API do IBGE e mesclando com os dados geográficos:


url = "http://servicodados.ibge.gov.br/api/v3/agregados/6579/periodos/2021/variaveis/9324?localidades=N6[N3[31]]"
response = requests.get(url, verify=False)
data = response.json()

municipios_info = data[0]['resultados'][0]['series']
municipios_list = []

for info in municipios_info:
    id = info['localidade']['id']
    nome = info['localidade']['nome']
    municipio, estado = nome.split(" - ")
    populacao = int(info['serie']['2021'])
    municipios_list.append({
        'id': id,
        'municipio': municipio,
        'estado': estado,
        'população': populacao
    })

df_pop = pd.DataFrame(municipios_list)
merged = mg.set_index('CD_MUN').join(df_pop.set_index('id'))

Plotando mapa temático:


vmin, vmax = 0, 500000
fig, ax = plt.subplots(figsize=(10,6))
merged.plot(column='população', cmap='YlGnBu', linewidth=0.8,
            ax=ax, edgecolor='0.8', vmin=vmin, vmax=vmax)
ax.set_title('População por município em Minas Gerais')
plt.show()

Conclusão

Com Python, GeoPandas e dados públicos do IBGE, é possível construir visualizações geográficas poderosas, indo desde análises estaduais até mapas temáticos complexos.

Visualização de Mapas do IBGE com Python e Jupyter