我有以下pandas数据框架Top15
。
。
我创建了一个列,估计每个人的可引用文件的数量。
Top15['PopEst'] = Top15['Energy Supply'] / Top15['Energy Supply per Capita']
Top15['Citable docs per Capita'] = Top15['Citable documents'] / Top15['PopEst']
我想知道人均可引用文件数与人均能源供应量之间的相关性。所以我使用.corr()
方法(Pearson's correlation)。
data = Top15[['Citable docs per Capita','Energy Supply per Capita']]
correlation = data.corr(method='pearson')
我想返回一个单一的数字,但结果是。
没有实际数据,很难回答这个问题,但我猜你在寻找这样的东西。
Top15['Citable docs per Capita'].corr(Top15['Energy Supply per Capita'])
这将计算你的两列之间的相关性 '人均可引用文件'
和'人均能源供应'
。
举个例子。
import pandas as pd
df = pd.DataFrame({'A': range(4), 'B': [2*i for i in range(4)]})
A B
0 0 0
1 1 2
2 2 4
3 3 6
那么
df['A'].corr(df['B'])
正如预期的那样,给出了`1'。
现在,如果你改变一个值,例如
df.loc[2, 'B'] = 4.5
A B
0 0 0.0
1 1 2.0
2 2 4.5
3 3 6.0
命令
df['A'].corr(df['B'])
返回
0.99586
这仍然接近于1,符合预期。
如果你直接对你的数据框架应用.corr
,它将返回你的列之间的所有成对相关性;这就是为什么你在矩阵的对角线上观察到1s
(每列与自己完全相关)。
df.corr()
因此将返回
A B
A 1.000000 0.995862
B 0.995862 1.000000
在你展示的图形中,只有相关矩阵的左上角被表示出来(我假设)。
在有些情况下,你的解决方案中会出现 "NaN"--请查看本帖中的一个例子。
如果你想过滤高于/低于某个阈值的条目,你可以查看这个问题。 如果你想绘制相关系数的热图,你可以查看这个答案,如果你随后遇到轴标签重叠的问题,请查看下面的帖子。
如果你想要所有列对之间的相关性,你可以做这样的事情。
import pandas as pd
import numpy as np
def get_corrs(df):
col_correlations = df.corr()
col_correlations.loc[:, :] = np.tril(col_correlations, k=-1)
cor_pairs = col_correlations.stack()
return cor_pairs.to_dict()
my_corrs = get_corrs(df)
# and the following line to retrieve the single correlation
print(my_corrs[('Citable docs per Capita','Energy Supply per Capita')])