python计算两组数据的相关性_关于python:使用.corr获取两列之间的相关性

article/2025/10/8 6:28:05

我有以下熊猫数据框Top15:

qqIZL.png

我创建了一个列来估计每个人的可引用文档数:

1

2Top15['PopEst'] = Top15['Energy Supply'] / Top15['Energy Supply per Capita']

Top15['Citable docs per Capita'] = Top15['Citable documents'] / Top15['PopEst']

我想知道人均可引用文件数量与人均能源供应之间的关系。所以我使用了.corr()方法(皮尔逊相关法):

1

2data = Top15[['Citable docs per Capita','Energy Supply per Capita']]

correlation = data.corr(method='pearson')

我想返回一个数字,但结果是:

K8P18.png

我认为你是对的。但是你能告诉我为什么"data.corr(method='pearson')"只返回能源供应和能源供应之间的关系吗?

它没有。它应该返回一个2x2矩阵;显示其左上角的条目。如果直接将.corr应用于数据帧,它将返回所有的成对相关性;这就是为什么您随后在矩阵的对角线处观察1s(每列与自身完全相关)。见下面我的编辑。

如果你认为答案已经回答了你的问题,请考虑接受它。

我接受了你的回答,谢谢

我找不到你说的按钮。我只是按你答案旁边的上箭头

这个问题直接来源于课程"Python数据科学导论"课程。具体来说,作业3,问题9。当指导老师克里斯·布鲁克斯鼓励学生们把问题堆得满满的时候,我不认为他是说他们应该逐字地把作业中的问题贴出来。

如果没有实际的数据,很难回答这个问题,但我想您正在寻找这样的问题:

1Top15['Citable docs per Capita'].corr(Top15['Energy Supply per Capita'])

它计算两列'Citable docs per Capita'和'Energy Supply per Capita'之间的相关性。

举个例子:

1

2

3

4

5

6

7

8

9import 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

然后

1df['A'].corr(df['B'])

按预期给予1。

现在,如果您更改一个值,例如

1

2

3

4

5

6

7df.loc[2, 'B'] = 4.5

A B

0 0 0.0

1 1 2.0

2 2 4.5

3 3 6.0

命令

1df['A'].corr(df['B'])

收益率

10.99586

它仍然接近1,如预期的那样。

如果直接将.corr应用于数据帧,它将返回列之间的所有成对关联;这就是为什么您随后在矩阵的对角线处观察1s(每个列与自身完全关联)。

1df.corr()

因此将返回

1

2

3A B

A 1.000000 0.995862

B 0.995862 1.000000

在您展示的图形中,仅表示相关矩阵的左上角(我假设)。

有些情况下,您的解决方案中可能会有NaNs—请查看本文中的示例。

如果要筛选高于/低于某个阈值的条目,可以检查此问题。如果你想绘制一个相关系数的热图,你可以检查这个答案,然后如果你遇到重叠轴标签的问题,检查下面的文章。

这可以按行应用吗?

@厄运博士:是的,它只需要一系列,例如,df.loc[1, :].corr(df.loc[2, :])也可以。对于整个数据帧,您可以简单地转置:df.T.corr()。

不过,我尝试了您的建议,即使在使用df.loc[2,'b']=4.5更改了B列中的A值之后,计算仍然返回1。也许我只是对计算有点困惑

@厄运博士:很难帮助,因为我不知道你的密码。我是否正确理解,我上面的例子在您的案例中返回了1,而不是0.99586?

是的,我用了你的密码。它总是返回1

尝试将pandas导入为pd import numpy作为np示例df=pd.dataframe(np.random.randn(5,5),np.arange(5))打印示例df.iloc[1,:]打印示例df.iloc[2,:]打印示例df.iloc[1,:]corr(示例df.iloc[2,:])

@厄运博士:不能繁殖。用np.random.seed(0)我得到0.771616539283。你能试试这个种子吗?

让我们在聊天中继续讨论。

因为数据集是维度500*10,所以dataset.corr()应该给出矩阵10*10的输出,但是它给出的输出矩阵是1*1…为什么?

@劳拉:不知道你的数据很难说。也许你可以打开一个新的问题,并以此作为参考!?确保包括一个可重复的例子。

我也遇到了同样的问题。似乎Citable Documents per Person是一个float,而python默认情况下会跳过它。我的数据框架中的所有其他列都是numpy格式,所以我通过将columnt转换为np.float64来解决这个问题。

1Top15['Citable Documents per Person']=np.float64(Top15['Citable Documents per Person'])

记住这正是你自己计算的列

工作原理如下:

1

2

3

4

5Top15['Citable docs per Capita']=np.float64(Top15['Citable docs per Capita'])

Top15['Energy Supply per Capita']=np.float64(Top15['Energy Supply per Capita'])

Top15['Energy Supply per Capita'].corr(Top15['Citable docs per Capita'])

我的解决方案是将数据转换为数字类型:

1Top15[['Citable docs per Capita','Energy Supply per Capita']].corr()

当你称之为:

1

2data = Top15[['Citable docs per Capita','Energy Supply per Capita']]

correlation = data.corr(method='pearson')

因为dataframe.corr()函数执行逐对关联,所以有两个变量中的四对。所以,基本上,你得到的是对角线值作为自相关(与自身相关,因为你有两个变量,所以有两个值),另外两个值作为一个和另一个的交叉相关,反之亦然。

在两个序列之间执行相关性以获取单个值:

1

2

3

4from scipy.stats.stats import pearsonr

docs_col = Top15['Citable docs per Capita'].values

energy_col = Top15['Energy Supply per Capita'].values

corr , _ = pearsonr(docs_col, energy_col)

或者,如果要从同一个函数(数据帧的corr)获取单个值:

1single_value = correlation[0][1]

希望这有帮助。

如果需要所有列对之间的关联,可以这样做:

1

2

3

4

5

6

7

8

9

10

11

12import 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')])

我通过更改数据类型解决了这个问题。如果你看到"人均能源供应"是一个数字类型,"人均可引用文件"是一个对象类型。我使用astype将列转换为float。我对一些np函数也有同样的问题:count_nonzero和sum工作,而mean和std不工作。


http://chatgpt.dhexx.cn/article/51vv4rav.shtml

相关文章

df.corr和df.describe()

1:df.corr() df.corr()函数的作用是返回列与列之间的相关系数 corr_matrix df.corr() sns.heatmap(corr_matrix, annotTrue, cmapcoolwarm) 2:df.describe() 得到数字列的一些特殊值。如果是df.describe(includeO) ,则描述obje…

Oracle MySQL Hive sql 求相关性系数 corr

MySQL所有版本: CREATE TABLE sample (x float NOT NULL,y float NOT NULL,user_name varchar(255) ) ;INSERT INTO sample VALUES (1, 10, zs); INSERT INTO sample VALUES (2, 4, zs); INSERT INTO sample VALUES (3, 5, zs); INSERT INTO sample VALUES (6, 17…

CORR函数 看不明白

CORR聚集函数来计算相关系数 CORR:皮尔逊相关系数,是用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。 CORR_S:斯皮尔曼等级相关 SELECT CORR(SYSDATE - hiredate, sal) AS corr_val, CORR…

COSI-Corr安装教程

hello,各位好久不见。最近要处理数据了,一步步学习COSI-Corr软件。安装很简单的,大家一起来学习吧。 1、在COSI-Corr官网点击并注册,官方会给你提供的邮箱发送软件安装包;COSI-Corr: Measuring Ground Deformation from Optical …

matlab corr2原码,matlab中corr2函数的错误

我想通过使用corr2函数的模板匹配来读取输入图像中的字母 . 为此,我创建了数字和符号模板 . 在运行读取信件的代码时,我收到以下错误: Error using corr2 Expected input number 1, A, to be two-dimensional. 用于模板创建的MAtlab代码 %CREATE TEMPLATES one=imread(1.png…

pandas——相关系数函数corr()

计算DataFrame列之间的相关系数 a np.arange(1,10).reshape(3,3)data DataFrame(a,index["a","b","c"],columns["one","two","three"])print(data)one two threea 1 2 3b 4 5 6c 7 …

回归分析中的相关度(Corr)和R^2

一、.皮尔逊相关系数(Pearson Correlation Coefficient) 1.可以用来衡量两个数值之间的线性相关程度 2.对应的取值范围为[-1,1],即存在正相关,负相关和不相关 3.计算公式: 二、R^2 1.定义:决定系数,反应…

Python机器学习:corr()分析变量之间的相关关系

变量之间存在多重共线性的情况下会影响模型的精度,这里用相关矩阵corr()和热力图heatmap()可以直观地观察变量之间的相关关系,进而判断是否要对自变量进行删除,或者降维的操作。 首先用corr()构造相关矩阵研究变量之间的相关关系&#xff1a…

理解页面置换算法

对页面置换算法的理解: 在进程运行时,若其访问的页面不在内存,而需将其调入,但内存已无空闲空间时,就需要从内存中调出一页程序或数据,送入磁盘的对换区。选择调出页面的算法就称为页面置换算法。好的页面置…

Python实现页面置换算法

Python实现页面置换算法 FIFO LRU OPT 页面置换——FIFO、LRU、OPT Python实现页面置换算法页面置换算法:一、FIFO(先进先出置换算法)1.算法解析算法原理:当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘…

页面置换算法java_页面置换算法之Clock算法

1.前言 缓冲池是数据库最终的概念,数据库可以将一部分数据页放在内存中形成缓冲池,当需要一个数据页时,首先检查内存中的缓冲池是否有这个页面,如果有则直接命中返回,没有则从磁盘中读取这一页,然后缓存到内…

一文看懂页面置换算法

页面置换算法分为两类 1、局部页面置换算法 最优页面置换算法(OPT、optimal)先进先出算法(FIFO)最近最久未使用算法(LRU,Least Recently Used)时钟页面置换算法(Clock)最不常用算法…

虚拟内存页面置换算法

虚拟内存页面置换算法 虚拟地址空间页表分页式分段式段页式 页面置换算法最优置换算法( OPT)先进先出算法(FIFO)最近最久未使用算法(LRU) 虚拟内存是计算机系统内存管理的一种技术。 它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间&a…

OS之页面置换算法

之前几篇博客记录了OS内存管理的一些知识和技术,接下来将继续深入,介绍一些页面置换算法,这里包括一些我们大家都略有耳闻的算法。 置换算法 当出现缺页故障时,需要从外存调入新的页面到内存中去,而如果此时内存已满…

os 页面置换算法

在进程运行过程中,若其所要访问的页面不在内存,而需把它们调入内存,但内部无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据送到磁盘的对换区中。但应将哪个页面调出,须根据一定…

内存页面置换算法

前面我们说过了进程的调度算法,今天我们继续来盘内存页面的置换算法,给你整的明明白白的🤪🤪🤪。 内存页面置换算法主要有下面这么几种: 最佳页面置换算法(OPT)先进先出置换算法&a…

三种页面置换算法(详解)

地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选…

计算机操作系统——页面置换算法

声明:本篇博客参考书籍《计算机操作系统》(西安电子科技大学出版社) 文章目录 一、最佳页面置换算法1、基本知识2、算法思想 二、先进先出(FIFO)页面置换算法1、基本知识2、算法思想 三、最近最久未使用(L…

页面置换算法

文章目录 一、什么是页面置换算法?二、常用的页面置换算法1. FIFO(先进先出算法)2. OPT(最佳置换算法)3. LRU(最近最少使用算法)4. Clock(时钟置换算法)5. LFU(最不常用算法)6. MFU(最常使用算法) 三、程序设计 一、什么是页面置换算法? 进程运行时&…

一文讲懂页面置换算法,带例题详解

目录 ​什么是页面置换算法? ​缺页中断次数和页面置换次数 ​啥子是缺页? ​啥子是中断? ​啥子是缺页中断? ​缺页中断次数 ​最佳置换算法OPT和先进先出置换算法FIFO ​最佳置换算法OPT ​算法思想 ​算法优点 ​算…