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
Os pacotes a seguir são necessários:
from datetime import datetime
import requests
import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
Pythonrequests: faz requisições à web.
pandas: manipulação de dados em dataframes.
geopandas: uma extensão do pandas para trabalhar com dados geográficos.
matplotlib: visualização de dados.
Extração dos dados
A fonte dos dados é o IBGE, que disponibiliza diversos mapas geográficos em formato .zip
. Uma lista de URLs desses arquivos é fornecida:
arquivos = {
'brasil': 'https://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2021/Brasil/BR/BR_Pais_2021.zip',
'rga':'https://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2021/Brasil/BR/BR_RG_Intermediarias_2021.zip',
'rgi':'https://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2021/Brasil/BR/BR_RG_Imediatas_2021.zip',
'rgme':'https://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2021/Brasil/BR/BR_Mesorregioes_2021.zip',
'rgmi':'https://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2021/Brasil/BR/BR_Microrregioes_2021.zip',
'uf': 'https://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2021/Brasil/BR/BR_UF_2021.zip',
'mun': 'https://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2021/Brasil/BR/BR_Municipios_2021.zip'
}
Python- brasil: Representa o contorno geográfico do Brasil como um todo. Oferece uma visão ampla das fronteiras do país.
- rga: Trata-se das Regiões Geográficas Intermediárias, que são agrupamentos de municípios definidos pelo IBGE e que, juntos, formam uma Região Geográfica Imediata.
- rgi: As Regiões Geográficas Imediatas são áreas dentro das Regiões Geográficas Intermediárias, definidas com base em centros urbanos, com objetivo de auxiliar na análise regional do país.
- rgme: Este arquivo refere-se às Mesorregiões, que são agrupamentos de municípios com características semelhantes. Elas são definidas pelo IBGE e são maiores que as Microrregiões.
- rgmi: Refere-se às Microrregiões, menores que as Mesorregiões, e são áreas que compartilham características socioeconômicas e geográficas similares.
- uf: Este arquivo representa as Unidades Federativas do Brasil, ou seja, os estados. Ideal para visualizações que focam nas divisões estaduais.
- mun: Contém dados geográficos de todos os municípios brasileiros. Esse é o arquivo mais detalhado e permite visualizações no nível municipal.
O código, então, percorre essa lista, fazendo uma requisição para cada URL e armazenando o conteúdo em um arquivo .zip
:
for i in arquivos:
arquivo = i+".zip"
remote_url = arquivos[i]
print("Coletando: "+remote_url)
data = requests.get(remote_url)
with open("./input/"+arquivo, 'wb') as file:
file.write(data.content)
PythonVisualização dos dados dos Estados Brasileiros
Neste exemplo, o arquivo uf.zip
, que contém dados das unidades federativas do Brasil, é lido.
df = gpd.read_file('zip://inputs/uf.zip')
df.head()
PythonPara uma visualização específica da região Nordeste, desenhando um gráfico, vamos utilizar o código abaixo:
df[df['NM_REGIAO']=='Nordeste'].plot()
PythonVisualização do mapa dos Municípios
Neste exemplo, o arquivo mun.zip,
que contém dados dos municípios do Brasil será lido e exibiremos tanto os municípios de Minas Gerais como também da cidade de Uberlândia.
df = gpd.read_file('zip://./input/mun.zip')
df.head()
Pythonmg = df[df['SIGLA']=='MG']
udi = df[(df['NM_MUN'] == 'Uberlândia')]
# Criar uma figura e dois eixos
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(15, 10))
# Plotar Minas Gerais no primeiro eixo
mg.plot(ax=ax1,column="NM_MUN", cmap="YlGnBu")
ax1.set_title('Minas Gerais')
# Plotar Uberlandia no segundo eixo
udi.plot(ax=ax2, edgecolor="k")
ax2.set_title('Uberlândia')
# Remover os eixos para uma melhor visualização
ax1.set_axis_off()
ax2.set_axis_off()
# Ajusta o espaçamento entre os mapas para que não se sobreponham
plt.tight_layout()
plt.show()
PythonExemplo mais complexo
Neste código iremos baixar os dados populacionais por municípios do IBGE e plotaremos o mapa de Minas gerais com uma escala de cores de acordo com a população.
Neste exemplo, qualquer município com mais de 500mil habitantes estará no topo da escala.
import requests
#https://servicodados.ibge.gov.br/api/docs/agregados?versao=3
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()
# Extraia a lista de municípios e informações
municipios_info = data[0]['resultados'][0]['series']
# Crie uma lista de dicionários com as informações desejadas de cada município
municipios_list = []
for info in municipios_info:
id = info['localidade']['id']
nome_completo = info['localidade']['nome']
municipio, estado = nome_completo.split(" - ")
populacao = int(info['serie']['2021'])
municipios_list.append({
'id': id,
'municipio': municipio,
'estado': estado,
'população': populacao
})
# Converta a lista de dicionários em um DataFrame
df = pd.DataFrame(municipios_list)
# Mesclando os dataframes com base no nome do município
merged = mg.set_index('CD_MUN').join(df.set_index('id'))
# Definindo um esquema de cores para o mapa de calor
vmin, vmax = 0, 500000
fig, ax = plt.subplots(1, figsize=(10, 6))
merged.plot(column='população', cmap='YlGnBu', linewidth=0.8, ax=ax, edgecolor='0.8', legend=False,vmin=vmin,vmax=vmax)
ax.set_title('População por município em Minas Gerais', fontdict={'fontsize': '15', 'fontweight' : '3'})
plt.show()
PythonEspero que tenham gostado do post, até o próximo