Exemples de comment calculer le coefficient de corrélation de Pearson en python:
Créer des données
Créons d'abord quelques données :
import numpy as np
def f(a,b,c,X):
eps = c * np.random.randn(X.shape[0])
return a * X + b + eps
a = 1 # slope
b = 0 # intercept
c = 1.0 # noise
X = np.random.randint(100, size=250)
Y = f(a,b,c,X)
et utilisez matplotlib pour les visualiser :
import matplotlib.pyplot as plt
plt.scatter(X,Y)
plt.xlim(-10,110)
plt.title("How to calculate the Pearson’s Correlation coefficient \n between two datasets in python ?")
plt.xlabel('X')
plt.ylabel('Y')
plt.savefig("Pearson_Correlation_coefficient_01.png", bbox_inches='tight')
plt.show()
Calculer le coefficient de corrélation de Pearson à l'aide de scipy
Pour calculer le coefficient de corrélation de Pearson entre les variables X et Y, une solution consiste à utiliser scipy.stats.pearsonr
from scipy.stats import pearsonr
corr, _ = pearsonr(X, Y)
donne
0.9434925682236153
qui peut être arrondi :
round(corr,2)
donne alors
0.94
Exemples de calcul des coefficients de corrélation de Pearson
Reproduisons maintenant l'exemple de wikipedia:
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import pearsonr
def f(a,b,c,X):
eps = c * np.random.randn(X.shape[0])
return a * X + b + eps
A = [1.0,1.0,1.0,0.0,-1.0,-1.0,-1.0]
B = [0.0,0.0,0.0,0.0,0.0,0.0,0.0]
C = [1.0, 10, 20, 20, 20 ,10, 1.0]
n = 1
for a,b,c in zip(A,B,C):
print(a,b,c)
X = np.random.randint(100, size=250)
Y = f(a,b,c,X)
corr, _ = pearsonr(X, Y)
plt.scatter(X,Y)
plt.xlim(-10,110)
plt.title("""
How to calculate the Pearson’s Correlation coefficient \n
between two datasets in python ? \n corrcoef = {} \n a = {} b = {} c = {}""".format( str(round(corr,2)), a, b, c) )
plt.xlabel('X')
plt.ylabel('Y')
plt.savefig("Pearson_Correlation_coefficient_{}.png".format(n), bbox_inches='tight')
plt.show()
n += 1
donne
Calculer le coefficient de corrélation de Pearson à l'aide de numpy
Une autre solution consiste à utiliser numpy avec numpy.corrcoef:
import numpy as np
np.corrcoef(X,Y)
donne
[[1. 0.94349257]
[0.94349257 1. ]]