Кластеризація географічних даних на основі розташування точок та пов'язаних з ними точкових значень


15

Дано точки даних із довготою, широтою та третім значенням властивості цієї точки. Як я можу кластеризувати точки на групи (географічні субрегіони) на основі вартості властивості? Я шукав google і зрозумів, що ця проблема, мабуть, називається "просторово обмеженою кластеризацією" або "регіоналізацією". Однак я не знайомий з обробкою географічних даних і не маю уявлення про те, які алгоритми хороші, і які пакети python / R хороші для цього завдання.

Щоб дати більш інтуїтивне уявлення про те, що я хочу, скажімо, мої графіки розсіювання даних наступні: введіть тут опис зображення

Отже, кожна точка - це точка, x - довгота, y - широта, і кольорова карта показує, величина велика чи мала. Я хочу поділити ці точки на підрегіони / групи / кластери на основі розташування та подібності значень. Як і наступне (це не зовсім те, що я хочу, просто щоб показати інтуїтивну ідею.): введіть тут опис зображення

То як я можу цього досягти?


Ваше запитання є дещо широким, як є. Ви випробували будь-який із пакетів R або Python?
Джон Пауелл

@ JohnBarça В даний час я думаю, що пакет clusterPy здається корисним, і наразі-group.org/risem/clusterpy/clusterpy0_9_9/… показує, як ним користуватися. Однак мої дані - це три точки стовпців: широта, довгота та значення. Я хочу поділити бали на підрегіональні групи, грунтуючись на бальній вартості. Формат введення пакету здається деяким багатокутником або сіткою, і я не зрозумів, як безпосередньо використовувати його для обробки просторових точок.
Екскалібур

1
ознайомтеся з відповідними питаннями до свого питання, наприклад: gis.stackexchange.com/questions/17638/…
Iris

@Iris Дякую! Я перевірив веб-сторінку, але, здається, досі не можу знайти спосіб обробляти такі просторові точки 3 стовпців із властивістю безпосередньо.
Екскалібур

@Excalibur для будь-якої географічної кластеризації, я б зараз рекомендував HDBScan. Що стосується вашої третьої цінності, то, мабуть, це можна вважати якоюсь вагою. Без проектування всіх значень в один і той же простір це може бути складним завданням. Чи можете ви надати довідкову інформацію щодо вашої мети?
Тімоті Далтон

Відповіді:


4

Пакет rioja забезпечує функціональність для обмеженої ієрархічної кластеризації. Для того, що ви думаєте як "просторово обмежені", ви б вказали ваші скорочення залежно від відстані, тоді як для "регіоналізації" ви могли використовувати k найближчих сусідів. Я б дуже рекомендував проектувати ваші дані, щоб вони знаходилися в системі координат на відстані.

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
Привіт @JeffreyEvans, дякую за вашу відповідь! Отже, ви пропонуєте мені спроектувати третє значення властивості в інший вигляд координатного права? Однак я думаю, що повинні існувати деякі існуючі алгоритми, які розрізняють (lon, lat) з пов'язаними атрибутами, а потім кластеризують і роблять точки в безперервних регіонах, а точки в тих самих регіонах повинні мати схожі значення (звичайно, є і інші люди) . Чи може якийсь пакет цього досягти? Я оновив свою проблему для більш інтуїтивного прикладу. Спасибі.
Екскалібур
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.