Кластеризация географических данных на основе местоположения точки и связанных значений точки

15

Даны данные точек с долготой, широтой и значением третьего свойства этой точки. Как я могу кластеризовать точки в группы (географические субрегионы) на основе значения свойства? Я искал по Google и выяснил, что эта проблема, кажется, называется «пространственно ограниченная кластеризация» или «регионализация». Тем не менее, я не знаком с обработкой географических данных и не знаю, какие алгоритмы хороши и какие пакеты python / R хороши для этой задачи.

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

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

Так как же мне этого добиться?

Excalibur
источник
Ваш вопрос немного широк, как он есть. Вы пробовали какие-либо пакеты 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) со связанными атрибутами, а затем выполняют кластеризацию и делают точки в непрерывных областях, и точки в тех же областях должны иметь аналогичные значения (конечно, есть некоторые выбросы) , Есть ли какой-нибудь пакет, способный добиться этого? Я обновил свою проблему для более наглядного примера. Благодарю.
Экскалибур