2016-07-07 3 views
-2

У меня есть много точек на карте (long/Lat), и я хочу сгруппировать их в группы, что-то вроде k-mean.Алгоритм кластеризации для отображения

Есть ли способ вставить точки (long/Lat) и количество групп и получить для каждой точки, к какой группе она принадлежит?

+0

Пожалуйста, прочитайте информацию о [как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask) и как дать [воспроизводимый пример] (http://stackoverflow.com/questions/5963269). Это облегчит вам помощь другим людям. – zx8754

+0

Это может помочь. http://stackoverflow.com/questions/28672399/spatial-clustering-in-r-simple-example –

ответ

0
library(ggplot2) 

# Construct Data 
set.seed(23) 
lat <- c(seq(from = 16.3478, to = 14.1329876, length.out = 500), 
seq(from = 18.5478, to = 19.567, length.out = 500)) 
lat <- sample(x = lat, size = 100) 

lon <- seq(from = 45.987, to = 46.98237, length.out = 1000) 
lon <- sample(x = lon, size = 100) 

# Place inside data.frame 
df_latlon <- data.frame(lat, lon) 

cluster_latlon <- kmeans(x = df_latlon, centers = 2, nstart = 20) 
df_latlon <- cbind(df_latlon, cluster_latlon$cluster) 

# Output ggplot with colored values 
ggplot(df_latlon) + 
geom_point(aes(lat, lon, color = as.factor(cluster_latlon$cluster))) 

cluster_latlon$centers 
cluster_latlon$cluster 
0

Ваш вопрос по существу «как мне кластеризовать».

На него нельзя ответить кратко, но вы должны прочитать учебник по кластеризации.

k-mean не подходит для широты и долготы, поскольку это подход наименьших квадратов, но 1 градус широты не равен 1 градусу долготы (обычно). Используйте PAM, иерархическую кластеризацию, DBSCAN и т. Д.

Смежные вопросы