Je suis à la recherche d’une fonction qui prend comme entrées deux listes et retourne la corrélation de Pearsonet l’importance de la corrélation. Je suis en utilisant Python.
Merci beaucoup.
Ariel
Je suis à la recherche d’une fonction qui prend comme entrées deux listes et retourne la corrélation de Pearsonet l’importance de la corrélation. Je suis en utilisant Python.
Merci beaucoup.
Ariel
Vous pouvez jeter un oeil à scipy : http://docs.scipy.org/doc/scipy/reference/stats.html
Si vous ne vous sentez comme l’installation scipy, j’ai utilisé ce hack rapide, légèrement modifié de l’Intelligence Collective de programmation:
(Sous la direction d’exactitude).
Le code suivant est une simple interprétation de la définition:
import math
def average(x):
assert len(x) > 0
return float(sum(x)) / len(x)
def pearson_def(x, y):
assert len(x) == len(y)
n = len(x)
assert n > 0
avg_x = average(x)
avg_y = average(y)
diffprod = 0
xdiff2 = 0
ydiff2 = 0
for idx in range(n):
xdiff = x[idx] - avg_x
ydiff = y[idx] - avg_y
diffprod += xdiff * ydiff
xdiff2 += xdiff * xdiff
ydiff2 += ydiff * ydiff
return diffprod / math.sqrt(xdiff2 * ydiff2)
Test:
print pearson_def([1,2,3], [1,5,7])
retourne
0.981980506062
Ceci est en accord avec Excel, ce calculateur, SciPy (également NumPy), qui renvoient 0.981980506 et 0.9819805060619657, et 0.98198050606196574, respectivement.
R:
> cor( c(1,2,3), c(1,5,7))
[1] 0.9819805
EDIT: correction d'un bug signalé par un intervenant.
Plutôt que de compter sur numpy/scipy, je pense que ma réponse doit être la plus simple à coder et à comprendre les étapes dans le calcul du Coefficient de Corrélation de Pearson (PCC) .
import math
# calculates the mean
def mean(x)
sum = 0.0
for i in x:
sum += i
return sum / len(x)
# calculates the sample standard deviation
def sampleStandardDeviation(x):
sumv = 0.0
for i in x:
sumv += (i - mean(x))**2
return math.sqrt(sumv/(len(x)-1))
# calculates the PCC using both the 2 functions above
def pearson(x,y):
scorex = []
scorey = []
for i in x:
scorex.append((i - mean(x))/sampleStandardDeviation(x))
for j in y:
scorey.append((j - mean(y))/sampleStandardDeviation(y))
# multiplies both lists together into 1 list (hence zip) and sums the whole list
return (sum([i*j for i,j in zip(scorex,scorey)]))/(len(x)-1)
L' importance de la PCC est fondamentalement pour vous montrer comment fortement corrélée les deux variables/les listes sont. Il est important de noter que le PCC valeur varie de -1 à 1. Une valeur entre 0 à 1 indique une corrélation positive. Valeur 0 = variation la plus élevée (pas de corrélation que ce soit). Une valeur entre -1 à 0 indique une corrélation négative.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.