Находить значительные изменения в списке значений? - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть список значений, my_list, который показывает использование устройства в разное время, как показано ниже:

my_list=[0.0, 11500312.5, 12293437.5, 11896875.0, 7711186.0,     
             3281768.863, 3341550.1363, 3300694.0,...]

У меня есть много списков этого типа, и я хочу найти числа самых значительных изменений (уменьшающихся или увеличивающихся) в разное время. Один из этих списков приведен ниже. Например, если вы посмотрите на вторую, третью и четвертую точки на графике, вы увидите, что разница между значениями невелика, но значение внезапно уменьшилось в пятой точке и точке ситха. Такие же значительные изменения произошли между пунктами 20, 21 и 22.

enter image description here

Таким образом, вы можете видеть на графике, что они на два-три значительно увеличиваются и уменьшаются по сравнению с другими временами. Есть идеи, чтобы найти номера автоматически?

1 Ответ

1 голос
/ 15 апреля 2019

Вот подход, который может работать для вас. Проверьте, как значение сравнивается со скользящей средней. Это больше чем одно стандартное отклонение?

Вот реализация скользящего среднего, использующая numpy:

import numpy as np
def running_mean(x, N):
    cumsum = numpy.cumsum(numpy.insert(x, 0, 0)) 
    return (cumsum[N:] - cumsum[:-N]) / float(N)

С здесь

Вот реализация операции сравнения:

TimeSEries=[0.0, 11500312.5, 12293437.5, 11896875.0, 7711186.0,     
             3281768.863, 3341550.1363, 3300694.0]

MOV = running_mean(TimeSEries,3).tolist()
STD = np.std(MOV)
events= []
ind = []
for ii in range(len(TimeSEries)):
  try:
    if TimeSEries[ii] > MOV[ii]+STD:
        print(TimeSEries[ii])
  except IndexError:
    pass

С здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...