【发布时间】:2017-02-12 13:31:48
【问题描述】:
这里是sn-p的代码:
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
【问题讨论】:
-
“因此它们应该具有值 1 的相关性”:您的假设是错误的。
-
你能说得更具体些吗?如果两列有A->B、B->C和C->A的对应关系,你不觉得这两列之间有关联吗? @lanS
-
有,但不是 1。虽然我不是最好的解释者。我想你在这里问你的问题会更好:stats.stackexchange.com
-
Correlation 是线性关系。你定义的不是线性的。
-
附言。如果您的映射是
x -> x+1,则相关性将为 1。
标签: python pandas dataframe statistics correlation