【问题标题】:np.corrcoef behavior with pandas dataframes熊猫数据框的 np.corrcoef 行为
【发布时间】:2017-06-02 16:26:22
【问题描述】:

我观察到以下情况,使用我为计算每组的一系列总和而构建的一些脚本:

In [291]: sums_per_group2
Out[291]: 
        test_group  control_group
one    4551.658544         4449.3
three  3770.712771         3430.5
two    9328.171538         8673.9

In [292]: sums_per_group2.shape
Out[292]: (3, 2)

In [293]: np.corrcoef(sums_per_group2)
Out[293]: 
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]]) 

In [294]: np.corrcoef(sums_per_group2.values)
Out[294]: 
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])

In [295]: sums_per_group2.values.shape  
Out[295]: (3, 2)

In [296]:   np.corrcoef(sums_per_group2.iloc[:,0],sums_per_group2.iloc[:,1])
Out[296]: 
array([[ 1.        ,  0.99853641],
       [ 0.99853641,  1.        ]])  

In [296]:   sums_per_group2.iloc[:,0].shape
Out[296]: (3,)

In [297]:   sums_per_group2.iloc[:,1].shape
Out[297]: (3,)

如您所见,np.corrcoef() 的任何输入之间的形状都是严格精确的。

有人可以帮我理解一下吗?

【问题讨论】:

    标签: python pandas numpy series


    【解决方案1】:

    如果你想将sum_per_group2变量作为二维数组传递,你需要转置它:

    np.corrcoef(sum_per_group2.T)
    # array([[ 1.        ,  0.99853641],
    #        [ 0.99853641,  1.        ]])
    

    这是关于x 参数的docs

    x : array_like 包含多个变量和观察值的一维或二维数组。 x 的每一行代表一个变量,每一列代表一个变量 观察所有这些变量。另请参阅下面的rowvar

    当你传入二维数组时,确保列是观察值,行是变量或特征;相关性是在行之间计算的。或设置rowvar=0:

    np.corrcoef(sum_per_group2, rowvar=0)
    #array([[ 1.        ,  0.99853641],
    #       [ 0.99853641,  1.        ]])
    

    如果您不转置二维数组,该方法会将行解释为向量,因此在前几种情况下,它会计算行的所有组合的相关系数,因为每行都是长度为 2 的向量,您会得到全部 1 作为系数,当您尝试用两点拟合一条线时会发生这种情况(总是完美拟合)。

    【讨论】:

    • 感谢您对函数工作原理的澄清,我错过了作为向量的行。因此,现在这是有道理的,我想知道为什么这个,如果有错误,将能够系统地产生一个 1 相关因子。但我并没有考虑我的形状。现在我应该尝试更改它以更好地测试功能行为。
    猜你喜欢
    • 2014-10-03
    • 2018-02-28
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多