как вычислить корреляцию между двумя образцами - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь вычислить корреляцию между двумя выборками (строками) в типе DataFrame.Я нашел несколько кодов, которые вычисляют корреляцию между объектами (столбцами), в конце концов, она преобразует матрицу в отсортированный список, а затем удаляет корреляцию с самим собой.что я хочу то же самое для образцов.

correlations_all = train_df[features].corr().abs().unstack().sort_values(kind="quicksort").reset_index()

correlations_all = correlations_all[correlations_all['level_0'] != correlations_all['level_1']]

output:
level_0        level_1        0
var_0          var_1          0.50
var_0          var_4          0.45
var_10         var_4          0.4

так как это сделать в Python?

1 Ответ

0 голосов
/ 28 мая 2019

В сумме ваш ответ

pd.concat([df,df2],axis=1).T.corr().drop(range(0,df.shape[1]),axis=1)[0:df.shape[1]+1]

Подробное объяснение:

Создать ДФ

df = pd.DataFrame(np.random.randint(0, high=100, size=(10, 5)),columns=list('abcde'))
df2 = pd.DataFrame(np.random.randint(0, high=100, size=(10, 5)),columns=list('fghjk'))

Выход:

>>> df
a   b   c   d   e
0  47  68  60   8  27
1  52  36  50   0  46
2  21  53  55  43   0
3  32  63  42  37  38
4  91  95  28  81  55
5  68  14  16   5  27
6  51   2  73   8  49
7   2  83  54  77  61
8  44  89  87  93  42
9  75  50  78  31  80

>>> df2
    f   g   h   j   k
0  40  62  68   2  24
1  55   9  64  37  39
2  18   5  11  14  79
3  36  14  39  11  66
4  63  95  87  49  81
5  29  20  76  32  90
6  19  48  13   0  81
7  79  55  32   8  17
8  93   3  33   7  53
9  85  30  50  14   2
corr() 

Существует функция corrwith(), которая вычисляет корреляцию с другим фреймом данных.

corr() более полезен в вашей ситуации. Но corr() вычисляет это сам с собой. Из-за этого сначала мы конкатить 2 df.

Вывод:

>>>pd.concat([df,df2],axis=1)
    a   b   c   d   e   f   g   h   j   k
0  47  68  60   8  27  40  62  68   2  24
1  52  36  50   0  46  55   9  64  37  39
2  21  53  55  43   0  18   5  11  14  79
3  32  63  42  37  38  36  14  39  11  66
4  91  95  28  81  55  63  95  87  49  81
5  68  14  16   5  27  29  20  76  32  90
6  51   2  73   8  49  19  48  13   0  81
7   2  83  54  77  61  79  55  32   8  17
8  44  89  87  93  42  93   3  33   7  53
9  75  50  78  31  80  85  30  50  14   2

corr() метод вычисляет корреляцию между столбцами. Для вычисления между строками сначала возьмите транспонирование и отбросьте части df, которые вы не хотите видеть.

pd.concat([df,df2],axis=1).T.corr().drop(range(0,df.shape[1]),axis=1)[0:df.shape[1]+1]

Выход:

pd.concat([df,df2],axis=1).T.corr().drop(range(0,df.shape[1]),axis=1)[0:df.shape[1]]
              5         6         7         8         9
    0  0.154824  0.161153 -0.006838 -0.301014 -0.125625
    1 -0.405248 -0.344024  0.413258  0.284815  0.367698
    2  0.146049 -0.390763  0.165186 -0.358735 -0.245411
    3 -0.018887 -0.084056 -0.239326  0.061516  0.488869
    4 -0.338686  0.256093  0.455395  0.741626 -0.130878

Извлечь одну строку

def compute_corr(df,i):
    print(f"Correlation between {i}'th sample and other samples")
    return df.T.corr().loc[i]

Выход:

x= pd.concat([df,df2],axis=1).T.corr().drop(range(0,6),axis=1)
compute_corr(x,0)
Correlation between 0'th sample and other samples
0    1.000000
1    0.590134
2   -0.983648
3   -0.894758
4   -0.463191   
Name: 0, dtype: float64

Надеюсь, на этот раз этот код вам нужен.

...