我有一个如下所示的数据框:每个值代表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等级和距离平均值的图表。
答案 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