python - scipy.stats.pearsonr 抱怨操作数类型 -: 'tuple' 和 'float'
问题描述
我正在尝试计算 numpy 二维数组的两列之间的相关性。数组看起来像:
a = np.array([[5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2]])
所以第一列和第三列之间的相关性计算为:
import scipy
x, y = scipy.stats.pearsonr(a[:,0], a[:,2])
但是,它抱怨:
unsupported operand type(s) for -: 'tuple' and 'float'
这意味着,例如,正在发生以下情况:
print((0.1,0.2) - 0.3)
TypeError: unsupported operand type(s) for -: 'tuple' and 'float'
更新:完整代码:
import pandas as pd
from scipy import stats
import numpy as np
a = pd.read_csv("src/iris.csv").drop('species', axis=1).values
def lengths():
x, y = stats.pearsonr(a[:,0],a[:,2])
return x, y
print(lengths())
解决方案
这看起来像是您的数据的问题。将您的代码与来自vega-datasets的另一个 Iris 数据帧一起使用,我在计算相关性时没有问题:
import pandas as pd
from scipy import stats
import numpy as np
import vega_datasets as vd
a = vd.data.iris().drop('species', axis=1).values
def lengths():
x, y = stats.pearsonr(a[:,0],a[:,2])
return x, y
print(lengths())
返回
(0.8717537758865832, 1.0386674194497525e-47)