【问题标题】:R - Cluster x number of events within y time periodR - y 时间段内的集群 x 事件数
【发布时间】:2014-07-30 15:09:08
【问题描述】:

我有一个数据集,其中记录了 63 年以来的 59k 个条目,我需要使用以下标准识别事件集群:

6 小时内发生 6 次或更多活动

每个事件都有一个唯一的 ID、时间 HH:MM:SS 和日期 DD:MM:YY,理想情况下,输出应该有一个集群 ID、每个集群内发生的事件以及开始和结束时间和日期。

考虑 R 中的问题,我们需要查看每个日期/时间并计算接下来 6 小时内的事件数,如果数字为 6 或更大,则保存事件 ID,如果不移动到下一个日期并执行相同的任务。我提取了一个仅包含 EventID、日期、时间和年份的数据。

https://dl.dropboxusercontent.com/u/16400709/StackOverflow/DataStack.csv

如果我在此期间想出什么,我会在下面发布。

更新:在休息一下思考这个问题后,我有了一个新的方法。

将每个事件的日期/时间加上 6 小时,然后计算在开始结束时间范围内的事件数,如果有 6 个或更多,则获取 eventID 并为其分配一个 clusterID。然后移动到下一个事件并循环重复 59k 次。

【问题讨论】:

  • 同时看看this question(它不是 R 特定的,但可能仍然相关)
  • 谢谢看看!

标签: r date time cluster-analysis


【解决方案1】:

不要使用集群。这是错误的工具。和错误的术语。您不是在寻找抽象的“集群”,而是在寻找更简单、定义更明确的东西。特别是,您的数据是一维的,这比聚类中无处不在的多变量情况要容易得多。

相反,对数据进行排序并使用滑动窗口

如果您的数据已排序,并且 time[x+5] - time[x]

排序是 O(n log n),但高度优化。余数是 O(n) 一次遍历您的数据。这将击败每一个聚类算法,因为它们不会利用您的数据特征。

【讨论】:

  • 现在听起来好多了!您建议使用什么软件包来执行滑动窗口分析?另外,很抱歉在这里听起来有点绿色,但我不完全理解,我认为您的意思是该过程只查看一次数据,而不必循环遍历数据集中的每个事件。再次感谢!
  • 我不使用 R,所以我不能给你包推荐。您可能只需将已排序的数据集移动 5,然后计算时间差即可。此数组中的任何 true 都表示有 5 个条目的序列满足您的阈值。合并相邻的trues 以获得更大的集群。
  • 打算用一个更好的标题重新发布这个问题,努力让“滑动窗口”工作。感谢您的所有帮助。
猜你喜欢
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多