数据框 Pandas 中所有行的 Pearson 相关性

Posted

技术标签:

【中文标题】数据框 Pandas 中所有行的 Pearson 相关性【英文标题】:Pearson correlation for all rows in Data Frames Pandas 【发布时间】:2016-10-24 11:15:46 【问题描述】:

我在 Pandas 中有一个数据框,它的形状是 (136, 1445)。我尝试为我的 136 行创建相关(皮尔逊)矩阵。所以结果,我需要一个大小为 136x136 的矩阵。

我尝试了两种不同的方法,但无法从中获得结果,或者当我创建 136x136 相关矩阵时,我丢失了数据框的列名。

首先,

gene_expression = pd.read_csv('padel_all_drug_results_original.csv',dtype='unicode')
gene_expression = gene_expression.convert_objects(convert_numeric=True)
gene_expression.corr()

这给出了基于列的 pearson 相关矩阵 (1445*1445),当我尝试转置我的数据帧然后尝试查找相关性时,数据帧的结构被破坏(比如列名丢失或者我什至不确定相关性是否正确)。

其次,

distance = lambda column1, column2: pearsonr(column1,column2)[0]
result = gene_expression.apply(lambda col1: gene_expression.apply(lambda col2: distance(col1, col2)))

我应该如何计算 136x136 pearson 相关矩阵以不改变原始数据框?

另外,我有 1445 个特征和一些几乎全为零的列。所以我删除了那些列,因为它们是嘈杂的列,但是你有另一个想法来减少特征吗?

提前致谢

【问题讨论】:

【参考方案1】:

要获得包含所有行之间成对相关性的相关矩阵,您可以:

gene_expression.T.corr()

使用玩具示例:

df = pd.DataFrame(np.random.randint(0, high=100, size=(5, 10)), index=list(string.ascii_lowercase[:5]))

带有 5 个标记的行和 10 个列:

df.info()
Index: 5 entries, a to e
Data columns (total 10 columns):
0    5 non-null int64
1    5 non-null int64
2    5 non-null int64
3    5 non-null int64
4    5 non-null int64
5    5 non-null int64
6    5 non-null int64
7    5 non-null int64
8    5 non-null int64
9    5 non-null int64
dtypes: int64(10)
memory usage: 440.0+ bytes

使用

df.T.corr()

产量

          a         b         c         d         e
a  1.000000  0.209460 -0.205302 -0.294427  0.353803
b  0.209460  1.000000 -0.530715 -0.117949  0.775848
c -0.205302 -0.530715  1.000000 -0.245101 -0.344358
d -0.294427 -0.117949 -0.245101  1.000000  0.058302
e  0.353803  0.775848 -0.344358  0.058302  1.000000

【讨论】:

我不知道为什么,但在我的数据框中,列索引更改为 1,2,3,4....135。但无论如何你的建议是正确的,谢谢。 在 set_index 到我的 pandas 的第一列之后,它已修复。

以上是关于数据框 Pandas 中所有行的 Pearson 相关性的主要内容,如果未能解决你的问题,请参考以下文章

按列名和多索引向多索引数据框添加值

以整数形式获取 pandas 数据框行的索引

使用 sql 或 pandas 数据框获取前 5 行的 pyspark 数据框

在 scipy/pandas 中用 Pearson 的 r 删除 'nan'

Pandas 从重采样中检索添加行的索引

Pandas:如何删除重复的行,但保留所有行的最大值[重复]