2011-01-26 38 views
10

Nếu tôi có hai bộ dữ liệu khác nhau trong một chuỗi thời gian, có cách nào đơn giản để tìm mối tương quan giữa hai bộ trong python không?Tương quan của hai biến trong một chuỗi thời gian bằng Python?

Ví dụ với:

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

Làm thế nào tôi có thể nhận được các mối tương quan của y và z bằng Python?

+0

NumPy hoặc SciPy. –

Trả lời

23

nhỏ chậm trên sự hấp thu ở đây. gấu trúc (http://github.com/wesm/pandas và pandas.sourceforge.net) có lẽ là đặt cược tốt nhất của bạn. Tôi thiên vị vì tôi đã viết nó nhưng:

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 

Đáng chú ý là nếu dữ liệu của bạn là trên bộ khác nhau của ngày tháng, nó sẽ tính toán tương quan cặp. Nó cũng sẽ tự động loại trừ các giá trị NaN!

7

Scipy có một module statistics với chức năng tương quan.

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

Bạn có thể làm điều đó thông qua ma trận hiệp phương sai hoặc hệ số tương quan. http://docs.scipy.org/doc/numpy/reference/generated/numpy.cov.htmlhttp://docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html là các chức năng tài liệu cho điều này, trước đây cũng đi kèm với một mẫu làm thế nào để sử dụng nó (sử dụng corrcoef là rất giống nhau).

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

Sử dụng 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] 
Các vấn đề liên quan