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

Python:如何找到具有相同id的读取序列,并计算每个序列的第一个和最后一个元素之间的间隔,python,sequence,Python,Sequence,我正在使用GPS数据从轨道上发现对个人有意义的地方。对数据进行聚类并将每个点分配给集群后,您将获得输出文件,其中在其他列中有一列用于时间戳和集群id。要确定一个人每次访问每个集群时在其中停留的时间,您必须按时间戳对数据进行排序,并找到所有来自同一集群的读数序列。假设我有一个id模式1,1,1,2,3,4,4,1,1,2,1,3,4,4,1,1,1,1,1,1,1,1,1,1,1,1,已经按时间戳排序了-在这里你可以看到一个人访问了集群1四次。我想知道的是如何计算该人每次访问集群1时在集群1中停留

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

数据示例(时间是以秒为单位的历元时间):
时间|簇
1377997076|1
1378000582|1
1378000596|1
1378031297|2
1378031302|2
1378031303|1
1378031345|1
137803452|2
137803422 | 2


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

这里有一段代码开始:

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中每个相应停留的长度。

Kaisu,是否可以给出您正在使用的最小代码集。如果人们看到一些他们可以使用的示例数据(比如其中的一些id模式),他们就更有可能提供帮助。试着解释一下你试过什么。