Volver al catálogo
Season 40 11 Episodios 45 min 2026

GeoPandas

v1.1 — Edición 2026. Un curso en audio sobre GeoPandas 1.1, la potente librería de Python para datos geoespaciales. Aprende a manejar operaciones geométricas, manipular datos espaciales, trabajar con proyecciones y generar mapas.

Análisis geoespacial Ciencia de datos
GeoPandas
Reproduciendo ahora
Click play to start
0:00
0:00
1
Conoce GeoPandas: La columna de geometría activa
Una introducción a las estructuras de datos principales de GeoPandas: GeoSeries y GeoDataFrame. Aprende cómo GeoPandas amplía la conocida librería pandas para manejar objetos geoespaciales y comprende el concepto fundamental de la columna de geometría activa.
4m 09s
2
Lectura y escritura: Entrada/salida rápida con Pyogrio
Un análisis en profundidad sobre cómo cargar y guardar datos espaciales. Descubre cómo GeoPandas aprovecha el motor Pyogrio y Apache Arrow para acelerar drásticamente la entrada/salida de archivos, además de cómo usar filtros espaciales y de bounding-box durante la carga.
4m 23s
3
La forma de la Tierra: Proyecciones y CRS
Comprende los Sistemas de Referencia de Coordenadas (CRS) y por qué son vitales para la precisión espacial. Aprende la diferencia entre coordenadas geográficas y proyectadas, y cómo transformar tus geometrías de forma segura usando GeoPandas.
4m 18s
4
Dando forma al espacio: Buffers, centroides y Convex Hulls
Descubre cómo generar geometrías completamente nuevas a partir de las existentes. Este episodio cubre métodos constructivos esenciales como el cálculo de centroides, la generación de zonas de buffer y el trazado de convex hulls.
3m 43s
5
Predicados espaciales: Intersects, Within y Contains
Aprende a formular preguntas sobre las relaciones entre diferentes formas. Exploramos los predicados espaciales binarios (como intersects, within y contains) para comprobar cómo interactúan las geometrías en el espacio.
4m 07s
6
Acelera tus consultas: El índice espacial R-Tree
Descubre el motor secreto detrás del rendimiento de GeoPandas. Este episodio revela cómo el índice espacial STR R-tree utiliza bounding boxes para reducir drásticamente el coste computacional de las consultas espaciales.
4m 09s
7
Fusionando mundos: Joins espaciales y Nearest Joins
Lleva la integración de datos al siguiente nivel. Aprende a fusionar dos GeoDataFrames distintos basándote por completo en sus relaciones espaciales utilizando joins espaciales (`sjoin`) y joins de proximidad (`sjoin_nearest`).
4m 48s
8
Operaciones de conjuntos: Creando geometrías con Overlays
Descubre cómo cortar, fusionar y dividir formas superpuestas. Este episodio cubre el potente método `overlay`, explicando cómo calcular intersecciones, uniones y diferencias para crear geometrías completamente nuevas.
3m 56s
9
GroupBy espacial: Agregación con Dissolve
Aprende a agrupar datos espaciales. Exploramos el método `dissolve`, que actúa como un GroupBy espacial, fusionando geometrías pequeñas en otras más grandes mientras agrega sus atributos tabulares de forma fluida.
3m 32s
10
Mapas estáticos: Creando mapas coropléticos y trazando capas
Convierte tus datos espaciales en visualizaciones atractivas. Este episodio cubre la integración de GeoPandas con Matplotlib, enseñándote a crear mapas coropléticos personalizados, superponer múltiples conjuntos de datos y manejar datos faltantes.
4m 17s
11
Exploración interactiva y más allá
Da vida a tus mapas. Analizamos el método `explore()` para crear mapas interactivos basados en la web. Finalmente, concluimos nuestro viaje por GeoPandas y te preparamos para empezar a construir aplicaciones espaciales en el mundo real.
4m 00s

Episodios

1

Conoce GeoPandas: La columna de geometría activa

4m 09s

Una introducción a las estructuras de datos principales de GeoPandas: GeoSeries y GeoDataFrame. Aprende cómo GeoPandas amplía la conocida librería pandas para manejar objetos geoespaciales y comprende el concepto fundamental de la columna de geometría activa.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. GeoPandas, episodio 1 de 11. Los sistemas geográficos tradicionales suelen obligarte a mantener exactamente una forma geométrica por archivo, lo que significa que si necesitas el límite de un condado y su punto central, debes mantener dos archivos separados. GeoPandas rompe con esta limitación, permitiéndote almacenar límites, puntos centrales y zonas de buffer simultáneamente en una sola tabla. Te presento GeoPandas: la columna de geometría activa. GeoPandas es una extensión de la librería de análisis de datos pandas. Toma las conocidas estructuras de DataFrame y Series y les añade capacidades espaciales. Por debajo, GeoPandas actúa como un puente entre los datos tabulares y la geometría espacial. Gestiona la propia estructura de la tabla, mientras que delega las matemáticas reales de puntos, líneas y polígonos a un motor espacial llamado Shapely. Cuando le pides a GeoPandas que calcule un área o encuentre un límite, le pasa las formas relevantes a Shapely, recupera el resultado matemático y lo alinea directamente de vuelta en tu fila de datos. Las dos estructuras de datos principales que hacen esto posible son la GeoSeries y el GeoDataFrame. Una GeoSeries es una única columna donde cada fila contiene un objeto geometry de Shapely. Un GeoDataFrame es un DataFrame estándar de pandas que contiene al menos una columna GeoSeries. Como un solo GeoDataFrame puede contener varias columnas espaciales a la vez, el sistema necesita saber a cuál apuntar cuando ejecutas un comando espacial. Esto se gestiona mediante la columna de geometría activa. Aquí está la clave. La columna de geometría activa es un estado funcional, no un string específico. Los usuarios suelen confundir una columna llamada literalmente geometry con el concepto subyacente de la columna de geometría activa. Por defecto, al cargar datos, GeoPandas buscará una columna llamada geometry y le asignará el estado activo. Pero tus columnas espaciales pueden llamarse de cualquier manera. Lo que importa es cuál tiene el estado activo, porque los métodos espaciales se enrutan específicamente a esa columna activa. Considera un dataset de condados locales. Tienes una columna llamada county_borders que almacena los complejos contornos poligonales de cada región. En la misma tabla, tienes otra columna llamada county_centroids que almacena un único punto en el centro de cada región. Si la columna borders tiene el estado activo, pedirle al DataFrame que calcule el área devolverá la superficie total del condado. Cualquier cálculo de distancia que ejecutes medirá desde el borde exterior de ese límite del condado. Si en su lugar quieres medir la distancia entre los puntos centrales de los condados, cambias el contexto espacial. Llamas a un método llamado set_geometry y le pasas el nombre de la columna centroids. Inmediatamente, county_centroids se convierte en la geometría activa. La columna borders permanece perfectamente intacta, guardando tus polígonos, pero el sistema ahora la trata como una columna de datos más. Si ejecutas un cálculo de distancia ahora, GeoPandas apunta automáticamente a los puntos centrales. Cambias entre contextos espaciales al instante sin fusionar tablas ni gestionar datasets duplicados. La conclusión más útil es que un GeoDataFrame es un contenedor espacial capaz de almacenar tantas capas de geometría como necesites, pero la geometría activa dicta qué herramienta espacial está en uso actualmente. Si disfrutas del podcast y quieres apoyar el programa, puedes buscar DevStoriesEU en Patreon. Eso es todo por este episodio. Gracias por escuchar, y ¡sigue construyendo!
2

Lectura y escritura: Entrada/salida rápida con Pyogrio

4m 23s

Un análisis en profundidad sobre cómo cargar y guardar datos espaciales. Descubre cómo GeoPandas aprovecha el motor Pyogrio y Apache Arrow para acelerar drásticamente la entrada/salida de archivos, además de cómo usar filtros espaciales y de bounding-box durante la carga.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. GeoPandas, episodio 2 de 11. Estás cargando un shapefile de cinco gigabytes en memoria, solo para descartar inmediatamente el noventa por ciento de las filas usando filtros estándar de pandas. Tu RAM se dispara, tu script se ralentiza y estás perdiendo tiempo. En realidad, puedes recortar esos datos espaciales antes de que salgan del disco duro. Hoy veremos lectura y escritura: I/O rápido con Pyogrio. Las funciones principales que usarás para meter y sacar datos de GeoPandas son read file y to file. Históricamente, GeoPandas usaba una librería llamada Fiona por debajo. Funcionaba, pero era lenta. La versión moderna de GeoPandas usa Pyogrio por defecto. Pyogrio es una interfaz directa y altamente optimizada para GDAL, que es la librería C principal que impulsa casi todo el software geoespacial open source. Pyogrio es rápido por defecto, pero puedes forzarlo a ser mucho más rápido. Cuando llamas a read file o to file, puedes pasar un argumento llamado use arrow, puesto a true. Esto le indica a Pyogrio que maneje los datos utilizando las estructuras de memoria de Apache Arrow. En lugar de leer el archivo y convertir cada coordenada y atributo en un objeto de Python uno por uno, la integración de Arrow procesa los datos en lotes grandes y eficientes en memoria. Esto evita por completo el overhead habitual de Python. Si trabajas con millones de registros, activar el flag de Arrow convierte una operación de lectura o escritura que tarda varios minutos en una que tarda solo unos segundos. Pero la optimización más efectiva es simplemente leer menos datos. Un error muy común es leer un dataset masivo entero en un GeoDataFrame, y luego usar el indexing estándar de pandas para filtrarlo después. Esto provoca picos de memoria enormes y completamente innecesarios. GeoPandas te permite filtrar los datos durante la propia operación de read file, lo que mantiene tu consumo de memoria plano. Supongamos que tienes un archivo con la huella de todos los edificios del estado de Nueva York, pero solo te interesan los edificios alrededor de Coney Island. Si pasas una tupla de bounding box al argumento b box en read file, el motor de C por debajo comprueba el índice espacial del archivo en el disco. Ignora por completo cualquier edificio fuera de esa caja definida. Obtienes un DataFrame diminuto que contiene solo lo que necesitas, y tu RAM apenas registra la operación. Si un simple bounding box rectangular no es lo suficientemente preciso para tus necesidades, puedes usar el argumento mask. Pasas una geometría específica, como un polígono complejo que representa los límites exactos de un barrio, directamente a read file. El motor evalúa esta forma y solo cargará las filas que intersecten con tu polígono. Es un poco más costoso a nivel computacional que un bounding box básico, pero es muy preciso. El filtrado espacial abarca la geografía, pero también puedes filtrar los atributos estándar. La función read file acepta un parámetro where. Esto recibe una cláusula WHERE de SQL estándar como un string. Si solo quieres edificios etiquetados como residenciales, pasas un string indicando que la columna type es igual a residencial. GDAL parsea esta sentencia SQL y filtra las filas a nivel de C antes de pasarle nada a Python. Incluso puedes combinar un bounding box y una cláusula where en la misma llamada de read para filtrar tanto la geografía como los atributos simultáneamente. Aquí está la clave. Bajar tus filtros a la operación de read significa que el trabajo pesado se hace en código C altamente optimizado, no en la memoria de Python. La forma absolutamente más rápida de procesar datos espaciales es no cargar nunca las partes que no necesitas. Gracias por pasar unos minutos conmigo. Hasta la próxima, cuídate.
3

La forma de la Tierra: Proyecciones y CRS

4m 18s

Comprende los Sistemas de Referencia de Coordenadas (CRS) y por qué son vitales para la precisión espacial. Aprende la diferencia entre coordenadas geográficas y proyectadas, y cómo transformar tus geometrías de forma segura usando GeoPandas.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. GeoPandas, episodio 3 de 11. Calculas la distancia entre dos ciudades y el resultado es 2,4 en lugar de 200 millas. Tu código se ejecutó perfectamente, pero tu respuesta es completamente inútil. El culpable es cómo tus datos espaciales se mapean al mundo físico, lo que nos lleva a La Forma de la Tierra: Proyecciones y C R S. Cada GeoSeries y GeoDataFrame tiene un atributo llamado punto C R S. Este almacena un objeto pyproj C R S. Son los metadatos que le dicen a GeoPandas exactamente qué representan en realidad los números en tu columna geometry. Sin un sistema de referencia de coordenadas, una coordenada como menos 73 coma 40 es solo un punto en una cuadrícula infinita y abstracta. Con un C R S, se convierte en una ubicación específica y conocida en la Tierra. Hay dos categorías principales de sistemas de coordenadas que necesitas entender. Los sistemas de coordenadas geográficas representan la Tierra como un globo tridimensional. Sus coordenadas son ángulos medidos desde el centro de la Tierra, expresados en grados de longitud y latitud. Un ejemplo muy común es EPSG 4326, que es el sistema que usa el GPS global. Los sistemas de coordenadas proyectadas, por otro lado, representan la Tierra aplanada sobre una superficie bidimensional. Sus coordenadas usan medidas lineales, como metros o US Survey feet. Aquí está la clave. Las operaciones espaciales bajo el capó de GeoPandas asumen que tus datos existen en un plano cartesiano plano. Si tus datos están en un sistema de coordenadas geográficas como EPSG 4326 y le pides a GeoPandas que calcule el área de los distritos de Nueva York, hará los cálculos tratando los grados como si fueran simples cuadrados de una cuadrícula. Obtendrás un resultado como 0,083. Eso significa 0,083 grados cuadrados, lo cual es una métrica sin sentido. Los grados cambian su anchura física dependiendo de lo lejos que estés del ecuador, así que no puedes usarlos para medir distancia o área absoluta. Para hacer cálculos del mundo real, debes proyectar tus datos geográficos en un sistema de coordenadas proyectadas. Esto lo haces usando un método llamado to C R S. Si coges esos datos de Nueva York y le pasas EPSG 2263 al método to C R S, GeoPandas transformará matemáticamente cada coordenada en tu columna geometry. EPSG 2263 es un sistema proyectado específico para Nueva York que mide las distancias en pies. Ahora, cuando ejecutas exactamente ese mismo cálculo de área, obtienes un resultado en millones de pies cuadrados, que es una medida real y utilizable. Hay una trampa común aquí. Los desarrolladores a menudo intentan arreglar las proyecciones que faltan usando el método set C R S en lugar del método to C R S. set C R S no es una herramienta de conversión. Solo se usa cuando tus datos espaciales se cargaron sin ningún sistema de referencia de coordenadas. Simplemente asigna los metadatos, diciéndole a GeoPandas qué son ya los números en tu columna geometry, sin alterar los números en sí. Usas to C R S cuando los datos ya tienen un C R S válido, y quieres convertir matemáticamente esas coordenadas a un sistema completamente nuevo. Si tus cálculos de área o distancia alguna vez parecen absurdamente pequeños, casi siempre significa que le estás pidiendo a GeoPandas que haga matemáticas planas sobre grados esféricos, y necesitas proyectar tus datos. Eso es todo por hoy. Gracias por escuchar — ve a construir algo genial.
4

Dando forma al espacio: Buffers, centroides y Convex Hulls

3m 43s

Descubre cómo generar geometrías completamente nuevas a partir de las existentes. Este episodio cubre métodos constructivos esenciales como el cálculo de centroides, la generación de zonas de buffer y el trazado de convex hulls.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. GeoPandas, episodio 4 de 11. A veces, la forma que necesitas analizar no es la que te dieron. Puedes importar una lista de ubicaciones de tiendas como puntos individuales, pero lo que realmente necesitas comprender es el área de reparto que las rodea. Esto requiere moldear matemáticamente puntos y líneas en límites dinámicos usando Shaping Space: Buffers, Centroids y Convex Hulls. Estas manipulaciones geométricas constructivas actúan como la arcilla de modelar de los datos espaciales. Empiezas con geometrías en bruto y usas estos métodos integrados para calcular formas completamente nuevas adaptadas a tu análisis. En GeoPandas, estos métodos se aplican elemento por elemento a toda la GeoSeries activa. Si tienes diez mil formas, un comando genera diez mil nuevas. Todo esto utiliza la librería Shapely por debajo para realizar los cálculos geométricos. La manipulación más común es el método buffer. Un buffer crea un polígono que representa todos los puntos dentro de una distancia determinada de tu forma original. Imagina un escenario donde tienes geometrías de puntos que representan cafeterías. Quieres definir un área de reparto de dos kilómetros para cada ubicación. Llamas al método buffer en tus puntos y le pasas la distancia. GeoPandas dibuja instantáneamente un círculo alrededor de cada tienda, transformando tu dataset de puntos en un dataset de polígonos. Presta atención a este detalle. Realizar una operación de buffer requiere un Sistema de Referencia de Coordenadas proyectado. Si tus geometrías están en un formato geográfico, como latitud y longitud, un valor de distancia de diez significa diez grados, no diez metros. Como los grados de longitud se reducen en anchura física a medida que te alejas del ecuador, hacer un buffer de datos sin proyectar da como resultado óvalos muy distorsionados y estirados en lugar de círculos uniformes. Proyecta siempre tus datos a un sistema métrico antes de calcular distancias. A veces necesitas colapsar una forma en lugar de expandirla. Si tienes polígonos complejos que representan zonas de vecindarios y necesitas reducirlos a puntos individuales para cálculos de distancia o etiquetas de mapa, usas el atributo centroid. El centroid calcula el centro de masa matemático de cada geometría, devolviendo un punto central perfecto para cada polígono o línea de tu dataset. Para aislar los bordes de una forma, usas el atributo boundary. Si tienes un polígono que representa un condado, el boundary elimina todo el interior. Devuelve una geometría de menor dimensión, transformando el polígono en un conjunto de líneas que simplemente delimitan el condado. Si llamas a boundary en una línea, devuelve los puntos individuales en cada extremo de esa línea. Aquí es donde la cosa se pone interesante. También tienes el atributo convex hull. Imagina una colección dispersa de puntos que representan avistamientos individuales de animales en un bosque. Si estiraras una goma elástica completamente alrededor de los puntos más externos y la dejaras tensarse, la forma que crea esa goma es el convex hull. Devuelve el polígono convexo más pequeño posible que encierra toda la geometría. Es una forma increíblemente rápida de calcular la huella física total de un conjunto disperso de coordenadas. La geometría constructiva significa que nunca estás limitado a los límites espaciales que importaste; siempre puedes calcular las zonas exactas que realmente requiere tu análisis. Gracias por pasar unos minutos conmigo. Hasta la próxima, cuídate.
5

Predicados espaciales: Intersects, Within y Contains

4m 07s

Aprende a formular preguntas sobre las relaciones entre diferentes formas. Exploramos los predicados espaciales binarios (como intersects, within y contains) para comprobar cómo interactúan las geometrías en el espacio.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. GeoPandas, episodio 5 de 11. Preguntarse si una coordenada GPS específica cae dentro de un límite de ciudad complejo e irregular suena a un problema matemático computacional pesado que involucra ray-casting. Pero en esta librería, se resuelve con una sola línea de lógica booleana. Hablamos de predicados espaciales: Intersects, Within y Contains. Si utilizas pandas estándar, ya estás familiarizado con el filtrado condicional. Coges una columna de un dataframe, compruebas si sus valores son mayores que diez, y obtienes una Series de valores True y False. Luego, pasas esa Series booleana de vuelta a los brackets de tu dataframe para filtrar tus filas. Los predicados espaciales hacen exactamente lo mismo. En lugar de filtrar por un número, filtras por una verdad espacial. Estás comparando formas. Un predicado espacial es un método que comprueba la relación topológica entre una GeoSeries completa y una única geometría de referencia. Cuando llamas a un método de predicado en tu columna de geometría activa, GeoPandas evalúa cada una de las filas contra esa forma de referencia. Calcula las matemáticas de la geometría por debajo y te devuelve una Series booleana estándar de pandas. La prueba de relación más común es intersects. Cuando llamas al método intersects, devuelve True si el límite o el interior de una geometría de tu dataset toca o se superpone a la geometría de referencia de alguna manera. Si dos polígonos comparten un solo punto en su borde exterior, se intersecan. Si un segmento de línea cruza un polígono, se intersecan. Es un cajón de sastre amplio para cualquier espacio físico compartido. A continuación, tenemos los métodos contains y within. La gente suele confundirlos porque son operaciones inversas. La lógica es estrictamente direccional. Si el Polígono A es el límite de una gran ciudad y el Punto B es una cafetería, la ciudad contiene la cafetería. La cafetería está dentro de la ciudad. Si el Polígono A contiene el Punto B, entonces el Punto B está dentro del Polígono A. Usas el método contains cuando tu GeoSeries contiene geometrías delimitadoras grandes y le pasas una forma de referencia más pequeña. Devuelve True solo si la forma de referencia está completamente encerrada por la geometría de la fila. Por el contrario, llamas al método within cuando tu GeoSeries contiene los elementos más pequeños, como miles de puntos de coordenadas individuales, y quieres comprobar si caen completamente dentro de un único polígono de referencia más grande. Presta atención a esta parte. Como estos métodos devuelven máscaras booleanas estándar, puedes hacerles chain directamente en tus data pipelines. Supongamos que tienes un dataframe de distritos de una ciudad. Has aplicado un buffer para expandir sus límites. Ahora quieres saber cuáles de estos distritos expandidos y con buffer se superponen con el polígono original de Brooklyn sin buffer. Primero, aíslas el único polígono original de Brooklyn para que actúe como tu geometría de referencia. Luego, coges tu dataframe de distritos con buffer y llamas al método intersects en su columna de geometría, pasándole la forma de Brooklyn. GeoPandas evalúa cada fila. Devuelve True para los distritos con buffer que tocan el polígono de Brooklyn, y False para los que no. Metes esa Series resultante de True y False directamente dentro de los brackets de selección de tu dataframe. El dataframe descarta al instante las filas False. Te quedas con un dataset filtrado geográficamente, conseguido íntegramente mediante operaciones estándar de datos tabulares. Al tratar las relaciones de espacio físico como simples preguntas de True o False, reduces la brecha entre la cartografía compleja y la lógica básica de dataframes. Eso es todo por este episodio. Gracias por escuchar, y sigue creando!
6

Acelera tus consultas: El índice espacial R-Tree

4m 09s

Descubre el motor secreto detrás del rendimiento de GeoPandas. Este episodio revela cómo el índice espacial STR R-tree utiliza bounding boxes para reducir drásticamente el coste computacional de las consultas espaciales.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. GeoPandas, episodio 6 de 11. Tus queries geoespaciales tardan horas en ejecutarse, bloquean tu ordenador y agotan tu paciencia. Probablemente estás obligando a tu CPU a comprobar cada punto contra cada límite, lo que escala fatal. La solución a este cuello de botella es Turbocharge Queries: el spatial index R-Tree. Tienes un millón de puntos GPS y cincuenta polígonos de barrios. Si compruebas cada punto contra cada polígono para determinar a qué barrio pertenece, realizas cincuenta millones de cálculos geométricos complejos. Averiguar si una coordenada cae dentro de un polígono irregular es una operación matemática muy pesada. Hacer esto como un full scan crea un problema de escalado exponencial que destroza el rendimiento. Un spatial index resuelve este problema actuando como una tabla de contenidos para tu mapa. GeoPandas utiliza una estructura específica llamada R-tree, construida con el algoritmo Sort-Tile-Recursive. La R significa rectángulo. El árbol agrupa los objetos lógicamente según su ubicación. La clave aquí es el prefiltro. En lugar de comprobar los bordes exactos e irregulares de un polígono de barrio, el índice dibuja una simple caja rectangular a su alrededor. A esto se le llama envelope o bounding box. Comprobar si una coordenada cae dentro de un rectángulo básico requiere un esfuerzo computacional casi nulo. El índice descarta inmediatamente cualquier punto que ni siquiera esté dentro de la bounding box rectangular del barrio. Reduces al instante los candidatos de un millón a quizás unos pocos miles. Esto nos lleva a una realidad crucial de dos pasos en las queries espaciales. Un hit en el spatial index solo significa que las bounding boxes se intersecan. Un punto puede estar dentro del rectángulo, pero justo fuera del límite curvo real del barrio. El hit en la bounding box es solo el paso uno. El paso dos es la comprobación exacta de la geometría en ese subconjunto más pequeño de candidatos. Accedes a este motor mediante el método sindex punto query. Si pasas una única geometría, devuelve un array de índices enteros que corresponden a las geometrías de tu GeoSeries cuyas bounding boxes intersecan con tu input. Para forzar al índice a gestionar ese segundo paso crucial, pasa el argumento predicate igual a intersects. GeoPandas utilizará entonces la comprobación barata de la bounding box para encontrar candidatos, y ejecutará automáticamente la costosa comprobación exacta de geometría solo en los supervivientes. También puedes pasar un array entero de geometrías a la query de una sola vez. Esta query de array devuelve un array bidimensional de índices, emparejando las coincidencias entre tu array de input y la GeoSeries indexada. La primera fila te da el índice de tu geometría de input, y la segunda fila te da el índice de la geometría coincidente en el árbol. A veces no necesitas una intersección, solo necesitas proximidad. El método sindex punto nearest toma una geometría de input y devuelve el índice de la geometría más cercana en el árbol. Esto es muy eficiente para hacer snapping de una coordenada perdida a una red de carreteras, o para encontrar la estación meteorológica más cercana sin calcular la distancia a cada una de las estaciones del continente. Las operaciones espaciales complejas son matemáticamente costosas. Nunca fuerces a tu CPU a calcular intersecciones geométricas exactas cuando una simple comprobación de rectángulo puede eliminar el noventa y nueve por ciento de los candidatos de antemano. Si estos episodios te resultan útiles y quieres apoyar el programa, puedes buscar DevStoriesEU en Patreon. Eso es todo por este episodio. Gracias por escuchar, y ¡sigue programando!
7

Fusionando mundos: Joins espaciales y Nearest Joins

4m 48s

Lleva la integración de datos al siguiente nivel. Aprende a fusionar dos GeoDataFrames distintos basándote por completo en sus relaciones espaciales utilizando joins espaciales (`sjoin`) y joins de proximidad (`sjoin_nearest`).

Descargar
Hola, soy Alex de DEV STORIES DOT EU. GeoPandas, episodio 7 de 11. ¿Cómo unes una lista de restaurantes con una lista de distritos censales cuando no comparten ninguna columna de ID? Dejas que sus ubicaciones de coordenadas hagan el matching. Hoy hablamos de fusionar mundos: spatial joins y nearest joins. Un spatial join es el equivalente geográfico de un join de SQL. En lugar de enlazar tablas por un string o un ID integer compartido, les haces join basándote en su relación física en el espacio. Para esto, usas la función sjoin. Imagina un escenario donde tienes un GeoDataFrame de puntos de supermercados y un GeoDataFrame separado de polígonos de comunidades de Chicago. Quieres añadir el nombre de la comunidad a cada row de supermercado. Para hacer esto, llamas a sjoin en el dataframe de supermercados y le pasas el dataframe de comunidades como argumento derecho. La función depende de dos argumentos principales. El primero es how. Esto funciona exactamente igual que los joins estándar de bases de datos. Un inner join conserva solo los supermercados que caen dentro de una comunidad. Un left join conserva todos tus supermercados, añadiendo valores null si da la casualidad de que un supermercado está fuera de los límites de la comunidad. Un right join conserva todas las comunidades, duplicándolas si contienen varios supermercados, y manteniéndolas con datos de supermercado vacíos si no tienen ninguno. El segundo argumento es predicate. Este define la condición espacial que debe cumplirse para que haya un match. El valor por defecto es intersects, lo que significa que las geometrías se tocan o se superponen de alguna manera. También puedes usar within, para asegurar que un punto esté estrictamente dentro de un polígono, o contains, si estás comprobando si un polígono encierra completamente un punto. Aquí está la clave. Al hacer un spatial join, estás combinando dos tablas con columnas de geometría, pero el GeoDataFrame resultante solo puede tener una geometría activa. Por defecto, sjoin conserva la geometría del dataframe izquierdo y descarta la geometría del dataframe derecho, manteniendo todas sus columnas de atributos estándar. Si haces un join de los puntos de supermercados a la izquierda con los polígonos de comunidades a la derecha, tu output será una tabla de puntos que ahora incluye los nombres de las comunidades. Si realmente necesitas que la tabla resultante contenga las formas de los polígonos, debes invertir el orden de tu join. Pon las comunidades como la tabla izquierda y los supermercados como la tabla derecha. A veces, tus datasets no se superponen en absoluto. Si quieres encontrar la estación de metro más cercana a cada supermercado, las intersecciones no te servirán. Para esto, usas la función sjoin nearest. Funciona de forma similar a un spatial join estándar, pero hace match de geometrías basándose en la proximidad en lugar de la intersección. Puedes pasar un argumento de columna de distancia como string a sjoin nearest. Esto le dice a la función que añada una nueva columna a tus resultados con la distancia exacta calculada entre los elementos que han hecho match. También puedes proporcionar un umbral de max distance. Esto restringe el join para que solo haga match si el vecino más cercano está dentro de un radio especificado, evitando que enlaces un supermercado con una estación al otro lado de la ciudad simplemente porque da la casualidad de que es la más cercana disponible. Por debajo, ambas funciones dependen en gran medida de un spatial index. No calculan la distancia ni la intersección entre cada punto y cada polígono, lo que llevaría muchísimo tiempo. Usan el índice para evaluar primero los bounding boxes, descartando rápidamente las geometrías que no están cerca unas de otras antes de realizar los cálculos matemáticos pesados. Tratar la ubicación física como tu foreign key definitiva te permite conectar datasets que, de otro modo, no tendrían absolutamente nada en común. Eso es todo por este episodio. ¡Gracias por escuchar, y sigue creando!
8

Operaciones de conjuntos: Creando geometrías con Overlays

3m 56s

Descubre cómo cortar, fusionar y dividir formas superpuestas. Este episodio cubre el potente método `overlay`, explicando cómo calcular intersecciones, uniones y diferencias para crear geometrías completamente nuevas.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. GeoPandas, episodio 8 de 11. Un spatial join te indica si una zona inundable afecta a una propiedad. Sin embargo, deja el límite de la propiedad completamente intacto en tu dataset. Si necesitas un polígono nuevo que muestre exactamente qué parte de la propiedad está bajo el agua, un join no es suficiente. Necesitas Set Operations, específicamente crear geometrías con overlays. Es común confundir los spatial joins, usando el método sjoin, con los overlays. Esta es la diferencia. Un spatial join comprueba una relación, añadiendo atributos de una capa a otra mientras mantiene la geometría original exactamente igual. Un overlay corta físicamente las geometrías. Piénsalo como un molde para galletas. Tienes dos láminas de masa superpuestas, que representan dos GeoDataFrames diferentes. Un overlay presiona a través de ambas capas, cortándolas entre sí. El resultado es un conjunto completamente nuevo de piezas de puzle. Allí donde esas dos capas se solapan, la nueva pieza hereda los atributos de datos de ambas capas originales. Haces esto usando el método overlay en un GeoDataFrame, pasándole un segundo GeoDataFrame y especificando el tipo de operación con el parámetro how. Hay cinco tipos de lógica que puedes pasarle al parámetro how. El primero es intersection. Este devuelve solo las áreas geográficas exactas donde las dos capas se solapan. Cualquier parte de las geometrías que no se solape se descarta. El segundo es union. Un union lo devuelve todo. Fusiona ambas capas en un solo GeoDataFrame, pero corta las geometrías en cualquier punto donde se crucen. Obtienes piezas que representan solo la capa uno, piezas que representan solo la capa dos, y piezas que representan el solapamiento. El tercero es symmetric difference. Es exactamente lo opuesto a un intersection. Devuelve las áreas que pertenecen a la capa uno o a la capa dos, pero recorta y descarta específicamente las áreas donde se solapan. El cuarto es difference. Este conserva las geometrías de tu primera capa, pero resta las áreas cubiertas por la segunda capa. Es como darle un mordisco a tu primera forma usando la segunda geometría como dientes. El quinto es identity. Este es muy específico. Mantiene los límites exteriores de tu primera capa totalmente intactos, pero divide el interior allí donde la segunda capa lo interseca. Los trozos solapados obtienen los atributos de la segunda capa, mientras que el resto de la primera capa se queda como estaba. Para ver por qué esto importa, imagina a un urbanista evaluando el acceso a supermercados. Tiene una capa de límites de barrios y una capa de puntos de supermercados. Primero, le aplica un buffer a los puntos de los supermercados para crear polígonos de un kilómetro. Si hiciera un spatial join estándar entre los barrios y los buffers, simplemente marcaría qué barrios contienen un buffer. Pero al llamar al método overlay con el parámetro how configurado en intersection, corta físicamente las formas de los barrios usando las formas de los buffers. El output es un nuevo GeoDataFrame que contiene solo la huella exacta de terreno a menos de un kilómetro de una tienda, recortada perfectamente a los límites del barrio. Esta es la clave. Los overlays calculan nuevos nodos de intersección para cada límite que se cruza, lo que los hace computacionalmente costosos. No uses un overlay solo para comprobar atributos solapados, úsalo únicamente cuando de verdad necesites generar límites geométricos completamente nuevos a partir de la colisión de dos capas. Eso es todo por este episodio. ¡Gracias por escuchar, y sigue creando!
9

GroupBy espacial: Agregación con Dissolve

3m 32s

Aprende a agrupar datos espaciales. Exploramos el método `dissolve`, que actúa como un GroupBy espacial, fusionando geometrías pequeñas en otras más grandes mientras agrega sus atributos tabulares de forma fluida.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. GeoPandas, episodio 9 de 11. Tienes un dataset espacial de más de tres mil condados, pero tu análisis requiere un mapa limpio de los cincuenta estados. No necesitas interrumpir tu trabajo para buscar un nuevo dataset online; solo necesitas una forma de eliminar los límites internos. Resolvemos esto usando Spatial GroupBy, específicamente un método llamado dissolve. Los datos suelen entregarse a un nivel muy granular. Puedes tener manzanas cuando necesitas barrios, o secciones censales cuando necesitas municipios enteros. dissolve es tu herramienta para subir en la jerarquía geográfica. Toma muchas formas más pequeñas, las fusiona en otras más grandes basándose en un atributo compartido y agrega sus datos subyacentes. Si estás familiarizado con el análisis de datos estándar, puedes pensar en dissolve como una operación de spatial group-by. Veamos un escenario concreto. Tienes un dataframe espacial de Nepal dividido en pequeños distritos. Tu dataset tiene la polygon geometry de cada distrito, un recuento de población y una columna de texto que indica la zona administrativa más grande a la que pertenece el distrito. Quieres un mapa que muestre solo las zonas. Llamas al método dissolve en tu dataframe espacial y pasas la columna de la zona como tu objetivo de agrupación. GeoPandas realiza entonces dos operaciones distintas simultáneamente. Primero, procesa las geometrías espaciales. Agrupa todas las filas de los distritos por el nombre de su zona, toma sus geometrías y las une en una sola feature. Los límites internos de los distritos se borran, dejándote con un límite exterior continuo para la nueva zona. Segundo, tiene que decidir qué hacer con los datos tabulares asociados a esas formas, como tu columna de población. Aquí está la clave. Muchos usuarios ejecutan el método dissolve, observan su nuevo mapa de zonas y se dan cuenta de que los recuentos de población son drásticamente erróneos. Esto no es un error de geometría. Por defecto, el método dissolve procesa los datos tabulares simplemente tomando el valor de la primera fila que encuentra en cada grupo. Ignora el resto. Para agregar cantidades numéricas correctamente, debes usar explícitamente el parámetro aggregate function. Cuando llamas a dissolve agrupando por zona, también pasas el parámetro aggregate function configurado en sum. Ahora, mientras GeoPandas fusiona físicamente las formas de los distritos, también suma matemáticamente las cifras de población de los distritos. La fila de la zona resultante contendrá la población total agregada correcta. Este parámetro también acepta otras funciones estadísticas estándar. Si tus datos granulares contuvieran los ingresos medios por hogar, podrías pasar mean en lugar de sum. Si contuvieran mediciones de elevación, podrías pasar max para encontrar el punto más alto en la región recién fusionada. dissolve combina la unión espacial con la agregación tabular en un solo paso sincronizado, dándote un control total sobre la escala geográfica de tus datos. ¡Gracias por escuchar, happy coding a todos!
10

Mapas estáticos: Creando mapas coropléticos y trazando capas

4m 17s

Convierte tus datos espaciales en visualizaciones atractivas. Este episodio cubre la integración de GeoPandas con Matplotlib, enseñándote a crear mapas coropléticos personalizados, superponer múltiples conjuntos de datos y manejar datos faltantes.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. GeoPandas, episodio 10 de 11. No necesitas exportar tus datos espaciales a un software GIS de escritorio pesado solo para ver qué aspecto tienen. Puedes generar visualizaciones listas para publicar directamente en tu entorno Python. La solución es el mapeo estático: crear mapas coropléticos y trazar capas. El núcleo de la visualización en GeoPandas es el método plot. Todos los GeoDataFrame lo tienen. Llamar a plot sin argumentos dibuja tu geometría inmediatamente. Es muy sencillo, pero por debajo, es un wrapper de matplotlib. Esto significa que obtienes un mapa con una sola línea de código, pero sigues teniendo toda la potencia de matplotlib disponible para ajustar colores, ejes y estilos. Un plot básico simplemente dibuja formas. Para hacer un mapa coroplético, donde las formas se colorean según los valores de los datos, usas el argumento column. Pasas el nombre de la columna que contiene tus datos. GeoPandas mapeará los valores de esa columna a una escala de colores. Para ayudar a los espectadores a entender esa escala, puedes añadir una leyenda pasando legend igual a True. Por defecto, hacer un plot de una columna numérica continua crea un degradado de color suave. A menudo, es mejor agrupar tus datos en bins distintos. GeoPandas se integra con una librería llamada mapclassify para hacer esto. Añadiendo el argumento scheme a tu método plot, puedes ordenar tus datos en clases. Por ejemplo, poner scheme en quantiles divide tus geometrías en grupos del mismo tamaño basándose en sus valores, haciendo que los patrones espaciales sean mucho más fáciles de leer. Los datasets del mundo real a menudo tienen huecos. Si estás construyendo un mapa coroplético y a algunas filas les falta el valor de los datos que estás representando, GeoPandas las eliminará del mapa por completo. Esto deja espacios en blanco muy raros. Para arreglar esto, usas el argumento missing keywords. Pasas un diccionario de opciones de estilo, como poner el color en gris claro, para que esas formas sigan apareciendo en el mapa sin confundir los datos. Ahora, la segunda parte de esto es superponer múltiples datasets. La mayoría de los mapas útiles combinan múltiples capas. Supón que tienes una capa base de barrios de una ciudad y quieres superponer un scatter plot con las ubicaciones de los supermercados. Esto lo haces compartiendo un objeto axis de matplotlib. Primero, creas un axis. Luego, dibujas los polígonos de tus barrios, pasando ese axis al método plot. Después, dibujas los puntos de tus supermercados, pasando exactamente ese mismo axis. Ambos datasets se dibujan en el mismo canvas. Para controlar qué capa queda arriba, usas el argumento z order. Un z order más bajo va al fondo. Así que le das a tus barrios un z order de uno, y a tus supermercados un z order de dos. Los puntos se renderizarán limpiamente sobre los polígonos. Presta atención a esta parte. A veces quieres que tus polígonos base sean completamente transparentes para que solo se vean sus bordes. Si pones el argumento face color en None, como un objeto de Python sin comillas, matplotlib lo ignora y aplica un color de relleno por defecto. Tienes que poner face color como el string none para hacerlo transparente. Alternativamente, puedes saltarte esto por completo llamando a la propiedad boundary en tu GeoDataFrame y dibujando eso en su lugar. Es un enfoque mucho más seguro para dibujar solo los contornos. La verdadera fuerza del mapeo en GeoPandas es su escalabilidad fluida desde comprobaciones rápidas de datos hasta gráficos listos para publicar. Obtienes una visualización inmediata con una sola llamada a un método, pero nunca pierdes el control subyacente de matplotlib cuando necesitas crear capas de historias espaciales complejas. Eso es todo por este episodio. Gracias por escuchar, ¡y seguid creando!
11

Exploración interactiva y más allá

4m 00s

Da vida a tus mapas. Analizamos el método `explore()` para crear mapas interactivos basados en la web. Finalmente, concluimos nuestro viaje por GeoPandas y te preparamos para empezar a construir aplicaciones espaciales en el mundo real.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. GeoPandas, episodio 11 de 11. Los mapas estáticos son geniales para una presentación final, pero cuando estás en plena fase de análisis, una imagen plana resulta increíblemente limitante. Necesitas hacer zoom en un barrio específico, hacer pan a lo largo de un río, y hacer hover sobre una forma para inspeccionar los datos raw que se ocultan debajo. Exploración interactiva y más allá es exactamente de lo que trata este episodio. En episodios anteriores, utilizamos el método plot para dibujar imágenes estáticas de nuestras geometrías. GeoPandas también ofrece una alternativa llamada explore. Cuando llamas a explore en un GeoDataFrame, genera un mapa web totalmente interactivo directamente en tu entorno. Internamente, utiliza una librería de Python llamada Folium, que a su vez está construida sobre la popular librería de mapas de JavaScript, Leaflet. La belleza del método explore es que su API imita a la perfección al método plot. No tienes que aprender un conjunto de argumentos completamente nuevo para pasar de una imagen estática a un mapa interactivo. Toma como ejemplo el dataset de los distritos de Nueva York. Llamas a explore en el dataset y le pasas el argumento column configurado en area. El output es inmediato y táctil. Aparece un mapa que muestra la ciudad, y puedes usar tu ratón para hacer pan y hacer scroll para hacer zoom en calles específicas. Aquí está la clave. Cuando haces hover con tu cursor sobre Brooklyn o Queens, aparece automáticamente un tooltip. Este tooltip muestra los datos tabulares subyacentes para esa geometría específica, incluyendo el valor exacto de area que le indicaste para colorear el mapa. Obtienes contexto visual y números raw exactamente al mismo tiempo. Hay un detalle técnico que debes tener en cuenta. Necesitas entender qué devuelve realmente el método explore. El método plot genera un archivo de imagen ligero. El método explore devuelve un objeto pesado repleto de HTML y JavaScript. Esto es genial cuando estás trabajando dentro de un Jupyter Notebook, porque el navegador renderiza el mapa interactivo a la perfección. Pero si tu objetivo final es generar un informe PDF estático o una simple impresión, explore es la herramienta equivocada. Los elementos web interactivos simplemente no se trasladarán al papel. Usa explore para investigar tus datos, y vuelve a plot cuando necesites publicar un documento estático. Esto nos lleva al verdadero poder del framework GeoPandas. A lo largo de esta serie, hemos visto cómo actúa como un pegamento cohesivo para el ecosistema espacial de Python. Toma pandas y le da conciencia espacial. Delega las matemáticas geométricas pesadas a Shapely. Se apoya en Pyogrio para leer y escribir archivos a altas velocidades. Finalmente, se conecta con librerías de visualización para darte feedback instantáneo. Puedes cargar un dataset masivo, filtrarlo, calcular distancias, realizar spatial joins, y mapear los resultados en un lienzo interactivo, todo en solo unas pocas líneas de Python. La documentación oficial de GeoPandas es excelente, y leer sus guías de getting started es la mejor manera de consolidar lo que has aprendido. Abre un notebook, carga algunos datos que te importen, y empieza a experimentar. Si tienes una idea para un tema que deberíamos cubrir, pásate por devstories.eu y cuéntanoslo. La verdadera ventaja de este framework es que elimina la complejidad de las matemáticas espaciales, permitiéndote tratar la geografía no como un obstáculo, sino como simplemente otro tipo de dato para filtrar, hacer join, y analizar. Eso es todo por este episodio. Gracias por escuchar, ¡y sigue construyendo!