Может как то так? Вместо того, чтобы спрашивать размер ячейки (интервал каждой ячейки), я думаю, что имеет смысл спросить, сколько корзин вы хотите вместо этого. Таким образом, вы гарантируете, что каждый контейнер будет иметь одинаковый размер (охватывать тот же интервал).
В моем примере ниже я сгенерировал некоторые поддельные данные, которые я назвал data
. Начальные и конечные метки времени я выбрал произвольно, а также количество бинов. Я вычисляю разницу между конечными и начальными временными метками, которые я называю duration
- это дает общую продолжительность между двумя временными метками (я понимаю, что немного глупо пересчитывать это значение, видя, как я его жестко закодировалранее в определении end_time_stamp
, но это просто для полноты). bin_interval
(в секундах) может быть вычислено путем деления длительности на количество бинов.
В итоге я сделал все, используя простые старые метки времени UNIX / POSIX, без какого-либо преобразования. Однако я упомяну, что datetime.datetime
имеет метод с именем fromtimestamp
, который принимает метку времени POSIX и возвращает объект datetime, заполненный годом, месяцем, секундами и т. Д.
Кроме того, в моем примеревсе, что я добавляю в контейнеры, это ключи - просто для демонстрации - вам придется изменить его в соответствии с вашими потребностями.
def main():
import time
values = ["A", "B", "C", "D", "E", "F", "G"]
data = {time.time() + (offset * 32): value for offset, value in enumerate(values)}
start_time_stamp = time.time() + 60
end_time_stamp = start_time_stamp + 75
number_of_bins = 12
assert end_time_stamp > start_time_stamp
duration = end_time_stamp - start_time_stamp
bin_interval = duration / number_of_bins
bins = [[] for _ in range(number_of_bins)]
for key, value in data.items():
if not (start_time_stamp <= key <= end_time_stamp):
continue
for bin_index, current_bin in enumerate(bins):
if start_time_stamp + (bin_index * bin_interval) <= key < start_time_stamp + ((bin_index + 1) * bin_interval):
current_bin.append(key)
break
print("Original data:")
for key, value in data.items():
print(key, value)
print(f"\nStart time stamp: {start_time_stamp}")
print(f"End time stamp: {end_time_stamp}\n")
print(f"Bin interval: {bin_interval}")
print("Bins:")
for current_bin in bins:
print(current_bin)
return 0
if __name__ == "__main__":
import sys
sys.exit(main())
Вывод:
Original data:
1573170895.1871762 A
1573170927.1871762 B
1573170959.1871762 C
1573170991.1871762 D
1573171023.1871762 E
1573171055.1871762 F
1573171087.1871762 G
Start time stamp: 1573170955.1871762
End time stamp: 1573171030.1871762
Bin interval: 6.25
Bins:
[1573170959.1871762]
[]
[]
[]
[]
[1573170991.1871762]
[]
[]
[]
[]
[1573171023.1871762]
[]