Pengelompokan data geografis berdasarkan lokasi titik dan nilai titik terkait

15

Poin data yang diberikan dengan bujur, lintang, dan nilai properti ketiga dari titik ini. Bagaimana saya bisa mengelompokkan poin ke dalam grup (sub-wilayah geografis) berdasarkan nilai properti? Saya mencari oleh Google dan menemukan bahwa masalah ini tampaknya disebut "pengelompokan terbatas spasial" atau "regionalisasi". Namun, saya tidak terbiasa dengan penanganan data geografis dan belum mendapatkan ide tentang jenis algoritma apa yang baik, dan paket python / R mana yang bagus untuk tugas ini.

Untuk memberikan ide yang lebih intuitif tentang apa yang saya inginkan, katakanlah plot pencar data saya adalah sebagai berikut: masukkan deskripsi gambar di sini

Jadi setiap titik adalah titik, x adalah garis bujur, y adalah garis lintang, dan colormap menunjukkan apakah nilainya besar atau kecil. Saya ingin membagi titik-titik tersebut ke dalam sub wilayah / kelompok / kluster berdasarkan lokasi dan kesamaan nilai. Seperti yang berikut ini (bukan yang saya inginkan, hanya untuk menunjukkan ide intuitif.): masukkan deskripsi gambar di sini

Jadi bagaimana saya bisa mencapai ini?

Excalibur
sumber
Pertanyaan Anda agak luas. Sudahkah Anda mencoba salah satu paket R atau Python?
John Powell
@ JohnBarça Saat ini saya pikir paket clusterPy tampaknya berguna dan naik-group.org/risem/clusterpy/clusterpy0_9_9/… menunjukkan cara menggunakannya. Namun, data saya adalah tiga titik kolom: lintang, bujur, dan nilai. Saya ingin membagi poin menjadi kelompok sub-wilayah berdasarkan nilai poin. Format input paket tampak seperti beberapa poligon atau kisi, dan saya belum mengetahui cara menggunakannya secara langsung untuk menangani titik spasial.
Excalibur
1
periksa pertanyaan terkait dengan pertanyaan Anda, misalnya: gis.stackexchange.com/questions/17638/…
Iris
@Iris, Terima kasih! Saya telah memeriksa halaman web, tetapi sepertinya saya masih tidak dapat menemukan cara untuk menangani titik spasial 3 kolom dengan properti secara langsung.
Excalibur
@Excalibur untuk setiap pengelompokan geografis saat ini saya akan merekomendasikan HDBScan. Mengenai nilai ketiga Anda, ini bisa dilihat sebagai semacam bobot, saya kira. Tanpa memproyeksikan semua nilai ke ruang yang sama, ini bisa menjadi tugas yang rumit. Bisakah Anda memberikan beberapa informasi latar belakang mengenai tujuan Anda?
Timothy Dalton

Jawaban:

4

Paket rioja menyediakan fungsionalitas untuk pengelompokan hierarkis terbatas. Untuk apa yang Anda pikirkan sebagai "dibatasi spasial" Anda akan menentukan potongan Anda berdasarkan jarak sedangkan untuk "regionalisasi" Anda bisa menggunakan k tetangga terdekat. Saya sangat merekomendasikan memproyeksikan data Anda sehingga berada dalam sistem koordinat berbasis jarak.

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
sumber
1
Hai @ JeffreyEvans, terima kasih atas balasan Anda! Jadi, Anda menyarankan agar saya memproyeksikan nilai properti ketiga ke jenis koordinat lain, bukan? Namun, saya pikir harus ada beberapa algoritma yang ada yang membedakan (lon, lat) dengan atribut terkait, dan kemudian melakukan pengelompokan dan membuat poin menjadi daerah kontinu, dan titik di wilayah yang sama harus memiliki nilai yang sama (tentu saja ada beberapa pencilan) . Apakah ada paket yang bisa mencapainya? Saya memperbarui masalah saya untuk contoh yang lebih intuitif. Terima kasih.
Excalibur