0

n 個のタイムスタンプ (Pythondatetimeオブジェクト) の並べ替えられたリストがあるとします。フォームのタプルのリストを生成するにはどうすればよいでしょうか(t, count)。ここtで、 はdatetimeオブジェクトでありcount、リスト内の要素の数はxから最大数分tです。

たとえば、日付 (簡潔にするために文字列。実際にはdatetimeオブジェクト) が与えられた場合:

timestamps = ["13:00", "13:01", "13:03", "13:04", "13:05", "13:06", "13:09"]

2分の場合x、利回り

[("13:00", 2), ("13:03":3), ("13:06":1), ("13:09", 1)]]

私がやろうとしているのは、リソースに対するヒットのより粗いリストを作成することです。私が持っている唯一のデータは、すべてのヒットのアクセス時間です (粒度はミリ秒単位であり、分単位まで細かくしたいのですが、または10分)

私は自分の試みを投稿しますが、恥ずかしいです...

編集:これは私がこれまでに持っているものです...動作するかどうかをテストしています...

def group_timestamps(timestamps, chunksize=10):
    """Groups a list of timestamps in chunks of ``chunksize`` minutes"""
    cs = timedelta(minutes=chunksize)

    if not timestamps:
        return []

    t0 = timestamps[0]
    count = 1
    chunks = []

    for ts in timestamps:
        if (ts - t0) <= cs:
            count += 1
        else:
            chunks.append((t0, count))
            t0 = ts
            count = 1
    return chunks
4

3 に答える 3

3

これはうまくいくはずです:

current = timestamps[0]
count = 0
res = []
for t in timestamps:
    if (t - current) <=  timedelta(minutes= 2): 
         count = count + 1
    else:
         res.append((current,count))
         current = t
         count = 1
res.append(current,count) #add last tuple

あなたの例に従ってください:

timestamps = [datetime(hours=13,minutes=00), datetime(hours=13,minutes=01), datetime(hours=13,minutes=03), datetime(hours=13,minutes=04), datetime(hours=13,minutes=05), datetime(hours=13,minutes=06), datetime(hours=13,minutes=09)]

res = [(datetime(hours=13,minutes=00),2),(datetime(hours=13,minutes=03),3),(datetime(hours=13,minutes=06),1),(datetime(hours=13,minutes=09),1)]
于 2012-06-04T02:47:10.590 に答える
1

私のバージョンのソリューションは次のとおりです。

from datetime import datetime

# SAMPLE TIMESTAMP DATA
timestamps = []
timestamps.append(datetime.utcfromtimestamp(1338777480))
timestamps.append(datetime.utcfromtimestamp(1338777580))
timestamps.append(datetime.utcfromtimestamp(1338777610))
timestamps.append(datetime.utcfromtimestamp(1338777680))
timestamps.append(datetime.utcfromtimestamp(1338777780))
timestamps.append(datetime.utcfromtimestamp(1338777980))
timestamps.append(datetime.utcfromtimestamp(1338778180))
timestamps.append(datetime.utcfromtimestamp(1338778230))
timestamps.append(datetime.utcfromtimestamp(1338778480))

MIN_THRSH = 2  # Range in minutes within to chunk data.

def chunk_time(timestamp_list):
    chunk_list = []
    current_chunk_idx = None
    for i, dt in enumerate(timestamp_list):
        if (i == 0 or
            ((dt - timestamp_list[current_chunk_idx]).seconds / 60) > MIN_THRSH):
            chunk_list.append([dt.strftime('%H:%M'), 1])
            current_chunk_idx = i
        else:
            chunk_list[-1][1] += 1
    return chunk_list

if __name__ == "__main__":
    for t in timestamps:
        print t.strftime('%H:%M')
    print chunk_time(timestamps)

出力:

02:38
02:39
02:40
02:41
02:43
02:46
02:49
02:50
02:54
[['02:38', 3], ['02:41', 2], ['02:46', 1], ['02:49', 2], ['02:54', 1]]
于 2012-06-04T02:58:48.487 に答える