繁体   English   中英

我编写了一个代码来计算两个Pandas系列之间的相关性。你能告诉我我的代码有什么问题吗?

[英]I have written a code to calculate the correlation between two Pandas Series. Can you tell me what is wrong with my code?

以下是代码:

import numpy as np
import pandas as pd

def correlation(x, y):
    std_x = (x - x.mean())/x.std(ddof = 0)
    std_y = (y - y.mean())/y.std(ddof = 0)
    return (std_x * std_y).mean

a = pd.Series([2, 4, 5, 7, 9])
b = pd.Series([12, 10, 9, 7, 3])
ca = correlation(a, b)
print(ca)

它不返回相关值,而是返回一个系列,其键为0 ,1, 2, 3, 4, 5值为-1.747504, -0.340844, -0.043282, -0.259691, -2.531987

请帮我理解这背后的问题。

你需要调用mean()

return (std_x * std_y).mean()

不只 :

return (std_x * std_y).mean:

它返回方法本身。 完整代码:

import numpy as np
import pandas as pd

def correlation(x, y):
    std_x = (x - x.mean())/x.std(ddof = 0)
    std_y = (y - y.mean())/y.std(ddof = 0)
    return (std_x * std_y).mean()

a = pd.Series([2, 4, 5, 7, 9])
b = pd.Series([12, 10, 9, 7, 3])
ca = correlation(a, b)
print(ca)

输出:

-0.984661667628

您还可以使用scipy.stats.stats来计算Pearson相关性 至少,您可以使用它作为快速检查您的算法是否正确。

from scipy.stats.stats import pearsonr   
import pandas as pd

a = pd.Series([2, 4, 5, 7, 9])
b = pd.Series([12, 10, 9, 7, 3])

pearsonr(a, b)[0]  # -0.98466166762781315

值得一提的是,你也可以直接让pandas使用corr来计算两个系列之间的相关性,这也可以让你指定相关的类型:

a = pd.Series([2, 4, 5, 7, 9])
b = pd.Series([12, 10, 9, 7, 3])

a.corr(b)

然后会回来

-0.98466166762781315

您也可以在dataframe上应用corr ,该dataframe计算列之间的所有成对相关性(因为每列与自身完全相关,您在对角线上看到1s ):

pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 8]}).corr()

          a         b
a  1.000000  0.960769
b  0.960769  1.000000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM