Pregunta Correlación de dos variables en una serie de tiempo en Python?


Si tengo dos conjuntos de datos diferentes que están en una serie temporal, ¿hay alguna forma simple de encontrar la correlación entre los dos conjuntos en python?

Por ejemplo con:

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

¿Cómo podría obtener la correlación de y y z en Python?


11
2018-01-26 20:18


origen


Respuestas:


Poco lento en la captación aquí. pandas (http://github.com/wesm/pandas y pandas.sourceforge.net) es probablemente su mejor apuesta. Soy parcial porque lo escribí pero:

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

En particular, si sus datos están en diferentes conjuntos de fechas, calculará la correlación por pares. ¡También excluirá automáticamente los valores de NaN!


25
2018-05-30 22:08



Scipy tiene un estadística módulo con función de correlación

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

8
2018-01-26 20:25



Puede hacerlo a través de la matriz de covarianza o los coeficientes de correlación. http://docs.scipy.org/doc/numpy/reference/generated/numpy.cov.html y http://docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html son las funciones de documentación para esto, el primero también viene con una muestra de cómo usarlo (el uso de corrcoef es muy similar).

>>> 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
2018-01-26 20:26



Use 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]

1
2018-01-26 20:31



Yo recomendaría la biblioteca pandas http://pandas.sourceforge.net/generated/pandas.DataFrame.corr.html?highlight=corr#pandas.DataFrame.corr


-1
2018-01-26 20:23