标签: pearson-correlation

与熊猫的加权相关系数

有没有办法用熊猫计算加权相关系数?我看到R有这样的方法.另外,我想获得相关性的p值.我没有在R.链接到维基百科中找到有关加权相关性的解释:https://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient#Weighted_correlation_coefficient

python correlation pandas pearson-correlation

9
推荐指数
2
解决办法
5334
查看次数

Pearson相关和nan值

我有两个包含数百列的CSV_files,我想为两个CSV_files的每个相同列计算Pearson相关系数和p值.问题是当一列中缺少数据"NaN"时,它会给我一个错误.当".dropna"从列中删除nan值时,有时X和Y的形状不相等(基于移除的nan值)并且我收到此错误:

"ValueError:操作数无法与形状一起广播(1020,)(1016,)"

问题:如果在"nan"中的一个csv中的第8行,是否有任何方法可以从其他csv中删除相同的行,并根据具有两个csv文件值的行对每个列进行分析?

import pandas as pd
import scipy
import csv
import numpy as np
from scipy import stats


df = pd.read_csv ("D:/Insitu-Daily.csv",header = None)
dg = pd.read_csv ("D:/Model-Daily.csv",header = None)

pearson_corr_set = []
pearson_p_set = []


for i in range(1,df.shape[1]):
    X= df[i].dropna(axis=0, how='any')
    Y= dg[i].dropna(axis=0, how='any')

    [pearson_corr, pearson_p] = scipy.stats.stats.pearsonr(X, Y)
    pearson_corr_set = np.append(pearson_corr_set,pearson_corr)
    pearson_p_set = np.append(pearson_p_set,pearson_p)

with open('D:/Results.csv','wb') as file:
    str1 = ",".join(str(i) for i in np.asarray(pearson_corr_set))
    file.write(str1)
    file.write('\n')    
    str1 = ",".join(str(i) for i in np.asarray(pearson_p_set))
    file.write(str1)
    file.write('\n') 
Run Code Online (Sandbox Code Playgroud)

python arrays numpy nan pearson-correlation

8
推荐指数
1
解决办法
7050
查看次数

使用熊猫滚动相关时如何处理不一致的结果?

让我先说一下,为了重现这个问题,我需要一个大数据,这是问题的一部分,我无法预测什么时候会出现这种特殊性。无论如何,数据太大(~13k 行,2 列)无法粘贴到问题中,我在帖子末尾添加了一个 pastebin 链接


在过去的几天里,我遇到了一个奇怪的问题pandas.core.window.rolling.Rolling.corr。我有一个数据集,我试图在其中计算滚动相关性。这就是问题:

在计算window_size=100两列 ( aand b)之间的滚动 ( ) 相关性时:一些索引(一个这样的索引是12981)给出接近的0值(顺序1e-10),但理想情况下它应该返回nanor inf,(因为一列中的所有值都是常数)。但是,如果我只是计算与该索引有关的独立相关性(包括所述索引的最后 100 行数据),或者对较少数量的行(例如 300 或 1000 而不是 13k)执行滚动计算,我得到正确的结果( naninf。)

期待:

>>> df = pd.read_csv('sample_corr_data.csv') # link at the end,  ## columns = ['a', 'b']
>>> df.a.tail(100).value_counts()

 0.000000    86
-0.000029     3
 0.000029     3
-0.000029     2
 0.000029     2
-0.000029     2
 0.000029     2
Name: a, dtype: int64 …
Run Code Online (Sandbox Code Playgroud)

python numpy pandas rolling-computation pearson-correlation

8
推荐指数
1
解决办法
356
查看次数

对于完全相关的集合,Pearson相关性失败

考虑以下用户A和B对胶片评级集的Pearson相关系数的例子:

A = [2,4,4,4,4]
B = [5,4,4,4,4]
pearson(A,B) = -1

A = [5,5,5,5,5]
B = [5,5,5,5,5]
pearson(A,B) = NaN
Run Code Online (Sandbox Code Playgroud)

Pearson相关似乎被广泛用于计算协同过滤中两组之间的相似性.然而,上面的集合显示出高(甚至完美)相似性,但是输出表明集合是负相关的(或者由于div为零而遇到错误).

我最初认为这是我实施中的一个问题,但我已经对一些在线计算器进行了验证.

如果输出正确,为什么Pearson相关性被认为是这个应用的一个好选择?

recommendation-engine collaborative-filtering pearson-correlation

7
推荐指数
1
解决办法
771
查看次数

计算成对距离矩阵:是Python中可用的可扩展,大数据就绪方法吗?

我有一个包含项目特征值的CSV文件:每一行都是三元组(id_item,id_feature,value),表示特定项目的特定功能的值.数据非常稀少.

我需要计算两个项目距离矩阵,一个使用Pearson相关作为度量,另一个使用Jaccard索引.

目前我实现了内存解决方案,我做了类似这样的事情:

import numpy as np
from numpy import genfromtxt
from scipy.sparse import coo_matrix
from scipy.sparse import csr_matrix
from scipy.stats.stats import pearsonr
import sklearn.metrics.pairwise
import scipy.spatial.distance as ds
import scipy.sparse as sp

# read the data
my_data = genfromtxt('file.csv', delimiter=',')
i,j,value=my_data.T

# create a sparse matrix
m=coo_matrix( (value,(i,j)) )

# convert in a numpy array
m = np.array(m.todense())

# create the distance matrix using pdist
d = ds.pdist(m.T, 'correlation')

d= ds.squareform(d)
Run Code Online (Sandbox Code Playgroud)

它工作得很好而且速度非常快但不能水平扩展.我希望能够通过向集群添加节点来提高性能,并且即使在大数据场景中,一切都可以工作,再次只是添加节点.我不在乎这个过程需要几个小时; 距离需要每天更新一次.

什么是最好的方法?

1)Sklearn pairwise_distances有一个n_jobs参数,允许利用并行计算(http://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.pairwise_distances.html)但据我所知支持同一台机器上的多个核心,而不支持群集计算.这是一个相关的问题在HPC上使用scikit-learn函数的并行选项的简单方法, …

python hadoop bigdata scikit-learn pearson-correlation

6
推荐指数
1
解决办法
754
查看次数

高效的列式相关系数计算

原始问题

我将大小为n的行P与大小为n×m的矩阵O的每列相关联.我精心设计了以下代码:

import numpy as np

def ColumnWiseCorrcoef(O, P):
    n = P.size
    DO = O - (np.sum(O, 0) / np.double(n))
    DP = P - (np.sum(P) / np.double(n))
    return np.dot(DP, DO) / np.sqrt(np.sum(DO ** 2, 0) * np.sum(DP ** 2))
Run Code Online (Sandbox Code Playgroud)

它比天真的方法更有效:

def ColumnWiseCorrcoefNaive(O, P):
    return np.corrcoef(P,O.T)[0,1:O[0].size+1]
Run Code Online (Sandbox Code Playgroud)

以下是我在Intel核心上使用numpy-1.7.1-MKL的时间:

O = np.reshape(np.random.rand(100000), (1000,100))
P = np.random.rand(1000)

%timeit -n 1000 A = ColumnWiseCorrcoef(O, P)
1000 loops, best of 3: 787 us per loop
%timeit -n 1000 B = ColumnWiseCorrcoefNaive(O, P)
1000 loops, best of …
Run Code Online (Sandbox Code Playgroud)

performance numpy correlation pearson-correlation

5
推荐指数
1
解决办法
1205
查看次数

找到最相关的变量对

假设我有一个由 20 列(变量)组成的数据框,并且它们都是数字。我总是可以使用corR 中的函数来获取矩阵形式的相关系数或实际可视化相关矩阵(相关系数也被标记)。假设我只想根据相关系数值对对进行排序,如何在 R 中执行此操作?

sorting r dataframe pearson-correlation

5
推荐指数
2
解决办法
6645
查看次数

Pearsonr:类型错误:没有为 ufunc add 找到与指定签名和转换匹配的循环

我有一个名为“df”的时间序列 Pandas 数据框。它有一根柱子和以下形状:(2000, 1)。下面的数据框的头部显示了其结构:

            Weight
Date    
2004-06-01  1.9219
2004-06-02  1.8438
2004-06-03  1.8672
2004-06-04  1.7422
2004-06-07  1.8203
Run Code Online (Sandbox Code Playgroud)

目标

我正在尝试使用“for 循环”来计算“权重”变量在不同时间范围或时间间隔内的百分比变化之间的相关性。这样做是为了评估不同时间段内饲养牲畜的影响。

该循环可以在下面找到:

from scipy.stats.stats import pearsonr

# Loop for producing combinations of different timelags and holddays 
# and calculating the pearsonr correlation and p-value of each combination 

for timelags in [1, 5, 10, 25, 60, 120, 250]:
    for holddays in [1, 5, 10, 25, 60, 120, 250]:
        weight_change_lagged = df.pct_change(periods=timelags)
        weight_change_future = df.shift(-holddays).pct_change(periods=holddays)

        if (timelags >= holddays):
            indepSet=range(0, weight_change_lagged.shape[0], holddays)
        else:
            indepSet=range(0, …
Run Code Online (Sandbox Code Playgroud)

python for-loop scipy pearson-correlation

5
推荐指数
1
解决办法
1万
查看次数

如何计算 lambda 以对 500 列的整个数据帧使用 scipy.special.boxcox1p 函数?

我有一个数据框,每行包含大约 500 个产品类别的总销售额。所以我的数据框中有 500 列。我试图找到与另一个数据框列相关性最高的类别。所以我将使用皮尔逊相关法。但所有类别的总销售额都是高度倾斜的数据,所有类别列的倾斜程度在 10 到 40 之间。所以我想使用 boxcox 转换来记录转换此销售数据。由于我的销售数据也有 0 值,因此我想使用 boxcox1p 函数。有人可以帮助我,如何计算 boxcox1p 函数的 lambda,因为它是该函数的强制参数?另外,这是我的问题陈述找到高度相关类别的正确方法吗?

python logging transformation pandas pearson-correlation

5
推荐指数
1
解决办法
2492
查看次数

如何在 Seaborn 热图上仅注释大于 x 的值

我不仅想在我的seaborn 热图上注释大于0.4 的值。

这是我的代码:

sns.set(font_scale=0.6)

sns.set(font_scale=0.6)
ax= sns.heatmap(corr, mask=mask, cmap=cmap, vmin=-1, vmax=+1, center=0,
            square=True, linewidths=.1, cbar_kws={"shrink": .82},annot=True,
            fmt='.1',annot_kws={"size":7})

ax.set_xticklabels(ax.get_xticklabels(), rotation=60)
Run Code Online (Sandbox Code Playgroud)

这就是我得到的: 在此处输入图像描述

谢谢

python annotations heatmap seaborn pearson-correlation

5
推荐指数
1
解决办法
3050
查看次数