根据行“距离”对数据点进行聚类

时间:2018-08-23 11:02:04

标签: google-bigquery

我有一个带有多个时间戳的数据集。我想将它们分为几组,其中每组包含的数据点相隔不超过X小时。这意味着每个小组相隔最近X个小时。

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:1)

您必须引入一列,您可以通过该列进行聚类。如果我对您的理解正确,那么大约需要几个小时。由于您需要确定某行是否在群集中,因此不能使用动态距离群集。 但是您可以提取小时信息,并使用它来创建集群。 例如。使用hour - modulo of (hour / group size)

WITH a AS (
  SELECT * FROM UNNEST([
    TIME(0,40,0), TIME(1,23,0),
    TIME(2,12,0), TIME(3,51,0),
    TIME(4,1,0),  TIME(5,51,0),
    TIME(6,5,0),  TIME(7,21,0),
    TIME(8,56,0), TIME(9,34,0),
    TIME(10,23,0),TIME(20,04,0),
    TIME(23,43,0)
  ]) as time
)

SELECT 
  time,
  EXTRACT(HOUR FROM time) one,
  EXTRACT(HOUR FROM time)-MOD(EXTRACT(HOUR FROM time),2) two,
  EXTRACT(HOUR FROM time)-MOD(EXTRACT(HOUR FROM time),3) three,
  EXTRACT(HOUR FROM time)-MOD(EXTRACT(HOUR FROM time),4) four
FROM a

所以它是一组特定大小的小时。