Наиболее логичный способ преобразования часа - это две переменные, которые качаются взад-вперед из раковины. Представьте себе положение конца часовой стрелки на 24-часовых часах. В x
качаются позиции вперед и назад из раковины с y
позицией. Для 24-часовой вы можете сделать это с x=sin(2pi*hour/24)
, y=cos(2pi*hour/24)
.
Вам нужны обе переменные или правильное движение во времени потеряно. Это связано с тем, что производная от sin или cos изменяется во времени, когда (x,y)
положение плавно меняется при перемещении по единичному кругу.
Наконец, подумайте, стоит ли добавлять третью функцию для отслеживания линейного времени, которая может быть построена из моих часов (или минут или секунд) с начала первой записи, или с отметкой времени Unix, или с чем-то подобным. Эти три функции затем обеспечивают прокси как для циклической, так и для линейной прогрессии времени, например, вы можете вытянуть циклическое явление, такое как циклы сна в движении людей, а также линейный рост, например, численность населения и время.
Надеюсь это поможет!
Добавим соответствующий пример кода, который я сгенерировал для другого ответа:
Пример выполнения:
# Enable inline plotting
%matplotlib inline
#Import everything I need...
import numpy as np
import matplotlib as mp
import matplotlib.pyplot as plt
import pandas as pd
# Grab some random times from here: https://www.random.org/clock-times/
# put them into a csv.
from pandas import DataFrame, read_csv
df = read_csv('/Users/angus/Machine_Learning/ipython_notebooks/times.csv',delimiter=':')
df['hourfloat']=df.hour+df.minute/60.0
df['x']=np.sin(2.*np.pi*df.hourfloat/24.)
df['y']=np.cos(2.*np.pi*df.hourfloat/24.)
df
def kmeansshow(k,X):
from sklearn import cluster
from matplotlib import pyplot
import numpy as np
kmeans = cluster.KMeans(n_clusters=k)
kmeans.fit(X)
labels = kmeans.labels_
centroids = kmeans.cluster_centers_
#print centroids
for i in range(k):
# select only data observations with cluster label == i
ds = X[np.where(labels==i)]
# plot the data observations
pyplot.plot(ds[:,0],ds[:,1],'o')
# plot the centroids
lines = pyplot.plot(centroids[i,0],centroids[i,1],'kx')
# make the centroid x's bigger
pyplot.setp(lines,ms=15.0)
pyplot.setp(lines,mew=2.0)
pyplot.show()
return centroids
Теперь давайте попробуем это:
kmeansshow(6,df[['x', 'y']].values)
Вы едва можете увидеть, что некоторые из них после полуночи включены в зеленый кластер до полуночи. Теперь давайте уменьшим количество кластеров и покажем, что до и после полуночи можно более подробно подключиться к одному кластеру:
kmeansshow(3,df[['x', 'y']].values)
Посмотрите, как синий кластер содержит моменты времени до и после полуночи, которые объединены в одном кластере ...
QED!