2011-01-26 19 views
10

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

Por ejemplo, con:

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

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

+0

NumPy o SciPy. –

Respuesta

23

poco lento en la absorció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 

Cabe destacar que si sus datos son sobre diferentes conjuntos de fechas, se calculará la correlación por pares. ¡También excluirá automáticamente los valores de NaN!

7

Scipy tiene un módulo statistics con función de correlación.

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

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.  ]]) 
1

Uso 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] 
Cuestiones relacionadas