[英]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.