根据点位置和关联的点值对地理数据进行聚类


15

给定的数据点具有经度,纬度和该点的第​​三个属性值。如何基于属性值将点聚类为组(地理子区域)?我在Google上搜索后发现,这个问题似乎被称为“空间约束聚类”或“区域化”。但是,我对处理地理数据并不熟悉,也不清楚如何使用哪种算法,以及哪种python / R软件包适合此任务。

为了更直观地了解我想要的东西,假设我的数据散布图如下: 在此处输入图片说明

因此,每个点都是一个点,x是经度,y是纬度,并且颜色图显示值是大还是小。我想根据位置和值的相似性将这些点划分为子区域/组/集群。如下所示(这并不是我想要的,只是为了显示一个直观的想法。): 在此处输入图片说明

那么我该如何实现呢?


您的问题就目前而言有点广泛。您是否尝试过任何R或Python软件包?
约翰·鲍威尔

@JohnBarça当前,我认为clusterPy软件包似乎很有用,rise-group.org / risem / clusterpy / clusterpy0_9_9 /…显示了如何使用它。但是,我的数据是三个列点:纬度,经度和值。我希望根据点值将点分为子区域组。包输入格式看起来像一些多边形或网格,而且我还没有弄清楚如何直接使用它来处理空间点。
神剑

1
查看与您的问题相关的问题,例如:gis.stackexchange.com/questions/17638/…–
Iris

@Iris谢谢!我检查了网页,但似乎仍然找不到直接用属性处理这种3列空间点的方法。
神剑

@Excalibur用于任何地理集群,我目前建议使用HDBScan。关于您的第三个价值,我想这可以看作是某种重量。如果不将所有值投影到同一空间中,这可能是一项棘手的任务。您可以提供一些有关您的目标的背景信息吗?
蒂莫西·道尔顿

Answers:


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),然后进行聚类并将点划分为连续区域,并且相同区域中的点应具有相似的值(当然会有一些离群值) 。有什么包装可以做到这一点吗?我为一个更直观的示例更新了我的问题。谢谢。
神剑
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.