Nadie puede negar la evidencia: GeoPandas es cada vez más utilizada dentro del ecosistema GIS y no es nada raro. Se trata de una librería de Python muy popular dentro del sector geoespacial al trabajar con Python.
GeoPandas dota a Python de acceso a una serie de funcionalidades realmente útiles para realizar análisis geoespacial, gestionar geoinformación y crear salidas cartográficas de nuestros datos geográficos.
En este artículo pretendemos realizar una pequeña introducción a esta fantástica librería, tratando de resumir qué es Geopandas y qué operaciones podemos realizar con ella.
¿Qué es Geopandas?
GeoPandas es una de las librerías geoespaciales más completas de Python. Podríamos decir que es sencilla a la vez que compleja.
Decimos sencilla por la facilidad de uso y el poco esfuerzo que supone habituarse a trabajar con ella una vez se comprenden sus principales conceptos. Asimismo, es relativamente compleja debido a la cantidad de opciones y operaciones que permite cubrir en solitario o en combinación con otras librerías.
Su origen se remonta a 2013 como proyecto, producto de una Conferencia de Scipy, y ha sido mantenida hasta día de hoy por una larga lista de contribuidores.
En el sitio oficial de Geopandas la definen como:
Un proyecto open source cuyo objetivo es facilitar el trabajo con datos geoespaciales.
Fuente: web oficial de GeoPandas
GeoPandas se basa en la librería Pandas de Python, adaptando varias de sus clases para dar soporte a datos con geometrías asociadas.
Además de Pandas, GeoPandas también se sustenta sobre la librería Shapely que permite llevar a cabo operaciones geoespaciales con las geometrías asociadas a esos datos.
¿Qué podemos realizar con Geopandas?
Podemos resumir las utilidades de GeoPandas en los siguientes puntos:
- Leer datos geoespaciales de archivos en múltiples formatos
- Escribir datos geoespaciales en archivos de múltiples formatos.
- Calcular y obtener indicadores geométricos como áreas, distancias, coordenadas, centroides, puntos sobre superfície, perímetro, generar buffers, uniones, transformar geometrías, etc…
- Generar vistas de mapas sencillas personalizando su aspecto.
- Realizar análisis espacial, es decir, estudiar las relaciones espaciales entre distintas geometrías.
- Asignar proyecciones a datos o reproyectar los datos a otro SRC
- Joins espaciales entre distintos orígenes de datos
- Tareas de geocodificación
Así pues, podríamos decir que GeoPandas viene a ser una especie de «navaja suiza» dentro del ecosistema de librerías GIS de Python.
Resulta tremendamente útil, más aún si la combinamos con otras librerías que nos permitan, por ejemplo, conectar a bases de datos, realizar visualizaciones avanzadas, ejecutar APIs, etc…
Supone una base imprescindible para manipular datos geoespaciales sin la necesidad de disponer de un GIS de escritorio (excepto lógicamente para geoprocesos complejos, tratamiento de formatos no soportados o para la edición de datos, entre muchos otros) o sin almacenar nuestros datos en una base de datos como PostGIS.
Principales conceptos de GeoPandas
Como punto de inicio es imprescindible conocer la forma en que trabaja Geopandas y sus principales estructuras de datos.
GeoPandas trabaja con dos clases heredadas y adaptadas de Pandas, la librería de la que proviene: GeoSeries y GeoDataFrame, equivalentes a las Series y DataFrame de Pandas.
GeoSeries
GeoSeries se define de la siguiente manera:
Un elemento vectorial formado por una o múltiples formas geométricas que corresponden a una única observación.
Fuente: web oficial de GeoPandas
Es decir, se trata de la definición geométrica de un objeto, ya esté compuesto por una única geometrías o varias que no necesariamente deben ser iguales.
En este sentido, GeoPandas acepta tres tipos de geometrías:
- Puntos (y multipuntos)
- Líneas (y multilíneas)
- Polígonos (y multipolígonos)
A partir de la definición geométrica podremos ejecutar operaciones de análisis espacial en Python utilizando los métodos que habilita GeoSeries.
Puedes revisar todos los métodos que habilita GeoSeries en este enlace.
GeoDataFrame
GeoDataFrame, en cambio, se define como:
Una estructura de datos tabular que contiene una columna con un objeto Geoseries que contiene la geometría.
Fuente: web oficial de GeoPandas
Por hacer un paralelismo con un archivo GIS, podríamos decir que GeoSeries es la geometría de una capa, que define dónde y cómo se sitúa un elemento cuyos atributos quedan recogidos en el conjunto del GeoDataFrame.
En un GeoDataFrame, la columna que contiene la geometría mediante la GeoSeries tiene unas características especiales propias.
Un punto muy importante a tener en cuenta es que un GeoDataFrame puede tener múltiples columnas de geometría. Es decir, podremos definir un objeto mediante sus atributos alfanuméricos acompañado de múltiples geometrías válidas asociadas al mismo.
Supongamos que tenemos un GeoDataFrame con todos los edificios de un barrio. Pues bien, podríamos tener 3 columnas cada una con un tipo de geometría distinto: una podría definir el polígono que ocupa, otra el perímetro y otra columna definiría la ubicación del portal de acceso al edificio.
No obstante, sólo puede «activarse» una de las columnas geométricas a la vez. Las demás pierden, en cierto modo, el status de GeoSeries dentro del contexto de ese GeoDataFrame para pasar a ser tratadas como una columna más…
El método encargado de definir qué columna pasa a representar la geometría «oficial» en cada momento es GeoDataFrame.setGeometry().
Otro punto importante es que GeoDataFrame nos habilita para poder empezar a leer y escribir datos, crear mapas con Geopandas, indexar datos, etc.
Más información acerca de los métodos y funcionalidades de GeoDataFrame aquí.
Cómo instalar la librería Geopandas y primeros pasos
Para instalar GeoPandas podemos hacerlo mediante conda o bien utilizando pip.
Tal y como describen en la documentación oficial, la forma de hacerlo con conda es mediante el siguiente comando:
conda install -c conda-forge geopandas
Si por el contrario queremos hacerlo con pip:
pip install geopandas
O bien directamente desde el repo de GitHub con la última versión de desarrollo:
pip install git+git://github.com/geopandas/geopandas.git
Si tienes problemas con su instalación puedes consultar este enlace.
Además de las dependencias mencionadas anteriormente en este post, GeoPandas cuenta también con otras dependencias como Numpy, Fiona o PyProj, además de ciertas librerías de bajo nivel como GEOS, GDAL o PROJ.
Más información sobre dependencias aquí.
Antes de entrar a ejecutar GeoPandas es recomendable familiarizarse con los principales conceptos de pandas y shapely, así como con las características de los formatos de archivo GIS vectorial más habituales.
Dejamos asimismo el enlace a la documentación extendida de su API para consultarla en detalle.