9. Mapas

O principal pacote para criar mapas em Python é o geopandas.

Se essa é a primeira vez que você usa o pacote, será necessário instalá-lo.

Para instalar a primeira vez, você pode utilizar o seguinte comando:

!pip install geopandas

Com o geopandas instalado, vamos primeiro importar o pacote e em seguida abrir os dados:

[1]:
import geopandas

Os arquivos de mapas são organizados no formato shape. Para o Brasil, o Instituto Brasileiro de Geografia e Estatística (IBGE), disponibiliza diversos arquivos desse tipo (https://www.ibge.gov.br/geociencias/organizacao-do-territorio/malhas-territoriais/15774-malhas.html?=&t=acesso-ao-produto).

Vamos usar o arquivo para o Brasil, por Unidades da Federação. Você pode encontrar esses dados AQUI. Baixe a pasta, descompacte os arquivos e salve todos os arquivos no seu diretório de trabalho, dentro de uma mesma pasta com o nome BR_UF_2021.

Com os arquivos salvos no seu diretório de trabalho, agora sim, podemos fazer a leitura dos dados:

[2]:
UF = geopandas.read_file("BR_UF_2021")

UF.head()
[2]:
CD_UF NM_UF SIGLA NM_REGIAO geometry
0 11 Rondônia RO Norte POLYGON ((-62.86662 -7.97587, -62.86017 -7.982...
1 12 Acre AC Norte POLYGON ((-73.16550 -7.34166, -73.05480 -7.381...
2 13 Amazonas AM Norte POLYGON ((-67.32609 2.02971, -67.31682 2.00125...
3 14 Roraima RR Norte POLYGON ((-60.20051 5.26434, -60.19828 5.26045...
4 15 Pará PA Norte MULTIPOLYGON (((-46.43676 -1.01905, -46.43723 ...

Agora que o shape file já foi lido, vamos primeiro juntar as informações sobre exportações, da seção anterior, com as informações desse arquivo.

Novamente, precisamos importar o pacote pandas e os dados da seção anterior:

[3]:
import pandas as pd

dados = pd.read_excel("EXP2019_ComexStat.xlsx")

Observe que a informação em comum nas duas bases de dados é a sigla de UF:

[4]:
dados.head()
[4]:
ano uf exp
0 2019 AC 0.032853
1 2019 AL 0.319089
2 2019 AM 0.731092
3 2019 AP 0.261368
4 2019 BA 8.168158

Para unir as duas bases de dados, vamos usar o método .merge(), conforme o código abaixo:

[5]:
UF = UF.merge(dados, left_on='SIGLA', right_on='uf')

Observe que estamos atualizando a base do mapa, chamada UF, acrescentando os dados da base importada com o nome dados, sendo que os dados serão adicionados considerando a coluna SIGLA da base de dados da esquerda (i.e., UF), com a coluna uf da base de dados da direita (i.e., dados).

Para visualizar os dados após a integração das bases, basta reabriar o início da base original:

[6]:
UF.head()
[6]:
CD_UF NM_UF SIGLA NM_REGIAO geometry ano uf exp
0 11 Rondônia RO Norte POLYGON ((-62.86662 -7.97587, -62.86017 -7.982... 2019 RO 1.303910
1 12 Acre AC Norte POLYGON ((-73.16550 -7.34166, -73.05480 -7.381... 2019 AC 0.032853
2 13 Amazonas AM Norte POLYGON ((-67.32609 2.02971, -67.31682 2.00125... 2019 AM 0.731092
3 14 Roraima RR Norte POLYGON ((-60.20051 5.26434, -60.19828 5.26045... 2019 RR 0.157707
4 15 Pará PA Norte MULTIPOLYGON (((-46.43676 -1.01905, -46.43723 ... 2019 PA 17.841239

O jeito mais simples de visualizar os dados é utilizando o método .plot() do geopandas:

[7]:
UF.plot("exp", legend=True)
[7]:
<AxesSubplot:>
_images/09Mapas_14_1.png

Além da opção de legenda, utilizada no exemplo anterior, o método plot()possui diversos outros argumentos.

Como no exemplo abaixo, você pode definir que os valores (no nosso caso, os valores de exportações) serão divididos em quantis (scheme=‘quantiles’), que o número de grupos será quatro (k=4), que as cores do mapa serão tons de verde (cmap=‘Greens’), que a cor da borda das divisões (nesse caso, entre UFs) será cinza (edgecolor=‘grey’), e que a figura terá um tamanho de 15 por 10 cm (figsize=(15, 10)).

Outros argumentos podem ser consultados na documentação do geopandas.

[8]:
UF.plot(
    "exp",
    legend=True,
    scheme='quantiles',
    k=4,
    cmap='Greens',
    edgecolor='grey',
    figsize=(15, 10)
)
[8]:
<AxesSubplot:>
_images/09Mapas_16_1.png

Assim como o pandas, o geopandas está usando o matplotlib no background. Mais opções de cores podem ser consultadas em: https://matplotlib.org/2.0.2/users/colormaps.html

Para salvar o mapa como png, precisamos colocá-lo como um subplot do matplotlib como mostra o exemplo a seguir:

[9]:
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(15,10))
UF.plot(
    "exp",
    legend=True,
    cmap='Greens',
    scheme='quantiles',
    figsize=(15,10),
    edgecolor='grey',
    ax=ax
)
fig.savefig("Exportações2019.png")
_images/09Mapas_18_0.png

Uma outra forma de visualizar os dados é por meio do método explore(), que cria gráficos interativos, como nesse exemplo:

[10]:
UF.explore(
    "exp",
    legend=True,
    cmap='summer'
)
[10]:
Make this Notebook Trusted to load map: File -> Trust Notebook