Визуализация массивов временных рядов, принадлежащих одному кластеру - PullRequest
0 голосов
/ 31 октября 2019

Я делаю анализ K-средних по временным рядам (часовым значениям), где я разделил временные ряды на 24-часовые окна. Вход в K-Means выглядит следующим образом:

[array([ 65.,  94.,  98.,  51.,  94., 100., 102.,  83.,  35.]),
 array([ 62., 100.,  99.,  70.,  88.,  46.,  59.,  44.,  18.]),
 array([62., 94., 91., 53., 85., 89., 74., 66., 22.]),
 array([ 61., 102., 106.,  64., 110., 117., 109., 102.,  47.]),
 array([ 66.,  96., 124.,  79., 101., 105., 114.,  95.,  56.]),
 array([ 55.,  75.,  82.,  47.,  89.,  93., 106.,  69.,  35.]),

После запуска K-Means в качестве вывода я получаю индексы кластера для каждого из входных массивов, например:

array([[1],
       [0],
       [0],
       [1],
       [1],
       [0],
       [1],
       [0],
       [1],
       [1],])

Теперь я хочу отфильтровать входные массивы по индексу выходного кластера, чтобы я мог создать график, в котором все входные массивы (значения за 1 день) принадлежат одному кластеру, например:

enter image description here

Но у меня возникла проблема, как выбрать входные массивы кластером и затем построить график? Есть идеи? Спасибо

1 Ответ

0 голосов
/ 31 октября 2019

Я не совсем уверен в том, что вы хотели сделать, но попробуйте это:

примечание: я сократил массив фильтрации, так как вы не предоставили все данные

import numpy as np
import matplotlib.pyplot as plt

data = [np.array([ 65.,  94.,  98.,  51.,  94., 100., 102.,  83.,  35.]),
np.array([ 62., 100.,  99.,  70.,  88.,  46.,  59.,  44.,  18.]),
np.array([62., 94., 91., 53., 85., 89., 74., 66., 22.]),
np.array([ 61., 102., 106.,  64., 110., 117., 109., 102.,  47.]),
np.array([ 66.,  96., 124.,  79., 101., 105., 114.,  95.,  56.]),
np.array([ 55.,  75.,  82.,  47.,  89.,  93., 106.,  69.,  35.])]


data_to_show = []
filter = np.array([[1],[1],[1],[0],[0],[0]])

for idx, val in enumerate(filter):
  if val:
    data_to_show.append(data[idx])

for myArray in data_to_show: 
  print(myArray) 
  plt.plot(myArray)
...