2011-01-26 19 views
10

Bir zaman dizisindeki iki farklı veri kümem varsa, python'daki iki grup arasındaki ilişkiyi bulmanın basit bir yolu var mı?Python'da Bir Zaman Serisinde İki Değişkenli Korelasyonu?

ile Örneğin:

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

nasıl Python y korelasyon ve z alabilir?

+0

NumPy veya SciPy. –

cevap

23

Küçük yavaş. pandalar (http://github.com/wesm/pandas ve pandas.sourceforge.net) muhtemelen en iyi bahistir. Ben yazdım ama çünkü önyargılı değilim: Veri tarihlerin farklı setleri üzerinde ise

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 

Özellikle, bu ikili korelasyonun hesaplanması olacaktır. Ayrıca NaN değerlerini otomatik olarak hariç tutar!

7

Scipy korelasyon fonksiyonu ile statistics modülüne sahip öneriyoruz.

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

Sen yapabileceği kovaryans matrisinin ya korelasyon katsayıları aracılığıyla. http://docs.scipy.org/doc/numpy/reference/generated/numpy.cov.html ve http://docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html bunun için dokümantasyon fonksiyonlarıdır, eski modelde nasıl kullanıldığına dair bir örnek vardır (düzeltimsiz kullanım çok benzerdir).

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

Kullanım numpy: Burada alımına

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] 
İlgili konular