Identifier les clusters dans les données de points vectoriels en utilisant QGIS?

34

J'ai un jeu de données vectorielles de points de données de bande large rurale (à quelle vitesse, etc.) et j'aimerais explorer s'il existe des groupes de points ayant des caractéristiques similaires et tracer des polygones les englobant.

Par exemple, je peux avoir 45 000 points dans un seul jeu de données PostGIS réparti sur un paysage. Je souhaite identifier les grappes situées à x km les unes des autres et où la vitesse est inférieure à y kbps, et produire des coques convexes pour chaque grappe qualifiée.

Y a-t-il un moyen simple de faire cela dans QGIS, par exemple?

Adrian
la source
3
Vous voudrez peut-être faire attention à la nature du haut débit. Les grandes vitesses se produiront dans les zones urbaines; conglomérats industriels; rayonnant le long des routes à partir de centraux téléphoniques, de modems et d'autres infrastructures fibre / câble / DSL; et émettre à partir de certaines tours cellulaires (selon votre définition de «large bande»). Ainsi, les vitesses élevées sembleront se regrouper et les vitesses inférieures ressembleront à des trous dans les grappes. En particulier, il est peu probable que les coques convexes soient même des descriptions décentes des régions à faible vitesse. Il serait bon de savoir comment vous avez l'intention d'interpréter les "grappes" que vous trouvez.
whuber
Merci pour l'aide. J'étudie les zones plus rurales, où l'architecture du haut débit filaire peut engendrer des situations plus inhabituelles en raison de la distribution d'armoires de rue et de lignes directement alimentées sur des poteaux, ainsi que de la géographie des zones, par exemple. Par conséquent, vous trouvez des clusters qui peuvent constituer un point de départ utile pour élaborer des solutions locales et une étape importante dans l’élaboration d’une stratégie. En fait, vous pouvez même les trouver dans les zones urbaines, souvent à cause de l'héritage industriel ou de choses difficiles à traverser telles que les lignes de chemin de fer et les rivières.
Adrian

Réponses:

15

J'ai combiné des extraits de plusieurs suggestions et ajouté un peu des miens pour trouver une solution qui me convient - et tout au sein de QGis!

J'ai d'abord lancé une commande PostGis SELECT pour trouver les points qui ont les attributs communs appropriés et qui se trouvent à moins de x km les uns des autres:

SELECT DISTINCT code de poste, s1.the_geom, s1.gid DE broadband_data AS s1 REJOINDRE broadband_data AS s2 SUR ST_DWithin (s1.the_geom, s2.the_geom, 1000) WHERE s1.postcode! = S2.postcode AND s1.fastest_broadband <= 2000

(Assez bien tiré du très bon livre PostGis in Action de Manning , ajoutant seulement une auto-jointure)

J'ai ensuite chargé le plugin ManageR de Carson Farmer et importé la couche. De là , j'ai suivi le processus de regroupement de PAM proposé ici , et le résultat exporté dans un fichier de forme, sur laquelle ont été calculées Convex Hulls en quelques secondes à l' aide fTools (Carson ne se déplacer!).

Adrian
la source
La 1ère édition de PostGIS in Action est épuisée. Voici un lien vers la 2e édition manning.com/books/postgis-in-action-second-edition et un lien vers le premier chapitre qui est gratuit manning-content.s3.amazonaws.com/download/a/… qui est idéal pour commencer à avoir une photo de PostGIS
Martin Hügi
8

Bien que ce ne soit pas la solution QGIS, je choisirais personnellement une analyse exploratoire avec SaTScan . C'est rapide, bien documenté et largement appliqué, vous ne devriez donc pas avoir de problèmes de démarrage. 45k points pourraient toutefois nécessiter de la RAM.

Je ne sais pas s'il peut lire directement à partir de Postgres mais importe facilement à partir de fichiers dbf et de fichiers texte.

Le résultat de l’analyse peut ensuite être facilement lu dans Postgres ou QGIS. Vous pouvez décider de rechercher des groupes circulaires ou des ellipses (il peut être utile de les utiliser s'il existe un type particulier de colonies dans vos données, par exemple des villes / villages de formes longues dans des vallées, etc.). Vous pouvez ensuite générer des polygones ou des ellipses ou afficher uniquement les emplacements membres des clusters.

Pour un aperçu rapide des résultats dans Google Earth, vous pouvez également utiliser l'outil de conversion SaTScan vers Google Earth de NAACCR .

Il est important de noter que si vous décidez de faire des simulations de Monte Carlo (99 minimum, je pense), vous pourrez également en dire plus sur la signification statistique de vos clusters. L’interprétation et la justification de ces groupes seront un autre problème, comme cela a été débattu dans les sciences spatiales depuis au moins deux décennies (je pense;).

Vous pouvez essayer de lancer une analyse purement spatiale en recherchant des grappes de valeurs hautes, basses ou basses. Si vous avez des attributs temporels dans vos données * (agrégations quotidiennes, hebdomadaires), alors je pense qu'il serait vraiment intéressant de faire fonctionner des modèles spatio-temporels.

radek
la source
2
Bonne
mine
5

SciPy a un package de clustering (pour python), vous pouvez l’utiliser dans la console python, écrire un simple plugin pour le faire ou utiliser PL / python dans postgis.

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

Après l'analyse, utilisez simplement f-tools pour créer les coques convexes.

Pablo
la source
Je suis un utilisateur simple avec très peu d'expérience de python mais je vais jeter un coup d'oeil - je sais que j'ai besoin d'apprendre!
Adrian
La classification SciPy prend-elle en compte les relations spatiales entre les points?
Radek
1
Vous venez d'ajouter deux autres covariables pour les coordonnées x et y de votre point.
Jose
5

Il y a un exemple similaire de ce que vous voulez faire en utilisant R et GRASS ici . Au lieu de cela, vous pouvez utiliser les outils de classification de scip comme suggéré, puis effectuer les calculs de coque convexe à l'aide de cette méthode .

Jose
la source
3

Vous pouvez essayer le plugin Ftools. Vector> Geoprocessing Tools> Convex Hulls.

Il existe une option pour Create convex hulls based on input field, le paramètre de champ de saisie doit provenir des attributs de vos points de saisie.

maning
la source
Merci pour l'aide. Le bit des coques convexes créera les polygones, mais il n'indique pas si les clusters existent ni où ils pourraient se trouver. J'aimerais vraiment trouver un moyen d'associer des points ayant des caractéristiques similaires à moins de x km les uns des autres. Je suppose que je devrais exécuter un script qui identifie de manière unique l'existence de clusters et met à jour un champ supplémentaire dans la table postgis pour les membres de chaque cluster. Par exemple, créer une triangulation de Delaunay et filtrer tous les points où les côtés des triangles sont plus longs que x km mais je ne sais pas comment faire cela
Adrian