Voltar ao catálogo
Season 40 11 Episódios 41 min 2026

GeoPandas

v1.1 — Edição de 2026. Um curso em áudio sobre o GeoPandas 1.1, a poderosa biblioteca de Python para dados geoespaciais. Aprenda a lidar com operações geométricas, manipular dados espaciais, trabalhar com projeções e gerar mapas.

Análise Geoespacial Ciência de Dados
GeoPandas
A Reproduzir
Click play to start
0:00
0:00
1
Conheça o GeoPandas: A Coluna de Geometria Ativa
Uma introdução às estruturas de dados centrais do GeoPandas: a GeoSeries e o GeoDataFrame. Aprenda como o GeoPandas estende a familiar biblioteca pandas para lidar com objetos geoespaciais e compreenda o conceito fundamental da coluna de geometria ativa.
3m 44s
2
Leitura e Escrita: I/O Rápido com Pyogrio
Uma análise aprofundada sobre o carregamento e gravação de dados espaciais. Descubra como o GeoPandas tira partido do motor Pyogrio e do Apache Arrow para acelerar drasticamente o I/O de ficheiros, e ainda como utilizar filtros espaciais e de bounding-box durante o carregamento.
3m 52s
3
A Forma da Terra: Projeções e CRS
Compreenda os Sistemas de Referência de Coordenadas (CRS) e por que razão são vitais para a precisão espacial. Aprenda a diferença entre coordenadas geográficas e projetadas, e como transformar as suas geometrias de forma segura utilizando o GeoPandas.
3m 52s
4
Moldar o Espaço: Buffers, Centroides e Convex Hulls
Descubra como gerar geometrias totalmente novas a partir de geometrias existentes. Este episódio aborda métodos construtivos essenciais, como o cálculo de centroides, a geração de zonas de buffer e o desenho de convex hulls.
3m 12s
5
Predicados Espaciais: Intersects, Within e Contains
Aprenda a fazer perguntas sobre as relações entre diferentes formas. Exploramos predicados espaciais binários — como intersects, within e contains — para testar como as geometrias interagem no espaço.
4m 08s
6
Acelerar Consultas: O Índice Espacial R-Tree
Descubra o motor secreto por trás do desempenho do GeoPandas. Este episódio revela como o índice espacial STR R-tree utiliza bounding boxes para reduzir drasticamente o custo computacional das consultas espaciais.
3m 56s
7
Fundir Mundos: Joins Espaciais e Nearest Joins
Eleve a integração de dados ao próximo nível. Aprenda a unir dois GeoDataFrames distintos baseando-se inteiramente nas suas relações espaciais, utilizando joins espaciais (`sjoin`) e joins de proximidade (`sjoin_nearest`).
4m 09s
8
Operações de Conjuntos: Criar Geometrias com Overlays
Descubra como cortar, unir e dividir formas sobrepostas. Este episódio aborda o poderoso método `overlay`, explicando como calcular interseções, uniões e diferenças para criar geometrias totalmente novas.
3m 33s
9
GroupBy Espacial: Agregação com Dissolve
Aprenda a agrupar dados espaciais. Exploramos o método `dissolve`, que atua como um GroupBy espacial, unindo geometrias mais pequenas em maiores enquanto agrega de forma contínua os seus atributos tabulares.
3m 21s
10
Mapeamento Estático: Construir Mapas Coropléticos e Plotting de Camadas
Transforme os seus dados espaciais em elementos visuais cativantes. Este episódio aborda a integração do GeoPandas com o Matplotlib, ensinando-lhe a construir mapas coropléticos personalizados, sobrepor múltiplos conjuntos de dados e lidar com dados em falta.
4m 02s
11
Exploração Interativa e Mais Além
Dê vida aos seus mapas. Analisamos o método `explore()` para criar mapas interativos baseados na web. Por fim, concluímos a jornada do GeoPandas e preparamo-lo para começar a construir aplicações espaciais no mundo real.
3m 35s

Episódios

1

Conheça o GeoPandas: A Coluna de Geometria Ativa

3m 44s

Uma introdução às estruturas de dados centrais do GeoPandas: a GeoSeries e o GeoDataFrame. Aprenda como o GeoPandas estende a familiar biblioteca pandas para lidar com objetos geoespaciais e compreenda o conceito fundamental da coluna de geometria ativa.

Download
Olá, daqui é o Alex da DEV STORIES DOT EU. GeoPandas, episódio 1 de 11. Os sistemas geográficos tradicionais geralmente obrigam-te a manter exatamente uma forma geométrica por ficheiro, o que significa que, se precisares da fronteira de um concelho e do seu ponto central, tens de manter dois ficheiros separados. O GeoPandas quebra esta restrição, permitindo-te armazenar fronteiras, pontos centrais e zonas de buffer lado a lado numa única tabela. Fica a conhecer o GeoPandas: A Coluna de Geometria Ativa. O GeoPandas é uma extensão da biblioteca de análise de dados pandas. Ele pega nas estruturas familiares de DataFrame e Series e adiciona capacidades espaciais. Nos bastidores, o GeoPandas atua como uma ponte entre dados tabulares e geometria espacial. Ele gere a própria estrutura da tabela, enquanto delega a matemática real de pontos, linhas e polígonos para um motor espacial chamado Shapely. Quando pedes ao GeoPandas para calcular uma área ou encontrar um limite, ele passa as formas relevantes para o Shapely, recupera o resultado matemático e alinha-o de volta na tua linha de dados. As duas estruturas de dados principais que tornam isto possível são a GeoSeries e o GeoDataFrame. Uma GeoSeries é uma única coluna onde cada linha guarda um objeto de geometria do Shapely. Um GeoDataFrame é um DataFrame standard do pandas que contém pelo menos uma coluna GeoSeries. Como um único GeoDataFrame pode conter várias colunas espaciais ao mesmo tempo, o sistema precisa de saber qual delas deve usar como alvo quando corres um comando espacial. Isto é gerido através da coluna de geometria ativa. Aqui está o ponto chave. A coluna de geometria ativa é um estado funcional, não uma string de texto específica. Os utilizadores frequentemente confundem uma coluna chamada literalmente geometry com o conceito subjacente da coluna de geometria ativa. Por default, ao carregar dados, o GeoPandas vai procurar uma coluna chamada geometry e atribuir-lhe o status ativo. Mas as tuas colunas espaciais podem ter absolutamente qualquer nome. O que importa é qual delas tem o status ativo, porque os métodos espaciais são encaminhados especificamente para essa coluna ativa. Considera um dataset de concelhos locais. Tens uma coluna chamada county_borders que guarda os contornos poligonais complexos de cada região. Na mesma tabela, tens outra coluna chamada county_centroids que guarda um único ponto no meio de cada região. Se a coluna borders tiver o status ativo, pedir ao dataframe para calcular a área vai devolver a área total em milhas quadradas do concelho. Qualquer cálculo de distância que corras vai medir a partir da extremidade exterior da fronteira desse concelho. Se, em vez disso, quiseres medir a distância entre os pontos centrais dos concelhos, mudas o contexto espacial. Chamas um método chamado set_geometry e forneces o nome da coluna centroids. Imediatamente, county_centroids torna-se a geometria ativa. A coluna borders permanece perfeitamente intacta, a guardar os teus polígonos, mas o sistema agora trata-a apenas como mais uma coluna de dados. Se correres um cálculo de distância agora, o GeoPandas foca-se automaticamente nos pontos centrais. Alternas entre contextos espaciais instantaneamente, sem fazer merge de tabelas ou gerir datasets duplicados. A principal conclusão é que um GeoDataFrame é um container espacial capaz de guardar as camadas de geometria que precisares, mas a geometria ativa dita qual ferramenta espacial está a ser usada no momento. Se gostas do podcast e queres ajudar a apoiar o programa, podes procurar por DevStoriesEU no Patreon. É tudo por este episódio. Obrigado por ouvires, e continua a desenvolver!
2

Leitura e Escrita: I/O Rápido com Pyogrio

3m 52s

Uma análise aprofundada sobre o carregamento e gravação de dados espaciais. Descubra como o GeoPandas tira partido do motor Pyogrio e do Apache Arrow para acelerar drasticamente o I/O de ficheiros, e ainda como utilizar filtros espaciais e de bounding-box durante o carregamento.

Download
Olá, daqui é o Alex do DEV STORIES DOT EU. GeoPandas, episódio 2 de 11. Estás a carregar um shapefile de cinco gigabytes para a memória, só para descartar imediatamente noventa por cento das rows usando filtros standard do pandas. A tua RAM dispara, o teu script arrasta-se e estás a perder tempo. Na verdade, podes fazer slice desses dados espaciais antes mesmo de saírem do disco rígido. Hoje vamos olhar para Reading and Writing: I/O rápido com Pyogrio. As principais funções que vais usar para pôr e tirar dados do GeoPandas são read file e to file. Historicamente, o GeoPandas usava uma library chamada Fiona internamente. Funcionava, mas era lenta. O GeoPandas moderno usa o Pyogrio por default. O Pyogrio é uma interface direta e altamente otimizada para o GDAL, que é a core library em C que alimenta quase todo o software geoespacial open-source. O Pyogrio é rápido por default, mas podes forçá-lo a ser muito mais rápido. Quando chamas o read file ou o to file, podes passar um argument chamado use arrow, definido como true. Isto diz ao Pyogrio para lidar com os dados usando as estruturas de memória do Apache Arrow. Em vez de ler o ficheiro e traduzir cada coordenada e atributo para um objecto Python um a um, a integração com o Arrow processa os dados em batches grandes e eficientes em termos de memória. Isto ignora completamente o overhead habitual do Python. Se estiveres a lidar com milhões de registos, ligar a flag do Arrow transforma uma operação de read ou write que demora vários minutos numa que demora apenas alguns segundos. Mas a otimização mais eficaz é simplesmente ler menos dados. Um erro muito comum é ler um dataset gigante inteiro para um GeoDataFrame, e depois usar o indexing standard do pandas para o filtrar. Isto causa spikes de memória enormes e completamente desnecessários. O GeoPandas permite-te filtrar os dados durante a própria operação de read file, o que mantém o teu memory footprint flat. Vamos supor que tens um ficheiro com o footprint de todos os edifícios do estado de Nova Iorque, mas só te interessam os edifícios à volta de Coney Island. Se passares um tuple de bounding box para o argument b box no read file, o engine em C subjacente verifica o spatial index do ficheiro no disco. Ele ignora completamente qualquer edifício fora dessa box definida. Ficas com um DataFrame minúsculo que contém apenas o que precisas, e a tua RAM mal regista a operação. Se uma bounding box retangular simples não for precisa o suficiente para as tuas necessidades, podes usar o argument mask. Passas uma geometry específica, como um polygon complexo que representa as fronteiras exatas de um bairro, diretamente para o read file. O engine avalia esta shape e só vai carregar as rows que intersetam o teu polygon. É um pouco mais pesado computacionalmente do que uma bounding box básica, mas é altamente preciso. O spatial filtering cobre a geografia, mas também podes filtrar os atributos standard. A função read file aceita um parameter where. Este recebe uma cláusula SQL WHERE standard como uma string. Se só quiseres edifícios marcados como residenciais, passas uma string a dizer que a coluna type é igual a residential. O GDAL faz o parse deste SQL statement e filtra as rows ao nível do C antes de passar o que quer que seja para o Python. Podes até combinar uma bounding box e uma cláusula where exatamente na mesma call de read para fazer slice tanto da geografia como dos atributos em simultâneo. Aqui está o key insight. Empurrar os teus filtros para a operação de read significa que o heavy lifting acontece em código C altamente otimizado, e não na memória do Python. A maneira absolutamente mais rápida de processar dados espaciais é nunca carregar as partes de que não precisas. Obrigado por passares uns minutos comigo. Até à próxima, fica bem.
3

A Forma da Terra: Projeções e CRS

3m 52s

Compreenda os Sistemas de Referência de Coordenadas (CRS) e por que razão são vitais para a precisão espacial. Aprenda a diferença entre coordenadas geográficas e projetadas, e como transformar as suas geometrias de forma segura utilizando o GeoPandas.

Download
Olá, daqui fala o Alex do DEV STORIES DOT EU. GeoPandas, episódio 3 de 11. Calculas a distância entre duas cidades e o resultado é 2,4 em vez de 200 milhas. O teu código correu perfeitamente, mas a tua resposta é completamente inútil. O culpado é a forma como os teus dados espaciais são mapeados para o mundo físico, o que nos leva a A Forma da Terra: Projeções e C R S. Cada GeoSeries e GeoDataFrame tem um atributo chamado ponto C R S. Isto guarda um objeto pyproj C R S. São os metadados que dizem ao GeoPandas exatamente o que os números na tua coluna geometry representam na realidade. Sem um sistema de referência de coordenadas, uma coordenada como menos 73 vírgula 40 é apenas um ponto numa grelha infinita e abstrata. Com um C R S, torna-se numa localização específica e conhecida na Terra. Existem duas categorias principais de sistemas de coordenadas que precisas de entender. Os sistemas de coordenadas geográficas representam a Terra como um globo tridimensional. As suas coordenadas são ângulos medidos a partir do centro da Terra, expressos em graus de longitude e latitude. Um exemplo muito comum é o EPSG 4326, que é o sistema usado pelo GPS global. Os sistemas de coordenadas projetadas, por outro lado, representam a Terra achatada numa superfície bidimensional. As suas coordenadas usam medidas lineares, como metros ou US Survey feet. Aqui está o ponto chave. As operações espaciais nos bastidores do GeoPandas assumem que os teus dados existem num plano cartesiano plano. Se os teus dados estiverem num sistema de coordenadas geográficas como o EPSG 4326 e pedires ao GeoPandas para calcular a área dos distritos de Nova Iorque, ele vai fazer as contas tratando os graus como se fossem simples quadrados de uma grelha. Vais obter um resultado como 0,083. Isso significa 0,083 graus quadrados, o que é uma métrica sem sentido. Os graus mudam a sua largura física dependendo da tua distância ao equador, por isso, não os podes usar para medir uma distância ou área absoluta. Para fazeres contas do mundo real, tens de projetar os teus dados geográficos num sistema de coordenadas projetadas. Fazes isto usando um método chamado to C R S. Se pegares nesses dados de Nova Iorque e passares o EPSG 2263 para o método to C R S, o GeoPandas vai transformar matematicamente cada coordenada na tua coluna geometry. O EPSG 2263 é um sistema projetado específico para Nova Iorque que mede distâncias em pés. Agora, quando corres exatamente o mesmo cálculo de área, obténs um resultado em milhões de pés quadrados, o que é uma medida real e utilizável. Há aqui uma armadilha comum. Os developers muitas vezes tentam corrigir projeções em falta usando o método set C R S em vez do método to C R S. O set C R S não é uma ferramenta de conversão. É usado apenas quando os teus dados espaciais foram carregados completamente sem um sistema de referência de coordenadas. Simplesmente atribui os metadados, dizendo ao GeoPandas o que os números na tua coluna geometry já são, sem alterar os próprios números. Usas o to C R S quando os dados já têm um C R S válido, e queres converter matematicamente essas coordenadas para um sistema completamente novo. Se os teus cálculos de área ou distância alguma vez parecerem absurdamente pequenos, isso quase sempre significa que estás a pedir ao GeoPandas para fazer matemática plana em graus esféricos, e que precisas de projetar os teus dados. Por hoje é tudo. Obrigado por ouvires — vai construir algo fixe.
4

Moldar o Espaço: Buffers, Centroides e Convex Hulls

3m 12s

Descubra como gerar geometrias totalmente novas a partir de geometrias existentes. Este episódio aborda métodos construtivos essenciais, como o cálculo de centroides, a geração de zonas de buffer e o desenho de convex hulls.

Download
Olá, daqui fala o Alex da DEV STORIES DOT EU. GeoPandas, episódio 4 de 11. Às vezes, a forma que precisas de analisar não é a forma que te deram. Podes importar uma lista de localizações de lojas como pontos individuais, mas o que realmente precisas de perceber é a área de entrega à volta delas. Isto requer moldar matematicamente pontos e linhas em limites dinâmicos usando Shaping Space: buffers, centroids e convex hulls. Estas manipulações geométricas construtivas agem como a plasticina dos dados espaciais. Começas com geometrias brutas e usas estes métodos built-in para calcular formas totalmente novas, adaptadas à tua análise. No GeoPandas, estes métodos aplicam-se element-wise em toda a GeoSeries ativa. Se tiveres dez mil formas, um comando gera dez mil novas. Tudo isto usa a library Shapely under the hood para fazer os cálculos geométricos. A manipulação mais comum é o método buffer. Um buffer cria um polígono que representa todos os pontos a uma determinada distância da tua forma original. Imagina um cenário em que tens geometrias de pontos que representam cafés. Queres definir uma área de entrega de dois quilómetros para cada local. Chamas o método buffer nos teus pontos e passas a tua distância. O GeoPandas desenha instantaneamente um círculo à volta de cada loja, transformando o teu dataset de pontos num dataset de polígonos. Presta atenção a esta parte. Fazer uma operação de buffer requer um Coordinate Reference System projetado. Se as tuas geometrias estiverem num formato geográfico, como latitude e longitude, um valor de distância de dez significa dez graus, e não dez metros. Como os graus de longitude encolhem em largura física à medida que te afastas do equador, fazer o buffer de dados não projetados resulta em ovais muito distorcidas e esticadas em vez de círculos uniformes. Projeta sempre os teus dados para um sistema métrico antes de calcular distâncias. Às vezes precisas de colapsar uma forma em vez de a expandir. Se tiveres polígonos complexos que representam zonas de bairros e precisares de os reduzir a pontos únicos para cálculos de distância ou labels no mapa, usas o atributo centroid. O centroid calcula o centro de massa matemático para cada geometria, devolvendo um ponto central perfeito para cada polígono ou linha no teu dataset. Para isolar as bordas de uma forma, usas o atributo boundary. Se tiveres um polígono a representar um concelho, o boundary remove todo o interior. Devolve uma geometria de menor dimensão, transformando o polígono num conjunto de linhas que apenas contornam o concelho. Se chamares o boundary numa linha, ele devolve os pontos individuais em cada extremidade dessa linha. É aqui que a coisa fica interessante. Também tens o atributo convex hull. Imagina uma coleção dispersa de pontos a representar avistamentos individuais de animais numa floresta. Se esticasses um elástico completamente à volta dos pontos mais externos e o largasses para apertar, a forma que esse elástico cria é o convex hull. Isto devolve o menor polígono convexo possível que engloba toda a geometria. É uma forma incrivelmente rápida de calcular o footprint físico geral de um conjunto disperso de coordenadas. A geometria construtiva significa que nunca ficas preso aos limites espaciais que importaste; podes sempre calcular as zonas exatas que a tua análise realmente exige. Obrigado por passares uns minutos comigo. Até à próxima, fica bem.
5

Predicados Espaciais: Intersects, Within e Contains

4m 08s

Aprenda a fazer perguntas sobre as relações entre diferentes formas. Exploramos predicados espaciais binários — como intersects, within e contains — para testar como as geometrias interagem no espaço.

Download
Olá, daqui fala o Alex da DEV STORIES DOT EU. GeoPandas, episódio 5 de 11. Perguntar se uma coordenada GPS específica está dentro de um limite urbano complexo e irregular parece um problema matemático computacionalmente pesado, que envolve ray-casting. Mas nesta library, isso resolve-se com uma única linha de lógica boolean. Estamos a falar de Spatial Predicates: intersects, within e contains. Se usas o pandas standard, já estás à vontade com conditional filtering. Pegas numa coluna de um dataframe, verificas se os seus valores são maiores que dez, e recebes de volta uma series de valores True e False. Depois, passas essa boolean series de volta para os brackets do teu dataframe para filtrares as tuas rows. Os spatial predicates fazem exatamente a mesma coisa. Em vez de filtrares por um número, filtras por uma verdade espacial. Estás a comparar shapes. Um spatial predicate é um method que testa a relação topológica entre uma GeoSeries inteira e uma única geometry de referência. Quando chamas um predicate method na tua coluna de geometry ativa, o GeoPandas avalia cada row em relação a essa shape de referência. Ele faz a matemática da geometria under the hood e devolve-te uma boolean Series standard do pandas. O teste de relação mais comum é o intersects. Quando chamas o method intersects, ele retorna True se o boundary ou o interior de uma geometry no teu dataset tocar ou se sobrepuser à geometry de referência de alguma forma. Se dois polígonos partilharem um único ponto na sua outer edge, eles intersetam-se. Se um segmento de reta cruzar um polígono, eles intersetam-se. É um catch-all abrangente para qualquer espaço físico partilhado. A seguir, temos os methods contains e within. As pessoas frequentemente confundem-nos porque são operações inversas. A lógica é estritamente direcional. Se o Polígono A for o boundary de uma grande cidade e o Ponto B for um café, a cidade contém o café. O café está dentro da cidade. Se o Polígono A contém o Ponto B, então o Ponto B está dentro do Polígono A. Usas o method contains quando a tua GeoSeries guarda bounding geometries grandes, e estás a passar uma shape de referência mais pequena. Ele retorna True apenas se a shape de referência estiver completamente contida pela geometry na row. Por outro lado, chamas o method within quando a tua GeoSeries guarda os itens mais pequenos, como milhares de pontos de coordenadas individuais, e queres testar se eles caem inteiramente dentro de um único polígono de referência maior. Presta atenção a esta parte. Como estes methods retornam boolean masks standard, podes fazer chain deles diretamente nas tuas data pipelines. Digamos que tens um dataframe de bairros de uma cidade. Aplicaste um buffer para expandir os seus boundaries. Agora queres saber quais destes bairros expandidos e com buffer se sobrepõem ao polígono original, unbuffered, de Brooklyn. Primeiro, isolas o polígono original único de Brooklyn para servir como a tua geometry de referência. Depois, pegas no teu dataframe de bairros com buffer e chamas o method intersects na sua coluna de geometry, passando a shape de Brooklyn. O GeoPandas avalia cada row. Ele retorna True para os bairros com buffer que tocam no polígono de Brooklyn, e False para os que não tocam. Colocas essa series resultante de True e False diretamente dentro dos brackets de seleção do teu dataframe. O dataframe faz drop instantaneamente das rows a False. Ficas com um dataset filtrado geograficamente, obtido inteiramente através de operações standard de dados tabulares. Ao tratares as relações de espaço físico como simples perguntas de True ou False, preenches a lacuna entre a cartografia complexa e a lógica básica de dataframes. É tudo por este episódio. Obrigado por ouvires, e keep building!
6

Acelerar Consultas: O Índice Espacial R-Tree

3m 56s

Descubra o motor secreto por trás do desempenho do GeoPandas. Este episódio revela como o índice espacial STR R-tree utiliza bounding boxes para reduzir drasticamente o custo computacional das consultas espaciais.

Download
Olá, daqui fala o Alex da DEV STORIES DOT EU. GeoPandas, episódio 6 de 11. As tuas queries geoespaciais estão a demorar horas a correr, a bloquear a tua máquina e a esgotar a tua paciência. Provavelmente, estás a fazer o teu CPU verificar cada ponto contra cada limite, o que escala de forma terrível. A solução para este bottleneck é o Turbocharge Queries: The R-Tree Spatial Index. Tens um milhão de pontos de GPS e cinquenta polígonos de bairros. Se testares cada ponto contra cada polígono para ver a que bairro pertence, vais executar cinquenta milhões de cálculos geométricos complexos. Descobrir se uma coordenada está dentro de um polígono irregular é uma operação matemática pesada. Fazer isto como um full scan cria um problema de escalabilidade exponencial que destrói a performance. Um spatial index resolve isto funcionando como um índice para o teu mapa. O GeoPandas usa uma estrutura específica chamada R-tree, construída com o algoritmo Sort-Tile-Recursive. O R significa rectangle. A árvore agrupa objetos logicamente com base na sua localização. A grande vantagem aqui é o pre-filter. Em vez de verificar os limites exatos e irregulares do polígono de um bairro, o index desenha uma caixa retangular simples à sua volta. A isto chama-se um envelope ou uma bounding box. Verificar se uma coordenada cai dentro de um retângulo básico requer um esforço computacional quase nulo. O index descarta imediatamente qualquer ponto que nem sequer esteja dentro da bounding box retangular do bairro. Reduzes instantaneamente os candidatos de um milhão para talvez alguns milhares. Isto leva-nos a uma realidade crítica de dois passos no spatial querying. Um hit no spatial index significa apenas que as bounding boxes se intersetam. Um ponto pode estar dentro do retângulo, mas logo fora do limite curvo real do bairro. O hit na bounding box é apenas o passo um. O passo dois é a verificação exata da geometria nesse subconjunto mais pequeno de candidatos. Acedes a este motor através do método sindex dot query. Se passares uma única geometry, ele devolve um array de índices inteiros correspondentes às geometries na tua GeoSeries cujas bounding boxes intersetam o teu input. Para forçar o index a lidar com esse segundo passo crucial, passa o argumento predicate igual a intersects. O GeoPandas vai então usar a verificação barata da bounding box para encontrar candidatos, e correr automaticamente a verificação cara e exata da geometria apenas nos sobreviventes. Também podes passar um array inteiro de geometries para a query de uma só vez. Esta array query devolve um array bidimensional de índices, emparelhando os matches entre o teu input array e a GeoSeries indexada. A primeira linha dá o índice da tua input geometry, e a segunda linha dá o índice da matching geometry na árvore. Às vezes não precisas de uma interseção, precisas apenas de proximidade. O método sindex dot nearest recebe uma input geometry e devolve o índice da geometry mais próxima na árvore. Isto é altamente eficiente para fazer o snapping de uma coordenada perdida a uma rede rodoviária, ou para encontrar a estação meteorológica mais próxima sem calcular a distância para cada uma das estações no continente. Operações espaciais complexas são matematicamente caras. Nunca forces o teu CPU a calcular interseções geométricas exatas quando uma simples verificação de retângulo pode eliminar noventa e nove por cento dos candidatos logo à partida. Se achas estes episódios úteis e queres apoiar o programa, podes procurar por DevStoriesEU no Patreon. Por agora é tudo. Obrigado por ouvires, e continua a desenvolver!
7

Fundir Mundos: Joins Espaciais e Nearest Joins

4m 09s

Eleve a integração de dados ao próximo nível. Aprenda a unir dois GeoDataFrames distintos baseando-se inteiramente nas suas relações espaciais, utilizando joins espaciais (`sjoin`) e joins de proximidade (`sjoin_nearest`).

Download
Olá, daqui é o Alex do DEV STORIES DOT EU. GeoPandas, episódio 7 de 11. Como é que fazes merge de uma lista de restaurantes com uma lista de secções censitárias quando não partilham nenhuma coluna de ID? Deixas que as suas coordenadas façam o matching. Hoje vamos falar sobre Unir Mundos: Spatial e Nearest Joins. Um spatial join é o equivalente geográfico de um SQL join. Em vez de ligares tabelas por uma string ou um integer ID partilhado, fazes o join com base na sua relação física no espaço. Usas a função sjoin para isso. Considera um cenário em que tens um GeoDataFrame de pontos de supermercados e um GeoDataFrame separado de polígonos de comunidades de Chicago. Queres anexar o nome da comunidade a cada linha de supermercado. Para fazeres isto, chamas o sjoin no dataframe dos supermercados e passas o dataframe das comunidades como argumento da direita. A função depende de dois argumentos principais. O primeiro é o how. Isto funciona exatamente como os joins normais de bases de dados. Um inner join mantém apenas as lojas que ficam dentro de uma comunidade. Um left join mantém todos os teus supermercados, adicionando valores null se uma loja calhar de ficar fora dos limites da comunidade. Um right join mantém todas as comunidades, duplicando-as se contiverem várias lojas, e mantendo-as com dados de loja vazios se não tiverem nenhuma. O segundo argumento é o predicate. Este define a condição espacial que tem de ser cumprida para haver um match. O default é intersects, o que significa que as geometrias se tocam ou se sobrepõem de alguma forma. Também podes usar within, para garantir que um ponto está estritamente dentro de um polígono, ou contains, se estiveres a verificar se um polígono envolve completamente um ponto. Aqui está o insight principal. Ao fazeres um spatial join, estás a combinar duas tabelas com colunas de geometria, mas o GeoDataFrame resultante só pode ter uma geometria ativa. Por default, o sjoin retém a geometria do dataframe da esquerda e faz drop da geometria do dataframe da direita, mantendo todas as suas colunas de atributos normais. Se fizeres o join de pontos de supermercado na esquerda com polígonos de comunidade na direita, o teu output será uma tabela de pontos que agora inclui os nomes das comunidades. Se precisares mesmo que a tabela resultante contenha as formas dos polígonos, tens de inverter a ordem do teu join. Põe as comunidades como a tabela da esquerda e as lojas como a tabela da direita. Às vezes, os teus datasets não se sobrepõem de todo. Se quiseres encontrar a estação de metro mais próxima de cada supermercado, as interseções não vão ajudar. Para isto, usas a função sjoin nearest. Funciona de forma semelhante a um spatial join normal, mas faz o match de geometrias com base na proximidade, em vez da interseção. Podes passar um argumento de coluna de distância como uma string para o sjoin nearest. Isto diz à função para adicionar uma nova coluna aos teus resultados, contendo a distância exata calculada entre os itens que fizeram match. Também podes fornecer um threshold de distância máxima. Isto restringe o join para que só faça match se o vizinho mais próximo estiver dentro de um raio especificado, impedindo-te de ligar uma loja a uma estação do outro lado da cidade simplesmente por calhar de ser a mais próxima disponível. Nos bastidores, ambas as funções dependem muito de um spatial index. Elas não calculam a distância ou a interseção entre cada ponto e cada polígono, o que levaria imenso tempo. Usam o index para avaliar primeiro as bounding boxes, descartando rapidamente as geometrias que não estão minimamente perto umas das outras antes de fazerem os cálculos matemáticos pesados. Tratar a localização física como a tua foreign key definitiva permite-te ligar datasets que, de outra forma, não teriam absolutamente nada em comum. É tudo por este episódio. Obrigado por ouvires, e continua a programar!
8

Operações de Conjuntos: Criar Geometrias com Overlays

3m 33s

Descubra como cortar, unir e dividir formas sobrepostas. Este episódio aborda o poderoso método `overlay`, explicando como calcular interseções, uniões e diferenças para criar geometrias totalmente novas.

Download
Olá, daqui é o Alex da DEV STORIES DOT EU. GeoPandas, episódio 8 de 11. Um spatial join diz-te se uma zona de inundação atinge uma propriedade. Mas deixa o limite da propriedade completamente intacto no teu dataset. Se precisas de um polygon completamente novo a mostrar exatamente que parte da propriedade está debaixo de água, um join não é suficiente. Precisas de Set Operations, especificamente criar geometries com overlays. É comum confundir spatial joins, usando o método sjoin, com overlays. Aqui está a diferença. Um spatial join testa uma relação, anexando attributes de uma layer a outra, enquanto mantém a geometry original exatamente igual. Um overlay corta fisicamente as geometries. Pensa nisto como um cortador de bolachas. Tens duas folhas de massa estendida sobrepostas, a representar dois GeoDataFrames diferentes. Um overlay pressiona as duas layers, cortando-as uma contra a outra. O resultado é um conjunto completamente novo de peças de puzzle. Onde quer que essas duas layers se sobreponham, a nova peça herda os data attributes de ambas as layers originais. Fazes isto usando o método overlay num GeoDataFrame, passando um segundo GeoDataFrame e especificando o tipo de operação com o parâmetro how. Existem cinco tipos de lógica que podes passar ao parâmetro how. O primeiro é intersection. Isto devolve apenas as áreas geográficas exatas onde as duas layers se sobrepõem. Qualquer parte das geometries que não se sobreponha é descartada. O segundo é union. Um union devolve tudo. Funde ambas as layers num único GeoDataFrame, mas corta as geometries em qualquer ponto onde se cruzem. Ficas com peças a representar apenas a layer um, peças a representar apenas a layer dois, e peças a representar o overlap. O terceiro é symmetric difference. Este é o oposto exato de um intersection. Devolve as áreas que pertencem à layer um ou à layer dois, mas corta e descarta especificamente as áreas onde se sobrepõem. O quarto é difference. Este mantém as geometries da tua primeira layer, mas subtrai as áreas cobertas pela segunda layer. É como dar uma trinca na tua primeira shape usando a segunda geometry como dentes. O quinto é identity. Este é muito específico. Mantém os limites exteriores da tua primeira layer completamente intactos, mas divide o interior sempre que a segunda layer o interseta. As fatias sobrepostas recebem os attributes da segunda layer, enquanto o resto da primeira layer fica como estava. Para perceberes porque é que isto importa, imagina um planeador urbano a avaliar o acesso a supermercados. Ele tem uma layer com os limites dos bairros e uma layer com os points dos supermercados. Primeiro, ele faz um buffer dos points dos supermercados para polygons de um quilómetro. Se ele fizesse um spatial join standard entre os bairros e os buffers, iria apenas sinalizar que bairros contêm um buffer. Mas, ao chamar o método overlay com o parâmetro how definido como intersection, ele corta fisicamente as shapes dos bairros usando as shapes dos buffers. O output é um novo GeoDataFrame a conter apenas a área exata de terreno a menos de um quilómetro de um supermercado, perfeitamente cortada pelos limites dos bairros. Aqui está a ideia principal. Os overlays calculam novos intersection nodes para cada limite que se cruza, o que os torna computacionalmente pesados. Não uses um overlay apenas para verificar attributes sobrepostos, usa-o apenas quando precisares genuinamente de gerar limites geométricos completamente novos a partir da colisão de duas layers. É tudo por este episódio. Obrigado por ouvires, e continua a criar!
9

GroupBy Espacial: Agregação com Dissolve

3m 21s

Aprenda a agrupar dados espaciais. Exploramos o método `dissolve`, que atua como um GroupBy espacial, unindo geometrias mais pequenas em maiores enquanto agrega de forma contínua os seus atributos tabulares.

Download
Olá, daqui é o Alex da DEV STORIES DOT EU. GeoPandas, episódio 9 de 11. Tens um dataset espacial com mais de três mil condados, mas a tua análise requer um mapa limpo dos cinquenta estados. Não precisas de interromper o teu trabalho e procurar um novo dataset online, só precisas de uma maneira de eliminar as fronteiras internas. Resolvemos isto usando o Spatial GroupBy, especificamente um método chamado dissolve. Os dados são frequentemente fornecidos a um nível muito granular. Podes ter quarteirões quando precisas de bairros, ou secções censitárias quando precisas de municípios inteiros. O dissolve é a tua ferramenta para subir na hierarquia geográfica. Ele pega em várias formas mais pequenas, funde-as em formas maiores com base num atributo partilhado e agrega os seus dados subjacentes. Se estás familiarizado com a análise de dados padrão, podes pensar no dissolve como uma operação de spatial group-by. Vamos olhar para um cenário concreto. Tens um spatial dataframe do Nepal dividido em distritos minúsculos. O teu dataset tem a geometria de polígono para cada distrito, uma contagem de população e uma coluna de texto a indicar a zona administrativa maior à qual o distrito pertence. Queres um mapa que mostre apenas as zonas. Chamas o método dissolve no teu spatial dataframe e forneces a coluna da zona como o teu alvo de agrupamento. O GeoPandas executa então duas operações distintas em simultâneo. Primeiro, lida com as geometrias espaciais. Agrupa todas as rows dos distritos pelo nome da zona, pega nas suas geometrias e une-as numa única feature. As fronteiras internas dos distritos são apagadas, deixando-te com um limite exterior contínuo para a nova zona. Segundo, tem de decidir o que fazer com os dados tabulares associados a essas formas, como a tua coluna de população. Aqui está o ponto chave. Muitos utilizadores correm o método dissolve, olham para o seu novo mapa de zonas e percebem que as contagens de população estão drasticamente erradas. Isto não é um erro de geometria. Por defeito, o método dissolve lida com os dados tabulares simplesmente ao pegar no valor da primeira row que encontra em cada grupo. Ignora o resto. Para agregar quantidades numéricas corretamente, tens de usar explicitamente o parâmetro aggregate function. Quando chamas o dissolve a agrupar por zona, também passas o parâmetro aggregate function definido como sum. Agora, à medida que o GeoPandas funde fisicamente as formas dos distritos, também soma matematicamente os números da população dos distritos. A row da zona resultante vai conter a população total agregada correta. Este parâmetro também aceita outras funções estatísticas padrão. Se os teus dados granulares contivessem o rendimento médio familiar, poderias passar mean em vez de sum. Se contivessem medições de elevação, poderias passar max para encontrar o ponto mais alto na região recém-fundida. O dissolve combina a união espacial com a agregação tabular num único passo sincronizado, dando-te controlo total sobre a escala geográfica dos teus dados. Obrigado por ouvirem, happy coding a todos!
10

Mapeamento Estático: Construir Mapas Coropléticos e Plotting de Camadas

4m 02s

Transforme os seus dados espaciais em elementos visuais cativantes. Este episódio aborda a integração do GeoPandas com o Matplotlib, ensinando-lhe a construir mapas coropléticos personalizados, sobrepor múltiplos conjuntos de dados e lidar com dados em falta.

Download
Olá, daqui fala o Alex da DEV STORIES DOT EU. GeoPandas, episódio 10 de 11. Não precisas de exportar os teus dados espaciais para um software GIS pesado de desktop só para veres como ficam. Podes gerar visualizações prontas para publicação diretamente no teu ambiente Python. A solução é Static Mapping: construir mapas coropléticos e fazer plot de layers. O núcleo da visualização no GeoPandas é o método plot. Qualquer GeoDataFrame o tem. Chamar o plot sem argumentos desenha imediatamente a tua geometria. É muito simples, mas, internamente, faz wrap do matplotlib. Isto significa que obténs um mapa numa única linha de código, mas continuas a ter todo o poder do matplotlib disponível para ajustar cores, eixos e estilos. Um plot básico apenas desenha formas. Para criares um mapa coroplético — onde as formas são coloridas com base nos valores dos dados — usas o argumento column. Passas o nome da coluna que contém os teus dados. O GeoPandas vai mapear os valores dessa coluna para uma escala de cores. Para ajudar quem vê a perceber essa escala, podes adicionar uma legenda passando legend equals True. Por omissão, fazer o plot de uma coluna numérica contínua cria um gradiente de cores suave. Muitas vezes, é melhor agrupar os teus dados em bins distintos. O GeoPandas integra-se com uma library chamada mapclassify para fazer isto. Ao adicionares o argumento scheme ao teu método plot, podes ordenar os teus dados em classes. Por exemplo, definir o scheme como quantiles divide as tuas geometrias em grupos de tamanho igual com base nos seus valores, tornando os padrões espaciais muito mais fáceis de ler. Datasets do mundo real muitas vezes têm buracos. Se estiveres a construir um mapa coroplético e faltar o valor dos dados de que estás a fazer plot nalgumas linhas, o GeoPandas vai removê-las completamente do mapa. Isto deixa espaços em branco estranhos. Para corrigir isto, usas o argumento missing keywords. Passas um dicionário de opções de styling, como definir a cor para cinzento claro, para que essas formas continuem a aparecer no mapa sem confundir os dados. Agora, a segunda parte disto é a sobreposição de múltiplos datasets. A maioria dos mapas úteis combina múltiplas layers. Supõe que tens uma base layer de bairros da cidade e queres sobrepor um scatter plot com a localização de supermercados. Fazes isto partilhando um objeto axis do matplotlib. Primeiro, crias um axis. A seguir, fazes o plot dos polígonos dos bairros, passando esse axis para o método plot. Depois, fazes o plot dos pontos dos supermercados, passando exatamente o mesmo axis. Ambos os datasets são desenhados no mesmo canvas. Para controlar qual layer fica por cima, usas o argumento z order. Um z order mais baixo vai para o fundo. Portanto, dás aos teus bairros um z order de um, e aos teus supermercados um z order de dois. Os pontos vão ser renderizados de forma limpa sobre os polígonos. Presta atenção a esta parte. Às vezes, queres que os teus polígonos base sejam completamente transparentes para veres apenas as suas bordas. Se definires o argumento face color como None, como um objeto Python sem aspas, o matplotlib ignora-o e aplica uma cor de preenchimento por omissão. Tens de definir o face color para a string none para o tornares transparente. Em alternativa, podes contornar isto completamente chamando a propriedade boundary no teu GeoDataFrame e fazendo o plot da mesma. É uma abordagem muito mais segura para desenhar apenas os contornos. A verdadeira força do mapping no GeoPandas é a sua escalada perfeita desde verificações rápidas de dados até gráficos prontos para publicação. Obténs um visual imediato com uma única chamada de método, mas nunca perdes o controlo subjacente do matplotlib quando precisas de criar layers de histórias espaciais complexas. É tudo por este episódio. Obrigado por ouvires, e continua a construir!
11

Exploração Interativa e Mais Além

3m 35s

Dê vida aos seus mapas. Analisamos o método `explore()` para criar mapas interativos baseados na web. Por fim, concluímos a jornada do GeoPandas e preparamo-lo para começar a construir aplicações espaciais no mundo real.

Download
Olá, daqui é o Alex da DEV STORIES DOT EU. GeoPandas, episódio 11 de 11. Os mapas estáticos são ótimos para uma apresentação final, mas quando estás imerso na fase de análise, uma imagem plana é incrivelmente limitante. Precisas de fazer zoom num bairro específico, fazer pan ao longo de um rio, e fazer hover sobre uma forma para inspecionar os dados brutos escondidos por baixo. Exploração interativa e muito mais é exatamente o que este episódio aborda. Em episódios anteriores, usámos o método plot para desenhar imagens estáticas das nossas geometrias. O GeoPandas também oferece uma alternativa chamada explore. Quando chamas o explore num GeoDataFrame, ele gera um mapa web totalmente interativo diretamente no teu ambiente. Nos bastidores, usa uma library Python chamada Folium, que por sua vez é construída sobre a popular library de mapeamento JavaScript, Leaflet. A beleza do método explore é que a sua API imita perfeitamente o método plot. Não precisas de aprender um conjunto completamente novo de argumentos para mudar de uma imagem estática para um mapa interativo. Pega no dataset dos bairros de Nova Iorque. Chamas o explore no dataset e passas o argumento column definido como area. O output é imediato e tátil. Aparece um mapa a mostrar a cidade, e podes usar o teu rato para fazer pan e scroll para fazer zoom em ruas específicas. Aqui está o ponto chave. Quando fazes hover com o cursor sobre Brooklyn ou Queens, aparece automaticamente uma tooltip. Esta tooltip mostra os dados tabulares subjacentes para essa geometria específica, incluindo o valor exato de area que lhe indicaste para colorir o mapa. Obténs contexto visual e números brutos exatamente ao mesmo tempo. Há um detalhe técnico que tens de ter em mente. Precisas de perceber o que o método explore realmente retorna. O método plot gera um ficheiro de imagem leve. O método explore retorna um objeto pesado, cheio de HTML e JavaScript. Isto é excelente quando estás a trabalhar num Jupyter Notebook, porque o browser renderiza o mapa interativo na perfeição. Mas se o teu objetivo final é gerar um relatório em PDF estático ou uma simples impressão, o explore é a ferramenta errada. Os elementos web interativos simplesmente não passam para o papel. Usa o explore para investigar os teus dados, e volta para o plot quando precisares de publicar um documento estático. Isto leva-nos ao verdadeiro poder da framework GeoPandas. Ao longo desta série, vimos como atua como uma cola coesa para o ecossistema espacial de Python. Pega no pandas e dá-lhe consciência espacial. Delega a matemática geométrica pesada para o Shapely. Depende do Pyogrio para ler e escrever ficheiros a alta velocidade. Finalmente, liga-se a libraries de visualização para te dar feedback instantâneo. Podes carregar um dataset massivo, filtrá-lo, calcular distâncias, fazer spatial joins, e mapear os resultados num canvas interativo, tudo em apenas algumas linhas de Python. A documentação oficial do GeoPandas é excelente, e ler os seus guias de iniciação é a melhor maneira de consolidar o que aprendeste. Abre um notebook, carrega alguns dados que te interessem, e começa a experimentar. Se tiveres uma ideia para um tópico que devamos abordar, passa por devstories.eu e diz-nos. A verdadeira vantagem desta framework é que elimina a complexidade da matemática espacial, permitindo-te tratar a geografia não como um obstáculo, mas apenas como mais um data type para filtrar, fazer join, e analisar. É tudo por este episódio. Obrigado por ouvires, e continua a construir!