MANIPULANDO DADOS GEOESPACIAIS EM PYTHON

Lucas Travi
geo.tech
Published in
5 min readFeb 7, 2020
Renda média domiciliar por setor censitário visualizada no OnMaps

Cada vez mais as empresas estão fazendo uso de dados na tomada de decisões. Todavia, fazer esta análise de forma a levarmos em consideração informações de geolocalização poderá trazer mais valor à análise, na mesma medida que a torna mais desafiadora.

Aqui no time de Insights da Geofusion, utilizamos Python e suas bibliotecas para manipular e enriquecer geometrias com dados, para gerar valor tanto para o nosso principal produto, o OnMaps, quanto para projetos e análises complexas em conjunto do nosso time de consultoria.

Neste artigo, iremos demonstrar algumas análises simples, mas poderosas, que podem auxiliar cientistas de dados a trabalharem com dados geoespaciais.

O notebook com os códigos e análise estão no github da Geo e as geometrias e dados sociodemográficos podem ser encontrados no IBGE!

O QUE É WKT?

Well-known text (WKT) é uma linguagem de marcação de texto usada para representar objetos vetoriais em um mapa.

WKT pode ser utilizada para representar diversos tipos de objetos geométricos. Os mais utilizados aqui no time são pontos, linhas (linestring e multilinestring), polígonos e multipolígonos.

Geometrias primitivas, fonte: Wikipedia
Geometrias multipartes, fonte: Wikipedia

Usaremos estas geometrias ao associá-las a dados sociodemográficos ou a uma quantidade de POIs (Points of Interest).

Para demonstrar como manipular dados geoespaciais em Python, usaremos um exemplo bem simples: associaremos as geometrias de cada setor censitário da cidade de São Paulo à sua renda nominal, quantidade de domicílios e renda média — sendo esta última definida como o resultado da divisão da renda nominal pela quantidade de domicílios.

O setor censitário é uma geometria definida pelo Instituto Brasileiro de Geografia e Estatística (IBGE), que pode ter qualquer medida. O que define esses setores não é o espaço geográfico que eles ocupam, mas a quantidade de domicílios que cada setor censitário comporta.

Entenda melhor sobre esta geometria e a sua importância no blog da Geofusion.

Dataframe com os dados sociodemográficos e geometria dos setores censitários

Mesmo com este dado estando em formato WKT, não conseguiremos manipulá-lo sem fazer uso de outras bibliotecas de Python específicas para dados geoespaciais. Até o momento, o dado é interpretado como uma string.

WKT ainda no formato de string

SHAPELY

A biblioteca que usamos aqui no time é a Shapely, que permite com que façamos diversas operações geoespaciais de maneira simples e intuitiva.

A primeira delas é transformar o dado em formato WKT em um objeto geométrico que até então é apenas uma string, que não permite com que façamos nenhuma operação geoespacial com ele.

Biblioteca Shapely utilizada para ler e manipular dados na forma de geometria

Agora podemos realizar manipulações geométricas, visto que construímos um objeto geoespacial.

O tipo do dado muda de string para um objeto shapely de classe Polygon

OPERAÇÕES GEOESPACIAIS

O desafio deste artigo foi calcular a renda média domiciliar de um buffer (área gerada a partir de um raio), com 500 metros de raio, realizando o cálculo proporcional da renda nominal e quantidade de domicílios dos setores censitários contidos dentro dela.

Área de estudo com raio de 500 metros gerada na cidade de São Paulo visualizada no OnMaps

Para isto, definimos quais setores censitários intersectam o buffer e verificamos o quanto destes setores está contido dentro da isocota para, então, realizar o cálculo proporcional.

Ou seja, se 50% da área do setor estiver contido no buffer, apenas 50% do valor de renda nominal e domicílios serão associados ao mesmo.

Geometria do buffer gerado com o método geodesic_point_buffer (disponível no nosso git!)

Utilizamos o método Intersects da biblioteca Shapely, e após iterar em todos os setores censitários de São Paulo, levantamos uma lista final com 59 geometrias que intersectam o buffer.

Script para determinar quais setores censitários intersectam o buffer

O método utilizado para obter a geometria da intersecção entre a isocota e os 59 setores censitários é o Intersection.

Visualização no OnMaps dos setores censitários que intersectam o buffer
Área resultante da intersecção entre o buffer e um setor censitário

O método Intersection retorna a intersecção entre duas geometrias. Para saber o quanto das áreas se intersectam, basta fazer a razão da área interseccionada pela área do setor censitário.

A partir daí, podemos obter a proporção da área do setor censitário que intersecciona o buffer.

Porcentagem da área em comum do setor censitário no buffer
Script para gerar o cálculo proporcional de renda e domicílios no buffer
Variáveis do buffer obtidas através do cálculo proporcional

Também podemos fazer este mesmo processo para múltiplas geometrias. No exemplo abaixo, fazemos o cálculo proporcional para três buffers dentro de São Paulo.

Para isto, foi criado um dataframe (df_buffers) com a latitude e longitude dos pontos que desejamos estudar. O método ‘geodesic_point_buffer’ retorna o buffer (um objeto de classe Polygon) e em seguida iteramos em todos os setores censitários do município.

Se o setor intersecta o buffer, é feito o cálculo proporcional da renda nominal e domicílios, adicionando estes valores ponderados a uma lista, que é somada ao final da iteração e retorna o valor da renda nominal e de domicílios da isocota.

As três áreas de influência com raio de 500 metros visualizadas no OnMaps
Script para realizar o cálculo proporcional nos três buffers
Resultado obtido para os buffers

Como você pode ver, o buffer 0 está em uma área de maior renda nominal e menor densidade domiciliar, resultando em uma renda média domiciliar bastante superior às demais.

Enquanto isso, o buffer 1 possui um acúmulo de renda nominal superior ao buffer 2. Contudo, a quantidade de domicílios é muito superior, fazendo com que o mesmo tenha uma renda média domiciliar inferior.

CONCLUSÃO

Neste artigo deu para notar a importância e a riqueza de insights que podemos ter ao associar geometrias geoespaciais com dados, deixando nossa análise mais completa.

Entendeu-se o conceito de WKT, e vimos como usar o Shapely para manipular geometrias geoespaciais.

Conferimos, também, métodos como o Intersects, que define se houve ou não intersecção entre as geometrias, e o Intersection, que retorna a geometria resultante da intersecção entre duas outras geometrias.

Finalmente, realizamos cálculo proporcional dentro de um buffer, utilizando estes métodos.

Ficou com alguma dúvida ou quer trocar experiências com a gente? É só deixar seu comentário no campo abaixo.

Até a próxima!

--

--