Набор данных содержит столбец Time
, который показывает, в какое время произошел инцидент. Время указано в формате hh:mm
с 24h format
, например:
00:23
00:57
02:30
05:49
...
22:03
23:54
Моей первой мыслью было присвоить арифметическое значение c, например:
def time2int(time):
hh, mm = time.split(':')
return 60 * int(hh) + int(mm)
Но этот лог c имеет большой недостаток. Не учитывается, что времена 23:57
и 00:20
«близки» друг к другу, поскольку 23:57
равно 1437
, а 00:20
равно 20
.
Из-за модульности арифметика c природа времени, я думал о назначении времени два значения, как xy
по кругу. Мои значения int находятся между 0
(00:00)
и 1440
(24:00)
.
Таким образом, окружность равна 2πr = 1440 => r = 230
, и для каждой минуты arc length
равна 1
. Таким образом, угол тета: s = r theta => theta = s / r => theta = minutes / r
Я определяю время для евклидовых координат:
def time2eucl(time, r = 230):
minutes = time2int(time)
theta = minutes / r # radians
x = r * cos( theta )
y = r * sin( theta )
С этим логом c если я получу евклидово расстояние от значений x, y, время 00:20
будет ближе к 23:50
, чем 03:00
, в отличие от моего первого подхода.
Является ли этот подход правильным путем к go?
Существуют ли другие методы извлечения признаков для значений времени?