Я пытаюсь поиграть с данными временных рядов. Я хотел бы построить область с максимальным количеством изменений в зависимости от некоторого интервала.
Я написал образец кода, но не могу продвинуться вперед в выделении региона.
import pandas as pd
import numpy as np
import seaborn as sns
f = pd.DataFrame(np.random.randint(0,50,size=(300, 1)))
sns.tsplot(f[0])
Я хочу выделить область с максимальными изменениями, скажем, с размером окна 30.
Скажем, для окна размером 30. Если я перемещаю это окно по горизонтали без перекрытия, количество изменений больше 20, я хочу выделить область
Вот один подход, который выполняет большинство операций в numpy, а затем отображает область с matplotlib.axvspan:
f = pd.DataFrame(np.random.randint(0,50,size=(300, 1))) # dataframe
y = f[0].values # working vector in numpy
thr = 5 # criterion for counting as a change
chunk_size = 30 # window length
chunks = np.array_split(y, y.shape[0]/chunk_size) # split into 30-element chunks
# compute how many elements differ from one element to the next
diffs_by_chunk = [(np.abs(np.ediff1d(chunk)) > thr).sum() for chunk in chunks]
ix = np.argmax(diffs_by_chunk) # chunk with most differences
sns.tsplot(f[0])
plt.axvspan(ix * chunk_size, (ix+1) * chunk_size, alpha=0.5)
С базовым уровнем однородных случайных данных трудно связать это с вариантом использования, но могут быть полезны альтернативные критерии того, что следует максимизировать, например просто глядя на сумму абсолютных изменений, а не на число, превышающее пороговое значение:
diffs_by_chunk = [(np.abs(np.ediff1d(chunk))).sum() for chunk in chunks] # criterion #2
Также можно было бы показать несколько регионов, каждый из которых имеет достаточно различий:
for i, df in enumerate(diffs_by_chunk):
if df >= 25:
sns.mpl.pyplot.axvspan(i*chunk_size, (i+1)*chunk_size, alpha=0.5)
Что вы подразумеваете под «максимальным количеством изменений»? Конечно, в случайной последовательности каждая точка представляет собой изменение по сравнению с предыдущей точкой, поэтому каждая область имеет одинаковое количество изменений.