Vous pouvez voir scipy.stats
:
from pydoc import help
from scipy.stats.stats import pearsonr
help(pearsonr)
>>>
Help on function pearsonr in module scipy.stats.stats:
pearsonr(x, y)
Calculates a Pearson correlation coefficient and the p-value for testing
non-correlation.
The Pearson correlation coefficient measures the linear relationship
between two datasets. Strictly speaking, Pearson's correlation requires
that each dataset be normally distributed. Like other correlation
coefficients, this one varies between -1 and +1 with 0 implying no
correlation. Correlations of -1 or +1 imply an exact linear
relationship. Positive correlations imply that as x increases, so does
y. Negative correlations imply that as x increases, y decreases.
The p-value roughly indicates the probability of an uncorrelated system
producing datasets that have a Pearson correlation at least as extreme
as the one computed from these datasets. The p-values are not entirely
reliable but are probably reasonable for datasets larger than 500 or so.
Parameters
----------
x : 1D array
y : 1D array the same length as x
Returns
-------
(Pearson's correlation coefficient,
2-tailed p-value)
References
----------
http://www.statsoft.com/textbook/glosp.html#Pearson%20Correlation
La corrélation de Pearson peut être calculée avec numpy
corrcoef
.la source
Une alternative peut être une fonction scipy native de linregress qui calcule:
Et voici un exemple:
vous renverra:
la source
lineregress(two_row_df)
Si vous n'avez pas envie d'installer scipy, j'ai utilisé ce hack rapide, légèrement modifié de Programming Collective Intelligence :
(Modifié pour l'exactitude.)
la source
TypeError: unsupported operand type(s) for -: 'itertools.imap' and 'float'
atnum = psum - (sum_x * sum_y/n)
Le code suivant est une interprétation directe de la définition :
Tester:
Retour
Cela est d'accord avec Excel, cette calculatrice , SciPy (également NumPy ), qui renvoient respectivement 0,981980506 et 0,9819805060619657 et 0,98198050606196574.
R :
ÉDITER : correction d'un bug signalé par un commentateur.
la source
sum(x) / len(x)
vous divisez les pouces, pas les flotteurs. Doncsum([1,5,7]) / len([1,5,7]) = 13 / 3 = 4
, selon la division entière (alors que vous voulez13. / 3. = 4.33...
). Pour le corriger, réécrivez cette ligne sous la formefloat(sum(x)) / float(len(x))
(un flottant suffit, car Python la convertit automatiquement).Vous pouvez aussi le faire avec
pandas.DataFrame.corr
:Cela donne
la source
Plutôt que de compter sur numpy / scipy, je pense que ma réponse devrait être la plus simple à coder et à comprendre les étapes de calcul du coefficient de corrélation de Pearson (PCC).
L' importance du PCC est essentiellement de vous montrer à quel point les deux variables / listes sont fortement corrélées . Il est important de noter que la valeur PCC varie de -1 à 1 . Une valeur comprise entre 0 et 1 indique une corrélation positive. Valeur de 0 = variation la plus élevée (pas de corrélation du tout). Une valeur comprise entre -1 et 0 indique une corrélation négative.
la source
sum
fonction intégrée .Calcul du coefficient de Pearson à l'aide de pandas en python: je suggère d'essayer cette approche car vos données contiennent des listes. Il sera facile d'interagir avec vos données et de les manipuler depuis la console puisque vous pouvez visualiser votre structure de données et la mettre à jour comme vous le souhaitez. Vous pouvez également exporter l'ensemble de données et l'enregistrer et ajouter de nouvelles données hors de la console python pour une analyse ultérieure. Ce code est plus simple et contient moins de lignes de code. Je suppose que vous avez besoin de quelques lignes de code rapides pour filtrer vos données pour une analyse plus approfondie
Exemple:
Cependant, vous n'avez pas publié vos données pour que je puisse voir la taille de l'ensemble de données ou les transformations qui pourraient être nécessaires avant l'analyse.
la source
Hmm, beaucoup de ces réponses ont un code long et difficile à lire ...
Je suggère d'utiliser numpy avec ses fonctionnalités astucieuses lorsque vous travaillez avec des tableaux:
la source
Il s'agit d'une implémentation de la fonction de corrélation de Pearson utilisant numpy:
la source
Voici une variante de la réponse de mkh qui s'exécute beaucoup plus rapidement qu'elle et scipy.stats.pearsonr, en utilisant numba.
la source
Voici une implémentation pour la corrélation de Pearson basée sur un vecteur clairsemé. Les vecteurs sont ici exprimés sous la forme d'une liste de tuples exprimée en (indice, valeur). Les deux vecteurs clairsemés peuvent être de longueur différente mais sur toute la taille du vecteur devra être la même. Ceci est utile pour les applications d'exploration de texte où la taille du vecteur est extrêmement grande car la plupart des fonctionnalités sont des sacs de mots et donc les calculs sont généralement effectués à l'aide de vecteurs clairsemés.
Tests unitaires:
la source
J'ai une solution très simple et facile à comprendre pour cela. Pour deux tableaux de longueur égale, le coefficient de Pearson peut être facilement calculé comme suit:
la source
Vous vous demandez peut-être comment interpréter votre probabilité dans le contexte de la recherche d'une corrélation dans une direction particulière (corrélation négative ou positive). Voici une fonction que j'ai écrite pour vous aider. Ça pourrait même être vrai!
Il est basé sur les informations que j'ai glanées sur http://www.vassarstats.net/rsig.html et http://en.wikipedia.org/wiki/Student%27s_t_distribution , grâce à d'autres réponses publiées ici.
la source
Vous pouvez consulter cet article. Il s'agit d'un exemple bien documenté pour calculer la corrélation basée sur les données historiques des paires de devises forex à partir de plusieurs fichiers à l'aide de la bibliothèque pandas (pour Python), puis générer un tracé de carte thermique à l'aide de la bibliothèque seaborn.
http://www.tradinggeeks.net/2015/08/calculating-correlation-in-python/
la source
la source