Корреляция двух переменных в временных рядах в Python?

Если у меня есть два разных набора данных, которые находятся во временном ряду, существует ли простой способ найти корреляцию между двумя наборами в python?

Например:

# [ (dateTimeObject, y, z) ... ]
x = [ (8:00am, 12, 8), (8:10am, 15, 10) .... ]

Как я могу получить корреляцию y и z в Python?

Ответ 1

Немного медленный на поглощении здесь. pandas (http://github.com/wesm/pandas и pandas.sourceforge.net), вероятно, ваш лучший выбор. Я предвзятый, потому что написал это, но:

In [7]: ts1
Out[7]: 
2000-01-03 00:00:00    -0.945653010936
2000-01-04 00:00:00    0.759529904445
2000-01-05 00:00:00    0.177646448683
2000-01-06 00:00:00    0.579750822716
2000-01-07 00:00:00    -0.0752734982291
2000-01-10 00:00:00    0.138730447557
2000-01-11 00:00:00    -0.506961851495

In [8]: ts2
Out[8]: 
2000-01-03 00:00:00    1.10436688823
2000-01-04 00:00:00    0.110075215713
2000-01-05 00:00:00    -0.372818939799
2000-01-06 00:00:00    -0.520443811368
2000-01-07 00:00:00    -0.455928700936
2000-01-10 00:00:00    1.49624355051
2000-01-11 00:00:00    -0.204383054598

In [9]: ts1.corr(ts2)
Out[9]: -0.34768587480980645

Примечательно, что если ваши данные превышают разные наборы дат, он будет вычислять парную корреляцию. Он также автоматически исключает значения NaN!

Ответ 2

Scipy имеет статистика с функцией корреляции.

from scipy import stats
# Y and Z are numpy arrays or lists of variables 
stats.pearsonr(Y, Z)

Ответ 3

Вы можете сделать это с помощью ковариационной матрицы или коэффициентов корреляции. http://docs.scipy.org/doc/numpy/reference/generated/numpy.cov.html и http://docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html - это функции документации для это, первый также поставляется с образцом, как его использовать (использование corrcoef очень похоже).

>>> x = [ (None, 12, 8), (None, 15, 10), (None, 10, 6) ]
>>> data = numpy.array([[e[1] for e in x], [e[2] for e in x]])
>>> numpy.corrcoef(data)
array([[ 1.        ,  0.99339927],
       [ 0.99339927,  1.        ]])

Ответ 4

Использовать numpy:

from numpy import *
v = [ ('k', 1, 2), ('l', 2, 4), ('m', 13, 9) ]
corrcoef([ a[1] for a in v ], [ a[2] for a in v ])[0,1]