【发布时间】:2017-04-03 00:48:41
【问题描述】:
假设,我有连续 10 天对应 5 个类别的每小时数据,创建为:
library(xts)
set.seed(123)
timestamp <- seq(as.POSIXct("2016-10-01"),as.POSIXct("2016-10-10 23:59:59"), by = "hour")
data <- data.frame(cat1 = rnorm(length(timestamp),150,5),
cat2 = rnorm(length(timestamp),130,3),
cat3 = rnorm(length(timestamp),150,5),
cat4 = rnorm(length(timestamp),100,8),
cat5 = rnorm(length(timestamp),200,15))
data_obj <- xts(data,timestamp) # creat time-series object
head(data_obj,2)
现在,我分别对每一天进行聚类,并使用简单的kmeans 来查看这些类别之间的行为:
daywise_data <- split.xts(data_obj,f="days",k=1) # split data day wise
clus_obj <- lapply(daywise_data, function(x){ # clustering day wise
return (kmeans(t(x), 2))
})
一旦聚类结束,我用
可视化不同 10 天内的聚类关系sapply(clus_obj,function(x) x$cluster) # clustering results
我发现结果为
通过目视检查,很明显cat1 和cat3 始终保持在同一个集群中。同样,cat4 和 cat5 在 10 个不同的日子里大多位于不同的集群中。
除了目视检查之外,是否有任何自动方法可以从此类聚类表中收集此类统计数据?
注意:这是一个虚拟示例。我有一个连续 100 天包含 80 个类别的数据框。像上面这样的自动摘要将减少工作量。
【问题讨论】:
标签: r statistics time-series cluster-analysis k-means