Python:如何查找具有相同id的读数序列,并计算每个此类序列的第一个和最后一个元素之间的间隔

时间:2013-10-12 15:56:04

标签: python sequence

我正在使用GPS数据从轨道中发现个人有意义的地方。一旦集群数据并将每个点分配给集群,您将获得输出文件,其中列中包含时间戳和集群ID列。为了确定一个人每次访问每个群集的时间长度,您必须按时间戳对数据进行排序,并从同一群集中查找所有读数序列。说我有一个id模式1,1,1,2,3,4,4,1,1,2,1,3,3,4,4,1,1,1,1,1并且已经排序了按时间戳 - 在这里你可以看到一个人访问集群1四次。我想知道的是如何计算每次访问群集时人员在群集1中停留的时间。结果可能是一个字典,其中cluster id是键,后面跟着表示每次访问花费的时间的值,代码的输入可以是2D list,其中每个元素都包含主题数据[timestamp,Lat,Lon,cluster_id]。

数据示例(时间为纪元时间,以秒为单位):
时间|集群
1377997076 | 1
1378000582 | 1
1378000596 | 1
1378031297 | 2
1378031302 | 2
1378031303 | 1
1378031345 | 1
1378033452 | 2
1378034222 | 2

那也可以表示为2d列表:mylist = [[1377997076,1],[1378000582,1],[1378000596,1],[1378031297,2],[1378031302,2],[1378031303,1] [1378031345,1],[1378033452,2],[1378034222,1]]

1 个答案:

答案 0 :(得分:0)

以下是一些代码:

def chunk_sequences(it, n):
    """
    Yield all sequences of n from iterable.
    """
    chunk = []
    for x in it:
        if x == n:
            chunk.append(n)
        else:
            if len(chunk) > 0:
                yield chunk
                chunk = []
    if len(chunk) > 0:
        #needed in case the last sequence runs into the last element
        yield chunk

快速而肮脏,如果性能至关重要,您可能需要转向基于itertools的解决方案(可能涉及takewhile)。

所以有了上述内容,你可以这样做:

list(chunk_sequences(pattern,1))
Out[59]: [[1, 1, 1], [1, 1], [1], [1, 1, 1, 1, 1]]

很容易变成:

[len(x) for x in list(chunk_sequences(pattern,1))]
Out[60]: [3, 2, 1, 5]

..这是群集1中每个相应停留的长度。