У меня есть такой набор данных:
data = ['input2-2018-09-01--22-35-43', 'input1-2018-09-01--22-35-41', 'input1-2018-09-01--22-35-42', 'input1-2018-09-01--20-38-11', 'input1-2018-09-01--22-32-38']
Моя цель - извлечь данные, соответствующие одному и тому же времени, с временным порогом 2 секунды.Мой набор данных намного больше, чем этот, с ~ 300 элементами, поэтому я использую itertools.groupby, чтобы сгруппировать их по временным интервалам и извлечь их с длиной> 1. Мой код (он адаптирован для выполнения):
from itertools import groupby
from datetime import timedelta, datetime
data = ['input2-2018-09-01--22-35-43', 'input1-2018-09-01--22-35-41',
'input1-2018-09-01--22-35-42', 'input1-2018-09-01--20-38-11',
'input1-2018-09-01--22-32-38']
time_threshold = 2 # seconds
date_time = '2018-09-01'
def time_comparison(data, time_threshold):
potential_detections = []
# Make groups by time_threshold intervals
def get_key(det):
d = datetime.strptime(det[det.find('--')-len(date_time):],'%Y-%m-%d--%H-%M-%S')
k = d + timedelta(seconds=-(d.second % time_threshold))
return datetime(k.year, k.month, k.day, k.hour, k.minute, k.second)
group = groupby(sorted(data), key=get_key)
print(f'-------------{date_time}------------')
# Iterate and extract coincidences
for key, items in group:
time_interval = []
print('--------------------')
print(key)
print('---')
for item in items:
print(item)
time_interval.append(item)
if len(time_interval) > 1:
potential_detections.append(time_interval)
return potential_detections
time_comparison(data, time_threshold)
Вывод:
-------------2018-09-01------------
--------------------
2018-09-01 20:38:10
---
input1-2018-09-01--20-38-11
--------------------
2018-09-01 22:32:38
---
input1-2018-09-01--22-32-38
--------------------
2018-09-01 22:35:42
---
input1-2018-09-01--22-35-42
input2-2018-09-01--22-35-43
--------------------
2018-09-01 22:35:40
---
input1-2018-09-01--22-35-41
Проблема в том, что, согласно моему порогу в 2 секунды, последние 2 клавиши должны быть объединены, только в одном интервале:
2018-09-01 22:35:41
---
input1-2018-09-01--22-35-42
input2-2018-09-01--22-35-43
input1-2018-09-01--22-35-41
Как я могу решить это?Это правильный способ классификации моих данных?
Большое спасибо.