以下是代码段:
df = pd.DataFrame(data=[1,1,2,2,3,3,3], columns =list('A'))
def m(x):
if x == 1:
return 2
if x == 2:
return 3
if x == 3:
return 1
return -1
df['B'] = df['A'].map(m)
print df.head(n=10)
A B
0 1 2
1 1 2
2 2 3
3 2 3
4 3 1
5 3 1
6 3 1
正如我们所看到的,B列是通过映射A列的值来创建的,因此它们应该具有值1的相关性,但是我从下面得到的结果并不令人满意。谁能给我一些关于如何计算两列离散数据相关性的想法?非常感谢!
df['A'].cov(df['B'])
-0.47619047619047611
df['A'].corr(df['B'], method='spearman')
-0.68000000000000016
df['A'].corr(df['B'], method='kendall')
-0.50000000000000011
df['A'].corr(df['B'])
-0.58823529411764708
答案 0 :(得分:1)
第5行中的值向相反方向移动,这就是为什么得到-0.58823529411764708
的相关性的原因。您可以看到在A列中第4个值为2,然后第5个值为3,因此您的序列在此列中增加。而在B列中,第4个值为3,然后第五个值为1,因此您的序列正在减少。你的计算没有问题。如果计算相关性直到第4行,您将得到相关系数= 1,因为两列中的值都移动到相同的方向。
您可以在这篇文章中找到一个很好的相关解释:https://stats.stackexchange.com/questions/29713/what-is-covariance-in-plain-language