Вы можете взглянуть на 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
Корреляция Пирсона может быть рассчитана с помощью числа Нумпи
corrcoef
.источник
Альтернативой может быть встроенная функция scipy из linregress, которая вычисляет:
И вот пример:
вернет вам:
источник
lineregress(two_row_df)
Если вы не хотите устанавливать scipy, я воспользовался этим быстрым взломом, немного измененным из « Программирование Коллективного Разума» :
(Отредактировано для корректности.)
источник
TypeError: unsupported operand type(s) for -: 'itertools.imap' and 'float'
atnum = psum - (sum_x * sum_y/n)
Следующий код является простой интерпретацией определения :
Тест:
возвращается
Это согласуется с Excel, этот калькулятор , SciPy (также NumPy ), который возвращает 0,981980506 и 0,9819805060619657 и 0,98198050606196574 соответственно.
R :
РЕДАКТИРОВАТЬ : Исправлена ошибка, указанная комментатором.
источник
sum(x) / len(x)
вас делят целые, а не плавает. Итакsum([1,5,7]) / len([1,5,7]) = 13 / 3 = 4
, согласно целочисленному делению (тогда как вы хотите13. / 3. = 4.33...
). Чтобы исправить это, перепишите эту строку какfloat(sum(x)) / float(len(x))
(достаточно одного числа с плавающей запятой, поскольку Python конвертирует его автоматически).Вы можете сделать это
pandas.DataFrame.corr
тоже:Это дает
источник
Вместо того, чтобы полагаться на numpy / scipy, я думаю, что мой ответ должен быть самым простым для кодирования и понимания шагов по вычислению коэффициента корреляции Пирсона (PCC).
Значение ОКК в основном , чтобы показать вам , как сильно коррелируют две переменные / списки. Важно отметить, что значение PCC составляет от -1 до 1 . Значение от 0 до 1 обозначает положительную корреляцию. Значение 0 = наибольшее отклонение (без какой-либо корреляции). Значение от -1 до 0 обозначает отрицательную корреляцию.
источник
sum
функция.Расчет коэффициента Пирсона с использованием панд в python: я бы предложил попробовать этот подход, поскольку ваши данные содержат списки. Будет легко взаимодействовать с вашими данными и манипулировать ими из консоли, поскольку вы сможете визуализировать свою структуру данных и обновлять ее по своему желанию. Вы также можете экспортировать набор данных, сохранить его и добавить новые данные из консоли Python для последующего анализа. Этот код проще и содержит меньше строк кода. Я предполагаю, что вам нужно несколько быстрых строк кода для проверки ваших данных для дальнейшего анализа
Пример:
Тем не менее, вы не опубликовали свои данные для меня, чтобы увидеть размер набора данных или преобразования, которые могут потребоваться перед анализом.
источник
Хм, многие из этих ответов имеют длинный и трудный для чтения код ...
Я бы предложил использовать Numpy с его отличными функциями при работе с массивами:
источник
Это реализация корреляционной функции Пирсона с использованием numpy:
источник
Вот вариант ответа mkh, который работает намного быстрее, и scipy.stats.pearsonr, используя numba.
источник
Вот реализация корреляции Пирсона на основе разреженного вектора. Векторы здесь выражены в виде списка кортежей, выраженного как (индекс, значение). Два разреженных вектора могут иметь разную длину, но размер вектора должен быть одинаковым. Это полезно для приложений интеллектуального анализа текста, где размер вектора чрезвычайно велик из-за того, что большинство функций является мешком слов, и, следовательно, вычисления обычно выполняются с использованием разреженных векторов.
Модульные тесты:
источник
У меня есть очень простое и понятное решение для этого. Для двух массивов одинаковой длины коэффициент Пирсона можно легко вычислить следующим образом:
источник
Вы можете задаться вопросом, как интерпретировать свою вероятность в контексте поиска корреляции в определенном направлении (отрицательная или положительная корреляция). Вот функция, которую я написал, чтобы помочь с этим. Это может быть даже правильно!
Он основан на информации, которую я почерпнул из http://www.vassarstats.net/rsig.html и http://en.wikipedia.org/wiki/Student%27s_t_distribution , благодаря другим ответам, размещенным здесь.
источник
Вы можете взглянуть на эту статью. Это хорошо документированный пример расчета корреляции на основе исторических данных валютных пар форекс из нескольких файлов с использованием библиотеки панд (для Python), а затем создания графика тепловой карты с использованием библиотеки Seaborn.
http://www.tradinggeeks.net/2015/08/calculating-correlation-in-python/
источник
источник