Mapa Choropleth usando Dados Abertos!
Fazer um mapa coroplético usando o Geopandas, Pandas e Matplotlib.
Ao pesquisar sobre visualização de dados usando mapas, encontrei pouco conteúdo escrito em português, esse é o principal motivo de você estar lendo esse post! Então vamos ao que interessa…
Não pretendo entrar em detalhes sobre o conceito desse tipo de mapa, mas em resumo um mapa coroplético é um tipo de mapa temático, que representa um certo valor estatístico por meio de áreas simbolizadas por cores, sombreamentos ou padrões que tem uma relação de causa com o valor observado. Bem, passado essa parte de conceito vamos iniciar nosso jupyter notebook com o google colab!
Importando os pacotes
O Pandas é uma biblioteca Python para manipulação e análise de dados. O Matplotlib vai ser nossa biblioteca para visualização dos dados, e por fim, o GeoPandas, que é um projeto de código aberto para facilitar o trabalho com dados geoespaciais em python.
“Uma dica rápida.. haha! Caso esteja usando o google colab, você terá que instalar a biblioteca geopandas, basta colocar !pip install geopandas antes de fazer os imports”
Obtenção do dados
Vamos observar os dados do bolsa família, o dataset foi obtido através do portal da transparência:
http://www.portaltransparencia.gov.br/download-de-dados/bolsa-familia-pagamentos/
No entanto, já fiz um tratamento nos dados para obter o valor médio recebido por beneficiário em cada cidade da Região Integrada do Distrito Federal (RIDE). É possível encontrar os dados em uma diretório no drive que vou disponibilizar para você poder fazer o download dos arquivos e acompanhar esse tutorial.
Outro conjunto de dados que vamos precisar são arquivos shapefiles (shp), esse formato de arquivo nos oferece dados geoespaciais relativo a área que vamos plotar. Esse arquivo (e todos os outros que o acompanha) também está no drive.
https://drive.google.com/drive/folders/19U4ogYbIvPSDySXDqQqDLqsfdlOOYYUT?usp=sharing
Agora que você já sabe onde conseguir os dados, vamos traze-los para o nosso jupyter notebook. Lembrando que como estou usando o google colab, todos os arquivos que vou usar devem estar presentes no google drive.
#Lendo os dados e armazenando em um dataframe (df)df = pd.read_csv(‘/content/drive/My Drive/Colab Notebooks/Tutorial Choropleth/dataset.csv’)
“Com um df.head() você poderá observar algumas linhas do arquivo”
#Lendo arquivo shp com as cidades da RIDEgdf = gpd.read_file('/content/drive/My Drive/Colab Notebooks/Tutorial Choropleth/dadosRide.shp')
Juntando Tudo!
Até agora, temos um dataframe pandas com a coluna que queremos observar (VALOR_PARCELA) e um dataframe geográfico com uma coluna geometry que será necessesária para representar os municipios da RIDE.
Essas informações precisam estar presentes em um único dataframe geográfico, por isso vamos fazer algumas modificações.
1. Juntando os dados em um só Dataframe
geodata = pd.merge(left=df, right=gdf,left_on='NOME_MUNICIPIO', right_on='NM_MUNICIP', how='inner')
Podemos observar que temos duas colunas com a mesma informação (NOME_MUNICIPIO e NM_MUNICIP). Podemos então remover uma dessas colunas.
#Removendo a coluna NM_MUNICIPdel geodata['NM_MUNICIP']
Nosso dataframe então ficou asssim:
2. Mudando o tipo do dataframe
O dataframe que obtemos não é do tipo geográfico então podemos ter algum problema com isso, vamos então trasformá-lo em um GeoDataframe.
#Criação do geodfgeodf = gpd.GeoDataFrame(geodata)
Enfim a visualização
Para termos um melhor entendimento do que estamos obsevando, vamos analisar os valores recebidos em um determinado mês. Para isso vamos usar a função loc e especificar qual mês queremos usar. A coluna MES_REFERENCIA nos oferece o ano (primeiros 4 digitos) e o mês (últimos dois digitos) em que determinado beneficiário recebeu o seu benefício.
geodf.loc[geodf['MES_REFERENCIA'] == 201402].plot(
figsize=(12,9),
edgecolor='black',column='VALOR_PARCELA',
legend=True,
legend_kwds={'label': "Valor médio da darcela",'orientation':"vertical" })plt.show()
Por fim usamos o matplotlib para plotarmos nosso gráfico, nesse caso eu defini um tamanho para a imagem (figsize), defini a cor das linhas que representa as fronteiras entre as cidades (edgecolor=’black’). E como queremos observar o valor médio da parcela recebida em cada cidade, temos que passar essa variável como parâmetro (column=’VALOR_PARCELA’).
E voilà! Temos a nossa representação!
Bom pessoal, é isso. Esse foi meu primeiro post aqui no medium, então me desculpe qualquer erro que eu possa ter cometido. Quaisquer sugestões deixem nos comentários.