Raggruppamento dei dati geografici in base alla posizione del punto e ai valori dei punti associati


15

Dati punti dati con longitudine, latitudine e un terzo valore di proprietà di questo punto. Come posso raggruppare i punti in gruppi (sottoregioni geografiche) in base al valore della proprietà? Ho cercato su Google e ho capito che questo problema sembra essere chiamato "clustering limitato nello spazio" o "regionalizzazione". Tuttavia, non ho familiarità con la gestione dei dati geografici e non ho idea di quale tipo di algoritmi sia buono e quali pacchetti python / R siano adatti a questo compito.

Per dare un'idea più intuitiva di ciò che voglio, supponiamo che i miei grafici a dispersione dei dati siano i seguenti: inserisci qui la descrizione dell'immagine

Quindi ogni punto è un punto, x è longitudine, y è latitudine e la mappa dei colori mostra se il valore è grande o piccolo. Voglio dividere questi punti in sottoregioni / gruppi / cluster in base alla posizione e alla somiglianza dei valori. Come il seguente (non è esattamente quello che voglio, solo per mostrare un'idea intuitiva.): inserisci qui la descrizione dell'immagine

Quindi come posso raggiungere questo obiettivo?


La tua domanda è un po 'ampia così com'è. Hai provato qualcuno dei pacchetti R o Python?
John Powell,

@ JohnBarça Attualmente penso che il pacchetto clusterPy sembri utile e rise-group.org/risem/clusterpy/clusterpy0_9_9/… mostra come usarlo. Tuttavia, i miei dati sono tre punti di colonna: latitudine, longitudine e valore. Desidero dividere i punti in gruppi di sottoregioni in base al valore del punto. Il formato di input del pacchetto sembra un poligono o una griglia e non ho capito come usarlo direttamente per gestire i punti spaziali.
Excalibur,

1
controlla le domande correlate alla tua domanda, ad esempio: gis.stackexchange.com/questions/17638/…
Iris,

@Iris Grazie! Ho controllato la pagina Web, ma sembra che non riesca ancora a trovare un modo per gestire direttamente tali punti spaziali di 3 colonne con proprietà.
Excalibur,

@Excalibur per qualsiasi raggruppamento geografico Al momento consiglierei HDBScan. Per quanto riguarda il tuo terzo valore, questo potrebbe essere visto come una sorta di peso, immagino. Senza proiettare tutti i valori nello stesso spazio, questo potrebbe essere un compito complicato. Potete fornire alcune informazioni di base sul vostro obiettivo?
Timothy Dalton,

Risposte:


4

Il pacchetto rioja fornisce funzionalità per il clustering gerarchico vincolato. Per quello che stai pensando come "spazialmente limitato", specificheresti i tuoi tagli in base alla distanza, mentre per la "regionalizzazione" potresti usare k vicini più vicini. Consiglio vivamente di proiettare i dati in modo che si trovino in un sistema di coordinate basato sulla distanza.

require(sp)
require(rioja)

data(meuse)
  coordinates(meuse) <- ~x+y
  cdat <- data.frame(x=coordinates(meuse)[,1],y=coordinates(meuse)[,2])
  rownames(cdat) <- rownames(meuse@data)

# Constrained hierarchical clustering 
chc <- chclust(dist(cdat), method="conslink")

# Using kNN with 3 neighbors
chc.n3 <- cutree(chc, k=3) 

# Using distance 
chc.d200 <- cutree(chc, h=200) 

meuse@data <- data.frame(meuse@data, KNN=as.factor(chc.n3), DClust=chc.d200)

opar <- par
  par(mfcol=c(1,2))  
   cols <- topo.colors(length(unique(meuse@data$KNN)))  
    color <- rep("xx", nrow(meuse@data))
      for(i in 1:length(unique(meuse@data$KNN))) {
        v <- unique(meuse@data$KNN)[i] 
          color[(meuse@data$KNN == v)] <- cols[i]
        }
    plot(meuse, col=color, pch=19, main="kNN Clustering")
      box()

    cols <- topo.colors(length(unique(meuse@data$DClust)))  
    color <- rep("xx", nrow(meuse@data))
      for(i in 1:length(unique(meuse@data$DClust))) {
        v <- unique(meuse@data$DClust)[i] 
          color[(meuse@data$DClust == v)] <- cols[i]
        }
    plot(meuse, col=color, pch=19, main="Distance Clustering")
      box() 
par <- opar

1
Ciao @JeffreyEvans, grazie per la tua risposta! Quindi stai suggerendo di proiettare il terzo valore della proprietà in un altro tipo di coordinate, giusto? Tuttavia, penso che dovrebbero esistere alcuni algoritmi esistenti che distinguono (lon, lat) con attributi associati, quindi raggruppano e fanno punti in regioni continue, e i punti nelle stesse regioni devono avere valori simili (ovviamente ci sono alcuni valori anomali) . C'è qualche pacchetto in grado di raggiungere questo obiettivo? Ho aggiornato il mio problema per un esempio più intuitivo. Grazie.
Excalibur,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.