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.