36 votos

Identificación de clusters en datos de puntos vectoriales mediante QGIS?

Tengo un conjunto de datos vectoriales de puntos de banda ancha rural (velocidad, etc.) y me gustaría explorar si hay grupos de puntos con características similares, y trazar polígonos que los engloben.

Por ejemplo, puedo tener 45.000 puntos en un único conjunto de datos PostGIS distribuidos en un paisaje. Quiero identificar los clusters que se encuentran a una distancia de x km entre sí y en los que la velocidad es inferior a y kbps, y producir cascos convexos para cada cluster calificado.

¿Existe una forma sencilla de hacerlo en QGIS, por ejemplo?

3 votos

Es posible que quieras prestar atención a la naturaleza de la banda ancha. Las altas velocidades se producirán dentro de las zonas urbanas; las aglomeraciones industriales; se irradian a lo largo de las carreteras desde los CO, los módems y otras infraestructuras de fibra/cable/DSL; y se emiten desde ciertas torres de telefonía móvil (dependiendo de su definición de "banda ancha"). Por lo tanto, la alto velocidades parecerán agruparse y el baja las velocidades se verán como lagunas en los racimos. En particular, es poco probable que los cascos convexos sean siquiera descripciones decentes de las regiones de baja velocidad. Sería bueno saber cómo pretendes interpretar los "clusters" que encuentres.

0 votos

Gracias por la ayuda. Estoy estudiando las zonas más rurales, donde la arquitectura de la banda ancha por cable puede arrojar situaciones más inusuales debido a la distribución de los armarios de la calle y las líneas alimentadas directamente en los postes, así como la geografía de las zonas, por ejemplo. En consecuencia, se encuentran agrupaciones que pueden ser un punto de partida útil para la creación de soluciones locales, y pueden ser un paso importante en el desarrollo de una estrategia. De hecho, se pueden encontrar incluso en zonas urbanas, a menudo debido a la herencia industrial o a cosas como líneas de ferrocarril y ríos que resultan difíciles de cruzar.

15voto

quux Puntos 4878

He combinado partes de varias sugerencias y he añadido un poco de las mías y he encontrado una solución que me funciona bien, ¡y todo desde QGis!

Primero ejecuté un SELECT de PostGis para encontrar los puntos que tienen los atributos comunes correctos y que se encuentran a una distancia de x km entre sí:

SELECT DISTINCT s1.código_postal,s1.el_geom, s1.gid FROM broadband_data AS s1 JOIN broadband_data AS s2 ON ST_DWithin(s1.the_geom, s2.the_geom,1000) WHERE s1.postcode != s2.postcode AND s1.fastest_broadband <= 2000

(Bastante directo de la muy buena obra de Manning PostGis en acción libro, sólo añadiendo una auto-unión)

Luego cargué el plugin ManageR de Carson Farmer e importé la capa. A partir de aquí seguí el proceso de agrupación PAM sugerido aquí y exporté el resultado a un archivo de forma, sobre el que se calcularon los cascos convexos en segundos utilizando fTools (¡Carson sí que se mueve!).

1 votos

La primera edición de PostGIS in Action está agotada. Aquí hay un enlace a la 2ª edición manning.com/books/postgis-in-action-second-edition y un enlace al primer capítulo que es gratuito manning-content.s3.amazonaws.com/download/a/ que es ideal para empezar a hacerse una idea de PostGIS

8voto

Justin Walgran Puntos 552

Aunque no es una solución QGIS, yo personalmente optaría por un análisis exploratorio utilizando SaTScan . Es rápido, bien documentado y se aplica ampliamente, por lo que no debería tener problemas para arrancar. Sin embargo, 45k puntos podrían requerir algo de RAM.

No estoy seguro de si puede leer directamente desde Postgres pero importa fácilmente desde archivos dbf y de texto.

El resultado del análisis puede leerse fácilmente en Postgres o QGIS. Puede decidir buscar clusters circulares o elipses (puede ser útil si hay un tipo particular de asentamientos en sus datos, por ejemplo, ciudades/pueblos de forma alargada en valles, etc.). A continuación, puede generar polígonos o elipses o mostrar sólo las localidades que son miembros de los clusters.

Para obtener una vista previa rápida de los resultados en Google Earth, también se puede utilizar la aplicación de NAACCR Herramienta de conversión de SaTScan a Google Earth .

Es importante que, si decide realizar simulaciones de Monte Carlo (99 como mínimo, creo), también podrá decir algo sobre la importancia estadística de sus agrupaciones. La interpretación y justificación de estos clusters será otra cuestión, ya que se ha debatido en las ciencias espaciales durante las dos últimas décadas al menos (creo ;).

Podría intentar realizar un análisis puramente espacial en busca de grupos de valores altos, bajos o hagh y bajos. Si tienes algunos atributos temporales en tus datos (agregaciones diarias o semanales), creo que sería muy interesante ejecutar algunos modelos espacio-temporales.

2 votos

Tiene buena pinta - Buena respuesta

5voto

Pablo Puntos 6414

SciPy tiene un paquete de clustering (para python), puedes usarlo en la consola de python, escribir un simple plugin para hacerlo o usar PL/python dentro de postgis.

http://docs.scipy.org/doc/scipy/reference/cluster.html

Después del análisis sólo hay que utilizar f-tools para crear los cascos convexos.

0 votos

Soy un simple usuario con muy poca experiencia en python pero le echaré un vistazo, ¡sé que necesito aprender!

0 votos

¿tiene SciPy clustering en cuenta las relaciones espaciales entre los puntos?

1 votos

Sólo tienes que añadir dos covariables más para la coordenada x e y de tu punto.

5voto

Antti Sykäri Puntos 10381

Hay un ejemplo similar de lo que se quiere hacer usando R y GRASS aquí . Como alternativa, puede utilizar las herramientas de agrupación de scipy como se sugiere, y luego hacer los cálculos del casco convexo utilizando este método .

3voto

Haydar Puntos 699

Puedes probar el plugin Ftools. Vector > Geoprocessing Tools > Convex Hulls .

Hay una opción para Create convex hulls based on input field El parámetro del campo de entrada debe provenir de los atributos de sus puntos de entrada.

0 votos

Gracias por la ayuda. El bit de los cascos convexos creará los polígonos, pero no identifica si existen grupos o dónde pueden estar. Realmente me gustaría encontrar una manera de asociar puntos con características similares dentro de x km de cada uno. Supongo que necesitaría ejecutar algún script que identifique de forma única la existencia de clusters y actualice un campo adicional en la tabla postgis para los miembros de cada cluster. Por ejemplo, creando una triangulación de Delaunay y filtrando todos los puntos en los que los lados de los triángulos sean mayores de x km, pero no tengo ni idea de cómo hacerlo

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X