Пространственная кластеризация точечных данных

Май 12, 2008

Пост является переводом 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=points

d.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

Реклама

комментария 4 to “Пространственная кластеризация точечных данных”

  1. sim Says:

    автокорреляция однако и конвексные полигоны, интересно!

  2. magik Says:

    Спасибо, очень интересная статья! Хоть ни GRASS ни R я не пользуюсь, но приятно узнать про возможности этих пакетов. Кстати, знаете что в линуксформате начали публиковать серию статей про R? Можете их как ни будь прокомментировать?

  3. fatune Says:

    2magik
    Читал на ЛОР’е первую статью по R. Хорошая вводная информация для непосвященных. А вообще, Евгений Балдин молодец! Хороший популяризатор таких специфичных программ.

  4. Миша Says:

    в версии R дя windows в строке
    s <- stepFlexclust(y, K=2:10, nrep=20)
    надо ставить прописную k:
    s <- stepFlexclust(y, k=2:10, nrep=20)

    в противном случае выдается сообщение об ошибке.


Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: