Пост является переводом Spatial Clustering of Point Data с небольшими дополнениями.
Задача: Есть n точек, распределенных каким-то образом в пределах заданной территории. Каждая точка кроме пространственного положения обладает значением (например, содержанием химического элемента)
Требуется объединить точки в m групп.
Инструменты: GRASS, R.
Задача теоретическая. Точки генерируем случайным образом, и по ходу решения задачи, попытаемся определиться с числом групп в которые эти точки надо объединить.
Для наглядности сгенерируем растровую карту и возьмем с неё значения для точек:
r.surf.fractal out=surf.fract d=2.05
v.random out=pnts n=100
v.drape pnts type=point rast=surf.fract out=pointsd.rast surf.fract
d.vect points icon=basic/box fcol=black col=black size=6
v.out.ascii in=points out=points.xy
На соседнем терминале запускаем R
x <- read.table(‘points.xy’,’sep=’|')
names(x) <- c(‘easting’, ‘northing’, ’surf’ ,’cat’)
# отсекаем столбец cat
y <- data.frame(x[,1:3])
row.names(y) <- x$cat# загружаем библиотеки для кластерного анализа
library(cluster)
library(flexclust)# попытаемся найти оптимальное число групп
s <- stepFlexclust(y, K=2:10, nrep=20)
plot(s)
# похоже, оптимальное число 5
y.pam <- pam(y, 5, stand=TRUE)# подготовим данные для экспорта
y$cluster <- y.pam$clustering
y$orig_cat <- as.numeric(row.names(y))# экспортируем данные в текстовый файл
write.table(y, file=’points.clust’, row.names=FALSE)
возвращаемся в GRASS и импортируем текстовый файл
v.in.ascii in=points.clust out=pclust fs=» » columns=’x double, y double, srf double, orig_cat integer, cluster integer’ skip=1
for x in $(seq 1 5)
do v.extract –o in=pclust where=»cluster=$x» out=pclust_$x
v.hull –o in=pclust_$x out=pclust_hull_$x
d.vect pclust_hull_$x type=boundary fcol=none width=2 col=white
done
d.vect pclust icon=basic/box fcol=black col=black size=6
Tags: clustering, Grass, R



Май 12, 2008 в 12:46 пп
автокорреляция однако и конвексные полигоны, интересно!
Май 12, 2008 в 2:59 пп
Спасибо, очень интересная статья! Хоть ни GRASS ни R я не пользуюсь, но приятно узнать про возможности этих пакетов. Кстати, знаете что в линуксформате начали публиковать серию статей про R? Можете их как ни будь прокомментировать?
Май 13, 2008 в 5:57 дп
2magik
Читал на ЛОР’е первую статью по R. Хорошая вводная информация для непосвященных. А вообще, Евгений Балдин молодец! Хороший популяризатор таких специфичных программ.
Февраль 6, 2009 в 12:20 пп
в версии R дя windows в строке
s <- stepFlexclust(y, K=2:10, nrep=20)
надо ставить прописную k:
s <- stepFlexclust(y, k=2:10, nrep=20)
в противном случае выдается сообщение об ошибке.