Numpy/Pandas 关联2个不同长度的数组
Numpy/Pandas correlate 2 arrays of different length
我正在尝试计算两个长度不同的数据集的相关系数。以下代码仅适用于等长数组。
import numpy as np
from scipy.stats.stats import pearsonr
a = [0, 0.4, 0.2, 0.4, 0.2, 0.4, 0.2, 0.5]
b = [25, 40, 62, 58, 53, 54]
print pearsonr(a, b)
在我的例子中,b
矢量长度可以在 50 - 100 个数据点之间变化。而我要匹配的功能是标准的。 a
的附加图像。是否有任何其他首选模块来匹配此类模式?
你基本上无法计算不同长度向量之间的相关系数,因为你需要配对数据来计算。您也许可以对最短向量进行插值以使它们的长度相同,但这可能会显着改变结果,具体取决于插值方法。
晚会有点晚了,但由于这是 Google 最好的结果,我将给出一个可能的答案来解决这个问题:
import pandas as pd
from scipy.stats import pearsonr
import numpy as np
a = [ 0, 0.4, 0.2, 0.4, 0.2, 0.45, 0.2, 0.52, 0.52, 0.4, 0.21, 0.2, 0.4, 0.51]
b = [ 0.4, 0.2, 0.5]
df = pd.DataFrame(dict(x=a))
CORR_VALS = np.array(b)
def get_correlation(vals):
return pearsonr(vals, CORR_VALS)[0]
df['correlation'] = df.rolling(window=len(CORR_VALS)).apply(get_correlation)
说明
pandas
DataFrames 有 rolling()
方法,它以数组长度 length (window
) 作为参数。从 rolling()
返回的对象具有来自 scipy.stats.
的 apply()
method that takes function as an argument. You can calculate for example the Pearson Correlation coefficient using pearsonr
示例输出
In [2]: df['correlation'].values
Out[2]:
array([ nan, nan, -0.65465367, 0.94491118, -0.94491118,
0.98974332, -0.94491118, 0.9923356 , -0.18898224, -0.75592895,
-0.44673396, 0.1452278 , 0.78423011, 0.16661846])
用问题中的示例数据
In [1]: df
Out[1]:
x correlation
0 0.0 NaN
1 0.4 NaN
2 0.2 NaN
3 0.4 NaN
4 0.2 NaN
5 0.4 0.527932
6 0.2 -0.159167
7 0.5 0.189482
我正在尝试计算两个长度不同的数据集的相关系数。以下代码仅适用于等长数组。
import numpy as np
from scipy.stats.stats import pearsonr
a = [0, 0.4, 0.2, 0.4, 0.2, 0.4, 0.2, 0.5]
b = [25, 40, 62, 58, 53, 54]
print pearsonr(a, b)
在我的例子中,b
矢量长度可以在 50 - 100 个数据点之间变化。而我要匹配的功能是标准的。 a
的附加图像。是否有任何其他首选模块来匹配此类模式?
你基本上无法计算不同长度向量之间的相关系数,因为你需要配对数据来计算。您也许可以对最短向量进行插值以使它们的长度相同,但这可能会显着改变结果,具体取决于插值方法。
晚会有点晚了,但由于这是 Google 最好的结果,我将给出一个可能的答案来解决这个问题:
import pandas as pd
from scipy.stats import pearsonr
import numpy as np
a = [ 0, 0.4, 0.2, 0.4, 0.2, 0.45, 0.2, 0.52, 0.52, 0.4, 0.21, 0.2, 0.4, 0.51]
b = [ 0.4, 0.2, 0.5]
df = pd.DataFrame(dict(x=a))
CORR_VALS = np.array(b)
def get_correlation(vals):
return pearsonr(vals, CORR_VALS)[0]
df['correlation'] = df.rolling(window=len(CORR_VALS)).apply(get_correlation)
说明
pandas
DataFrames 有 rolling()
方法,它以数组长度 length (window
) 作为参数。从 rolling()
返回的对象具有来自 scipy.stats.
apply()
method that takes function as an argument. You can calculate for example the Pearson Correlation coefficient using pearsonr
示例输出
In [2]: df['correlation'].values
Out[2]:
array([ nan, nan, -0.65465367, 0.94491118, -0.94491118,
0.98974332, -0.94491118, 0.9923356 , -0.18898224, -0.75592895,
-0.44673396, 0.1452278 , 0.78423011, 0.16661846])
用问题中的示例数据
In [1]: df
Out[1]:
x correlation
0 0.0 NaN
1 0.4 NaN
2 0.2 NaN
3 0.4 NaN
4 0.2 NaN
5 0.4 0.527932
6 0.2 -0.159167
7 0.5 0.189482