Рекомендация для python библиотеки / модели / инструмента интеллектуального анализа данных для поиска шаблонов в числовой последовательности - PullRequest
0 голосов
/ 29 мая 2020

У меня есть длинная очищенная (без дубликатов в порядке появления) последовательность целых чисел в кадре данных pandas, и я ищу способ найти в ней закономерности. Шаблоны, которые я ищу, могут быть описаны со следующими параметрами и, возможно, появятся следующим образом:

example parameters:

A = constant increment of 10 
B = constant decrement of 6
C = constant decrement of 3
D = increment of 12 if no decrement larger than 5 within sequence-block

Sequence A-B-A 
Sequence D-B-A-C

Может ли кто-нибудь дать мне подсказку, чтобы найти правильный python инструмент для достижения этого ? Рекомендации по инструментам для автоматического поиска неизвестных шаблонов в последовательностях также были бы весьма признательны. Спасибо!

ОБНОВЛЕНИЕ:

Это начало последовательности, из которой я печатаю постоянные приращения в порядке возрастания и убывания

seq  rt_up  rt_down
0      -      1
-1     1      -
0      2      -
1      3      -
2      -      1
1      -      2
0      -      3
-1     -      4
-2     -      5
-3     -      6
-4     -      7
-5     1      -
-4     2      -
-3     3      -
-2     4      -
-1     5      -
0      6      -
1      -      1
0      -      2
-1     1      -
0      -      1
-1     -      2
-2     -      3
-3     -      4
-4     -      5
-5     -      6
-6     1      -
-5     2      -
-4     3      -
-3     4      -
-2     5      -
-1     6      -
0      7      -
1      8      -
2      9      -
3      -      1
2      -      2
1      -      3
0      -      4
-1     -      5

Теперь я попытался собрать это с помощью pd.cut:

bins = [1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8.......

Чтобы я мог обозначить его как A (rt_up 6) = приращение 6, но я получаю сообщение об ошибке:
бункеры должны увеличиваться монотонно

Мне понадобится решение, чтобы сгруппировать его таким образом, чтобы я мог регулировать расстояние между A и B в исходной последовательности, или просто сказать, если есть место, считайте его как последовательность A (rt_up x) и B (rt_down x), либо не считать.
Чтобы прояснить это: В приведенной выше последовательности вы видите rt_up 1-6, затем rt_down 1-2, затем rt_up только 1, пока за ним снова не последует rt_down 1-6. Единственная 1 - это пробел

1 Ответ

0 голосов
/ 30 мая 2020

Я не уверен, что вы имеете в виду под

D = приращение 12, если в блоке последовательности нет декремента больше 5

, потому что я не знать, что такое последовательность-блок.

seq=[0,-1,0,1,2,1,0,-1,-2,-3,-4,-5,-4,-3,-2,-1,0,1,0,-1,0,-1,-2,-3,-4,-5,-6,-5,-4,-3,-2,-1,0,1,2,3,2,1,0,-1]
inc=True
counter=0
prev=seq[0]
for item in seq[1:]:
  if prev < item and inc:
    counter=counter+1
  elif prev > item and not inc:
    counter=counter+1
  elif prev < item and not inc:
    # switch from increase to decrease
    # write out letters for increase
    if counter >= 10:
      print('A', end='')
    inc=False
    counter=0
  elif prev > item and inc:
    # switch from decrease to increase
    # write out letters for decrease
    if counter >= 6:
      print('B', end='')
    elif counter >= 3:
      print('C', end='')
    inc=True
    counter=0
print('')

Для примера последовательности это даст:

CC

...