포인트 위치 및 관련 포인트 값을 기반으로 지리 데이터 클러스터링


15

경도, 위도 및이 점의 세 번째 속성 값이있는 데이터 점이 제공됩니다. 속성 값을 기준으로 포인트를 그룹 (지리적 하위 영역)으로 클러스터링하려면 어떻게해야합니까? Google에서 검색 한 결과이 문제를 "공간 제약 클러스터링"또는 "지역화"라고합니다. 그러나 지리적 데이터 처리에 익숙하지 않으며 어떤 종류의 알고리즘이 좋은지,이 작업에 어떤 파이썬 / R 패키지가 적합한 지에 대한 아이디어를 얻지 못했습니다.

내가 원하는 것에 대해보다 직관적 인 아이디어를 제공하기 위해 데이터 산점도는 다음과 같습니다. 여기에 이미지 설명을 입력하십시오

따라서 각 점은 점, x는 경도, y는 위도, 컬러 맵은 값이 큰지 작은지를 나타냅니다. 위치와 값의 유사성에 따라 해당 지점을 하위 영역 / 그룹 / 클러스터로 나누고 싶습니다. 다음과 같이 (직관적으로 생각하는 것을 보여주기 위해 내가 원하는 것이 아닙니다.) 여기에 이미지 설명을 입력하십시오

어떻게 이것을 달성 할 수 있습니까?


귀하의 질문은 서있는 것처럼 약간 광범위합니다. R 또는 Python 패키지를 사용해 보셨습니까?
존 파월

@ JohnBarça 현재 clusterPy 패키지가 유용하다고 생각하고 rise-group.org/risem/clusterpy/clusterpy0_9_9/… 사용 방법을 보여줍니다. 그러나 내 데이터는 위도, 경도 및 값의 세 가지 열 포인트입니다. 포인트 값을 기준으로 포인트를 하위 지역 그룹으로 나누고 싶습니다. 패키지 입력 형식은 일부 다각형 또는 격자처럼 보이며 직접 공간 점을 처리하는 데 사용하는 방법을 알지 못했습니다.
엑스 칼리버


@ 아이리스 감사합니다! 웹 페이지를 확인했지만 속성으로 직접 3 개의 열 공간 점을 처리하는 방법을 찾을 수없는 것 같습니다.
엑스 칼리버

지리적 클러스터링을위한 @Excalibur 현재 HDBScan을 권장합니다. 세 번째 가치와 관련하여 이것은 일종의 무게로 보일 수 있습니다. 모든 값을 동일한 공간에 투사하지 않으면 까다로운 작업이 될 수 있습니다. 목표에 관한 배경 정보를 제공 할 수 있습니까?
Timothy Dalton

답변:


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 님, 답변 주셔서 감사합니다! 그래서 세 번째 속성 값을 다른 종류의 좌표로 투영한다고 제안합니까? 그러나 관련 속성으로 (론, 위도)를 구별 한 다음 클러스터링을 수행하고 점을 연속 영역으로 만드는 기존 알고리즘이 있어야한다고 생각합니다. 동일한 영역의 포인트는 비슷한 값을 갖습니다 (물론 이상 치가 있습니다) . 이것을 달성 할 수있는 패키지가 있습니까? 더 직관적 인 예를 위해 문제를 업데이트했습니다. 감사.
엑스 칼리버
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.