2014-09-28 12 views
5

के साथ पांडस डेटाफ्रेम के स्वत: सहसंबंध की गणना करना मैं पांडस डेटाफ्रेम के कॉलम के बीच अंतराल की लंबाई के स्वत: सहसंबंध गुणांक की गणना करना चाहता हूं। अपने डेटा का एक टुकड़ा है:प्रत्येक कॉलम

  RF  PC   C   D  PN  DN   P 
year                  
1890  NaN  NaN  NaN  NaN  NaN  NaN  NaN 
1891 -0.028470 -0.052632 0.042254 0.081818 -0.045541 0.047619 -0.016974 
1892 -0.249084 0.000000 0.027027 0.067227 0.099404 0.045455 0.122337 
1893 0.653659 0.000000 0.000000 0.039370 -0.135624 0.043478 -0.142062 

साथ साल, मैं प्रत्येक स्तंभ (आरएफ, पीसी, आदि ...) के लिए अंतराल एक की autocorrelations गणना करना चाहते हैं।

स्वत: सहसंबंधों की गणना करने के लिए, मैंने प्रत्येक कॉलम के लिए दो बार श्रृंखला निकाली, जिसका प्रारंभ और अंत डेटा एक वर्ष से भिन्न था और फिर numpy.corrcoef के साथ सहसंबंध गुणांक की गणना की गई।

उदाहरण के लिए, मैं ने लिखा है:

numpy.corrcoef(data[['C']][1:-1],data[['C']][2:])

(पूरे DataFrame data कहा जाता है)।
हालांकि, आदेश दुर्भाग्य से लौटे:

array([[ nan, nan, nan, ..., nan, nan, nan], 
     [ nan, nan, nan, ..., nan, nan, nan], 
     [ nan, nan, nan, ..., nan, nan, nan], 
     ..., 
     [ nan, nan, nan, ..., nan, nan, nan], 
     [ nan, nan, nan, ..., nan, nan, nan], 
     [ nan, nan, nan, ..., nan, nan, nan]]) 

किसी कृपया कैसे autocorrelations गणना करने के लिए पर मुझे सलाह कर सकते हैं?

उत्तर

2

आप उपयोग करना चाहिए:

numpy.corrcoef(df['C'][1:-1], df['C'][2:]) 

df[['C']], केवल एक स्तंभ के साथ एक dataframe का प्रतिनिधित्व करता है, जबकि df['C'] अपने सी स्तंभ में मानों युक्त एक श्रृंखला है।

15

यह एक देर से जवाब है, लेकिन भविष्य उपयोगकर्ताओं के लिए, आप भी pandas.Series.autocorr() है, जो अंतराल-एन (डिफ़ॉल्ट = 1) सीरीज पर ऑटो सहसंबंध की गणना करता है का उपयोग कर सकते हैं:

df['C'].autocorr(lag=1) 

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.autocorr.html#pandas.Series.autocorr

4

.autocorrapplies श्रृंखला के लिए, डेटाफ्रेम नहीं। आप .apply उपयोग कर सकते हैं एक DataFrame को लागू करने के लिए:

def df_autocorr(df, lag=1, axis=0): 
    """Compute full-sample column-wise autocorrelation for a DataFrame.""" 
    return df.apply(lambda col: col.autocorr(lag), axis=axis) 
d1 = DataFrame(np.random.randn(100, 6)) 

df_autocorr(d1) 
Out[32]: 
0 0.141 
1 -0.028 
2 -0.031 
3 0.114 
4 -0.121 
5 0.060 
dtype: float64 

तुम भी रोलिंग एक निर्दिष्ट विंडो के साथ autocorrelations इस प्रकार से परिकलित सकता है (यह क्या .autocorr हुड के नीचे कर रहा है):

def df_rolling_autocorr(df, window, lag=1): 
    """Compute rolling column-wise autocorrelation for a DataFrame.""" 

    return (df.rolling(window=window) 
     .corr(df.shift(lag))) # could .dropna() here 

df_rolling_autocorr(d1, window=21).dropna().head() 
Out[38]: 
     0  1  2  3  4  5 
21 -0.173 -0.367 0.142 -0.044 -0.080 0.012 
22 0.015 -0.341 0.250 -0.036 0.023 -0.012 
23 0.038 -0.329 0.279 -0.026 0.075 -0.121 
24 -0.025 -0.361 0.319 0.117 0.031 -0.120 
25 0.119 -0.320 0.181 -0.011 0.038 -0.111 
संबंधित मुद्दे