En el siguiente artículo vamos a conocer el método de análisis de agrupamiento por densidad DBSCAN usando la biblioteca Python para aprendizaje automático Scikit-learn. El caso de ejemplo se centrará en la generación de agrupaciones de construcciones.
¿Qué es una análisis de agrupamiento o clustering?
Las técnicas de agrupamiento o clustering se utilizan para identificar grupos naturales que comparten ciertas similitudes entre sí dentro de un conjunto de datos. Este tipo de técnicas son ampliamente explotadas en áreas como el marketing, los negocios (segmentación de clientes, análisis de comportamiento de compra…) o las redes sociales pero también pueden también ser usadas teniendo en cuenta la componente geográfica de la información.
Los métodos de clustering enfocados a la identificación de patrones, categorías o relaciones basadas en proximidad o distancia como K-Means, Clustering Jerárquico o DBSCAN son algoritmos manejados en el diagnóstico geográfico y que pueden ser aplicados a la planificación urbana, diseño de redes de transporte, geografía de la salud o el análisis territorial.
DBSCAN
El algoritmo Density-Based Spatial Clustering of Applications with Noise (DBSCAN) está basado en la densidad y puede ser usado para identificar agrupaciones en base a la misma de las entidades espaciales a analizar.
A diferencia de otros métodos que requieren especificar el número de clústeres de antemano, DBSCAN automáticamente determina el número de clusters basándose en dos parámetros:
- Distancia máxima entre dos muestras para que una sea considerada en la vecindad de la otra
- Densidad de puntos mínimos necesarios para formar un clúster.

Esquema de representación. Los puntos en rojo cumplirían los criterios de agrupación mientas que los azules quedarían fuera (outliers). B y C se sitúan en los bordes del análisis. (Fuente: Wikipedia)
Este algoritmo es particularmente útil en el análisis geográfico porque puede manejar datos espaciales de formas irregulares y detectar ruidos (outliers).
El algoritmo se encuentra presente en la mayoría de los software y paquetes de análisis SIG. Podemos encontrarlo dentro de QGIS y ArcGIS. Es también una función accesible dentro de PostGIS (ST_ClusterDBSCAN). En este artículo conoceremos cómo usarlo gracias a la biblioteca Python de machine learnig Scikit-learn.

Si estás interesado en aprender cómo usar las librerías Python dentro del campo del análisis geográfico puedes consultar nuestro Curso de análisis geográfico con Python y librerías geoespaciales.
Caso Práctico: Análisis de densidad de edificaciones
Como hemos comentado, vamos a realizar una análisis de densidad básico sobre un conjunto de edificaciones con el objetivo de identificar posibles patrones de agrupación de las mismas.
Modelos más avanzados de este tipo de análisis venimos utilizándolos por ejemplo, en la elaboración de diferentes trabajos de planificación territorial y urbanística que se están llevando desde Geoinnova en colaboración con Abtemas.
Librerías Python
Junto con Scikit-learn, las librerías Python que vamos a usar en este ejemplo son:
- Pandas. Librería especializada en el manejo y análisis de estructuras de datos.
- Numpy. Librería para manejo de “arreglos” de datos y cálculos matemáticos
- GeoPandas. Similar a Pandas pero funciones y capacidades de gestión de datos geográficos.
Todo el código será manejado dentro de un notebook de Jupyter por lo que podremos realizar una representación de los resultados de nuestros datos usando Matplotlib.
Tras la instalación de las correspondientes librerías comenzaremos con su importación dentro de notebook.

Carga y manejo de datos
Nuestros datos se encuentran en un archivo CSV que contiene columnas con las coordenadas de localización X e Y que representan el centroide de la construcción. Con Pandas recuperamos los datos del CSV y crearemos un dataframe que posteriormente usaremos.

Cálculo de agrupaciones por densidad con DBSCAN
Una vez que disponemos de nuestros datos vamos a realizar el análisis de agrupaciones por densidad. Para este estudio, los criterios que vamos a aplicar son los siguientes:
- Distancia máxima entre edificaciones 150 metros (eps). Consideramos esta medida como un parámetro significativo de vecindad entre construcciones.
- Número mínimo de densidad de edificaciones 3 (min_samples) o valor de vecindad. A pesar de que se cumpla la distancia anterior, solo se tendrán en cuenta aquellos casos en los que se cumpla para 3 o más construcciones.

Para conocer con más detalle el usos de DBSCAN puedes acceder a la documentación oficial en el siguiente enlace https://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html
Informe y estadísticas de resultados
Usando funciones básicas de Python como len(), set() y estadísticas generaremos un sencillo informe de resultados que nos ofrece los indicadores:
- Total de edificaciones: 667
- N.º de agrupaciones: 39
- N.º de edificaciones (ruido) que están a una distancia > 150 m: 136
- N.º mínimo edificaciones por agrupación: 3
- N.º máximo de edificaciones por agrupación: 74
- N.º medio de edificaciones por agrupación: 13.62

Representación gráfica del análisis con Matplotlib
Usando la popular librería de representación Matplotlib podemos genera un “mapa” que represente los resultados de nuestro análisis.
La configuración es muy básica. Lo único que añadimos son unas líneas de código que nos creen una paleta de colores para asignarla a cada agrupación. También se añade el color negro para aquellas localizaciones que no cumplen los criterios del análisis.

Este es el resultado de final.

Generación de archivo SIG y visualización con QGIS.
Gracias a la librería GeoPandas exportamos los resultados en un GeoJSON y como buenos “giseros” lo cargamos en nuestros SIG de escritorio de referencia QGIS junto con la ortofotografía del PNOA.


Conclusiones
Con este sencillo ejemplo, que puede hacerse más complejo si introducimos análisis por categorizaciones (ej. tipo de usos), relación con redes de transporte, índices de edificabilidad, y manejando librerías geográficas de código abierto podemos ver el gran potencial de este tipo de métodos de análisis espacial y como son de gran apoyo para la toma de decisiones de índole geográfico.
¿Quieres comentarnos algo? Adelante!