如何计算熊猫中的spearman等级相关性?

时间:2018-03-28 12:42:35

标签: python pandas numpy ipython

我有一个如下所示的数据框:每个值代表5个距离之一(1000米,800米,600米,400米,200米,0)。

'key1': array([  1.21,   0.99,   6.66,
          5.22,   3.33]), 'key2': array([  2.21,   2.99,   5.66,
          6.22,   2.33]), 'key3': array([  4.21,   1.59,   6.66,
          9.12,   0.23])......

我想计算每个键的值和距离之间的Spearman等级相关性。

我有很多'钥匙'我想以某种方式在熊猫中做到这一点。然后在所有键上绘制一个spearman等级和距离平均值的图表。

2 个答案:

答案 0 :(得分:2)

这是通过词典理解和scipy.stats.spearmanr的一种方式。

import numpy as np
from scipy.stats import spearmanr

d = np.array([1000, 800, 600, 400, 200])

v = {'key1': np.array([  1.21,   0.99,   6.66,   5.22,   3.33]),
     'key2': np.array([  2.21,   2.99,   5.66,   6.22,   2.33]),
     'key3': np.array([  4.21,   1.59,   6.66,   9.12,   0.23])}

res = {k: spearmanr(v[k], d)[0] for k in sorted(v)}

如果您想使用pandas,我的建议是执行上述计算并根据结果创建数据框。

在将数据放入pandas后,这几乎肯定比执行计算更有效。

df = pd.DataFrame.from_dict(res, orient='index')

结果:

        0
key1 -0.5
key2 -0.4
key3  0.1

答案 1 :(得分:2)

既然你提到了pandas,并且pandas中有corr函数,方法为spearman

pd.concat([pd.DataFrame(v),pd.DataFrame(d)],axis=1).corr(method="spearman").iloc[-1]
Out[1302]: 
key1   -0.5
key2   -0.4
key3    0.1
0       1.0
Name: 0, dtype: float64