2013-03-28 4 views
1

Я новичок в Pandas. У меня есть данные временных рядов. Как я могу сделать следующие операции легко?Операции с временными рядами Pandas

У меня есть 2d матрица, называемая input. Каждая строка имеет 5 элементов. Там много строк (в тысячах)

input[t,:] = [f1, f2, f3, f4, f5]

(1) мне нужно вычислить относительную разницу между пробами.

т.е. rel[t,:] = (input[t,:]-input[t-1,:])/input[t-1,:]

(2) Мне нужно создать скользящее окно размером 80.

т.е. win[t,:] = [rel[t,:],rel[t-1,:],...,rel[t-79,:]]

Как я мог бы сделать это в панд, или любой другой структуры, такие как scikit .Временные ряды.

ответ

2

Вы можете сделать как в простом NumPy, хотя панды, вероятно, имеют определенную функциональность, что упрощает ее работу. Но:

rel = np.diff(input)/input[:-1] 

и

from numpy.lib.stride_tricks import as_strided 
win = as_strided(rel, shape=(rel.shape[0]-79, 80), strides=rel.strides*2) 

будет делать это.


Если вход имеет более чем одну строку, вы все равно можете сделать выше, как:

rel = np.diff(input, axis=1)/input[:, :-1] 
win = as_strided(rel, shape=(rel.shape[0], rel.shape[1]-79, 80), 
       strides=rel.strides + rel.strides[1:]) 

хотя вы можете играть с «формой» и соответствие strides, чтобы получить точное оконная форма, которой вы пользуетесь.

+0

Это выглядит хорошо, попробует проверить его – siamii

+0

Что делать, если вход имеет размеры 'k'? – siamii

+0

@siamii Как именно вы хотели бы рассчитать относительные различия или окно k-мерных данных? Это, безусловно, можно сделать, но вам нужно определить, что именно вы хотите сделать. – Jaime

Смежные вопросы