Grupowanie danych geograficznych na podstawie lokalizacji punktu i powiązanych wartości punktów

15

Podane punkty danych o długości i szerokości geograficznej oraz trzeciej wartości właściwości tego punktu. Jak mogę grupować punkty w grupy (podregiony geograficzne) na podstawie wartości nieruchomości? Przeszukałem google i odkryłem, że problem ten nazywa się „klastrowaniem przestrzennym” lub „regionalizacją”. Nie znam się jednak na obsłudze danych geograficznych i nie mam pojęcia, jakie algorytmy są dobre i które pakiety Python / R są odpowiednie do tego zadania.

Aby dać bardziej intuicyjny obraz tego, czego chcę, powiedzmy, że moje wykresy rozproszenia danych są następujące: wprowadź opis zdjęcia tutaj

Każda kropka jest punktem, x jest długością geograficzną, y jest szerokością geograficzną, a mapa kolorów pokazuje, czy wartość jest duża czy mała. Chcę podzielić te punkty na podregiony / grupy / klastry na podstawie lokalizacji i podobieństwa wartości. Podobnie jak poniżej (nie jest to dokładnie to, czego chcę, aby pokazać intuicyjny pomysł.): wprowadź opis zdjęcia tutaj

Jak mogę to osiągnąć?

Excalibur
źródło
Twoje pytanie jest nieco ogólne. Czy wypróbowałeś któryś z pakietów R lub Python?
John Powell,
@ JohnBarça Obecnie wydaje mi się, że pakietusterPy wydaje się przydatny, a rise-group.org/risem/clusterpy/clusterpy0_9_9/… pokazuje, jak go używać. Jednak moje dane to trzy punkty kolumny: szerokość, długość i wartość. Chcę podzielić punkty na grupy podregionów na podstawie wartości punktowej. Format wejściowy pakietu wydaje się być jakimś wielokątem lub siatką i nie wymyśliłem, jak bezpośrednio używać go do obsługi punktów przestrzennych.
Excalibur,
1
sprawdź powiązane pytania z pytaniem, np .: gis.stackexchange.com/questions/17638/…
Iris
@Iris Thanks! Sprawdziłem stronę, ale wydaje mi się, że nadal nie mogę znaleźć sposobu, aby bezpośrednio obsługiwać takie 3-punktowe punkty przestrzenne za pomocą właściwości.
Excalibur,
@Excalibur dla dowolnego grupowania geograficznego, obecnie polecam HDBScan. Jeśli chodzi o twoją trzecią wartość, może to być postrzegane jako pewien ciężar. Bez wyświetlania wszystkich wartości w tej samej przestrzeni może to być trudne zadanie. Czy możesz podać dodatkowe informacje dotyczące swojego celu?
Timothy Dalton

Odpowiedzi:

4

Pakiet rioja zapewnia funkcjonalność dla ograniczonego zgrupowania hierarchicznego. Dla tego, co myślisz o „ograniczeniu przestrzennym”, określisz cięcia na podstawie odległości, podczas gdy dla „regionalizacji” możesz użyć k najbliższych sąsiadów. Zdecydowanie polecam rzutowanie danych, aby znajdowały się one w układzie współrzędnych opartych na odległości.

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
Jeffrey Evans
źródło
1
Cześć @JeffreyEvans, dzięki za odpowiedź! Sugerujesz więc, że rzutuję trzecią wartość nieruchomości na inny rodzaj współrzędnych, prawda? Myślę jednak, że powinny istnieć pewne algorytmy, które rozróżniają (lon, lat) powiązane atrybuty, a następnie grupują i tworzą punkty w ciągłe regiony, a punkty w tych samych regionach powinny mieć podobne wartości (oczywiście istnieją pewne wartości odstające) . Czy jest jakiś pakiet, który może to osiągnąć? Zaktualizowałem swój problem, aby uzyskać bardziej intuicyjny przykład. Dzięki.
Excalibur,