R,按值进行空间聚类
R, Spatial clustering by value
我有这个简单的数据集。数据集由假设的地理单位(即邮政编码)组成,有 3 个变量:经度、纬度和 someValue(销售额)。
lon<-rep(1:10,each=10)
lat<-rep(1:10,10)
someValue<-rnorm(100, mean = 20, sd = 5)
dataset<-data.frame(lon,lat,someValue)
我面临的问题是领土对齐。给定建议的地区数量,我需要将邮政编码分组为地区,使得地区由相邻的邮政编码组成,并且 someValue 的总和大致相同(+/- 指定地区数量的平均值的 15% )
此时我的最佳想法是: 1. 首先在 lon/lat 上进行聚类以建立候选人; 2. 使用步骤 1 中的质心作为中心 iter.max=1 对 someValue 进行聚类; 3 迭代 1 和 2 直到某个收敛截止点。
我想问一下社区:在 R 中实现这样的东西的正确方法是什么?我确实搜索了空间聚类,但找不到任何相关内容
您可以使用 kmeans
仅考虑前两列(x 和 y)进行聚类:
#How Many cluster do you want to have initially?
initialClasses <- 2
#clustering using kmeans
initClust <- kmeans(dataset[,1:2], initialClasses, iter.max = 100)
dataset$classes <- initClust$cluster
initClust$cluster
然后包含您的集群 类。您可以将它们添加到您的数据框并使用 dplyr 来计算一些统计数据。例如每个集群 someValue
的总和:
library(dplyr)
statistics <- dataset %>% group_by(classes) %>%summarize(sum=sum(someValue))
这里例如 someValue
超过两个 类 的总和:
classes sum
(int) (dbl)
1 1 975.7783
2 2 978.9166
假设您的数据分布均匀,并且您希望每个集群的 someValue 总和更小。然后你需要用更多(即 3)类:
重新运行聚类
newRun <- kmeans(dataset[,1:2], 3, iter.max = 100)
dataset$classes <- newRun$cluster
这里是三个类的输出统计:
classes sum
(int) (dbl)
1 1 577.6573
2 2 739.9668
3 3 637.0707
通过将其包装在一个循环中并计算更多标准(即方差),您可以将聚类调整到合适的大小。希望对你有帮助。
我有这个简单的数据集。数据集由假设的地理单位(即邮政编码)组成,有 3 个变量:经度、纬度和 someValue(销售额)。
lon<-rep(1:10,each=10)
lat<-rep(1:10,10)
someValue<-rnorm(100, mean = 20, sd = 5)
dataset<-data.frame(lon,lat,someValue)
我面临的问题是领土对齐。给定建议的地区数量,我需要将邮政编码分组为地区,使得地区由相邻的邮政编码组成,并且 someValue 的总和大致相同(+/- 指定地区数量的平均值的 15% )
此时我的最佳想法是: 1. 首先在 lon/lat 上进行聚类以建立候选人; 2. 使用步骤 1 中的质心作为中心 iter.max=1 对 someValue 进行聚类; 3 迭代 1 和 2 直到某个收敛截止点。
我想问一下社区:在 R 中实现这样的东西的正确方法是什么?我确实搜索了空间聚类,但找不到任何相关内容
您可以使用 kmeans
仅考虑前两列(x 和 y)进行聚类:
#How Many cluster do you want to have initially?
initialClasses <- 2
#clustering using kmeans
initClust <- kmeans(dataset[,1:2], initialClasses, iter.max = 100)
dataset$classes <- initClust$cluster
initClust$cluster
然后包含您的集群 类。您可以将它们添加到您的数据框并使用 dplyr 来计算一些统计数据。例如每个集群 someValue
的总和:
library(dplyr)
statistics <- dataset %>% group_by(classes) %>%summarize(sum=sum(someValue))
这里例如 someValue
超过两个 类 的总和:
classes sum
(int) (dbl)
1 1 975.7783
2 2 978.9166
假设您的数据分布均匀,并且您希望每个集群的 someValue 总和更小。然后你需要用更多(即 3)类:
重新运行聚类newRun <- kmeans(dataset[,1:2], 3, iter.max = 100)
dataset$classes <- newRun$cluster
这里是三个类的输出统计:
classes sum
(int) (dbl)
1 1 577.6573
2 2 739.9668
3 3 637.0707
通过将其包装在一个循环中并计算更多标准(即方差),您可以将聚类调整到合适的大小。希望对你有帮助。