数据帧Pandas中所有行的Pearson相关

2024-05-15 23:20:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫的数据框,它的形状是(1361445)。我试图为我的136行创建相关(Pearson)矩阵。所以在结果中,我需要一个136x136的矩阵。

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

首先

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皮尔逊相关矩阵以不更改原始数据帧?

另外,我有1445个特性,有些列几乎都是零。所以我放弃了那些列,因为它们是嘈杂的列,但你有没有其他的想法,以功能重建?

提前谢谢


Tags: csv数据lambdaconvert矩阵col2col1distance
1条回答
网友
1楼 · 发布于 2024-05-15 23:20:26

要获取包含所有行之间成对关联的关联矩阵,可以:

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

相关问题 更多 >