Как создать корреляционную матрицу в Python
Чем дальше коэффициент корреляции от нуля, тем сильнее связь между двумя переменными.
Но в некоторых случаях мы хотим понять корреляцию между более чем одной парой переменных. В этих случаях мы можем создать матрица корреляции, представляющая собой квадратную таблицу, которая показывает коэффициенты корреляции между несколькими попарными комбинациями переменных.
В этом руководстве объясняется, как создать и интерпретировать корреляционную матрицу в Python.
Как создать матрицу корреляции в Python
Выполните следующие шаги, чтобы создать матрицу корреляции в Python.
Шаг 1. Создайте набор данных
import pandas as pd data = df = pd.DataFrame(data, columns=['assists','rebounds','points']) df # assist rebounds points #0 4 12 22 #1 5 14 24 #2 5 13 26 #3 6 7 26 #4 7 8 29 #5 8 8 32 #6 8 9 20 #7 10 13 14
Шаг 2. Создайте матрицу корреляции
#создать корреляционную матрицу df.corr() assists rebounds points assists 1.000000 -0.244861 -0.329573 rebounds -0.244861 1.000000 -0.522092 points -0.329573 -0.522092 1.000000 #создайте ту же матрицу корреляции с коэффициентами, округленными до 3 знаков после запятой df.corr().round(3) assists rebounds points assists 1.000 -0.245 -0.330 rebounds -0.245 1.000 -0.522 points -0.330 -0.522 1.000
Шаг 3. Интерпретация матрицы корреляции
Все коэффициенты корреляции по диагонали таблицы равны 1, потому что каждая переменная совершенна коррелирует сам с собой.
Все остальные коэффициенты корреляции указывают на корреляцию между различными попарными комбинациями переменных. Например:
- Коэффициент корреляции между передачами и подборами равен -0.245
- Коэффициент корреляции между передачами и очками равен -0.330 .
- Коэффициент корреляции между подборами и очками равен -0.522
Шаг 4. Визуализируйте матрицу корреляции (необязательно)
Вы можете визуализировать матрицу корреляции с помощью параметры стиля доступны в pandas:
corr = df.corr() corr.style.background_gradient(cmap='coolwarm')

Вы также можете изменить аргумент cmap , чтобы создать корреляционную матрицу с разными цветами.
corr = df.corr() corr.style.background_gradient(cmap='RdYlGn')

corr = df.corr() corr.style.background_gradient(cmap='bwr')

Примечание: Полный список аргументов cmap см. в документация по matplotlib.
Pandas. Матрица корреляции Спирмена
Здравствуйте!
Помогите пожалуйста посчитать матрицу корреляции Спирмена для dataframe ‘base’
Какие библиотеки нужно импортировать? Какой синтаксис?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Коэффициент корреляции Спирмена
Добрый День! Подсобите с решением задания или поясните как сделать. Благодарю!
Подсчет коэффициента ранговой корреляции Спирмена
нужна программа для подсчета Коефициента ранговой кореляции Спирмена на C#
Определение рангов элементов для корреляции Спирмена
Доброго времени суток, необходимо реализовать собственную функцию ранжирования. Принцип вычисления.
5161 / 2636 / 545
Регистрация: 07.11.2019
Сообщений: 4,351
575 / 407 / 68
Регистрация: 09.01.2018
Сообщений: 1,344
Сообщение от u235 
Это оно. Другой вопрос сумеет ли ТС воспользоваться вашей прямой наводкой и применить этот метод к своему датафрейму.
Судя по стилю вопроса — не очень уверен.
Регистрация: 03.02.2016
Сообщений: 17
Вы абсолютно правильно не уверены — не смогу. Почитал, поизучал, мало чего понял
575 / 407 / 68
Регистрация: 09.01.2018
Сообщений: 1,344
Сообщение от VanDerAllen 
Вы абсолютно правильно не уверены — не смогу. Почитал, поизучал, мало чего понял
Печально. Вердикт — учить Python начиная с начала, а не задом наперед.
P.S. Кстати, по приведенной ссылке есть примеры. Вот прямо в стиле «бери, подставляй свои данные и получай ответ». Если и их не поняли, то чем же мы можем вам помочь?
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Выборочный коэффициент ранговой корреляции Спирмена и Кендалла
Подскажите, пожалуйста, основные формулы выборочного коэффициента ранговой корреляции Спирмена и.
Вычислить выборочный коэффициент ранговой корреляции Спирмена и Кендалла
Психологи двоих фирм оценили влияние двадцати факторов на производительность работы программистов и.
Выборочные коэффициент ранговой корреляции методом Спирмена и Кендала
Тема: Выборочные коэффициент ранговой корреляции методом Спирмена и Кендала. Необходимо написать.
Коэффициент корреляции, матрица корреляции
помогите, пожалуйста, вычислить коэфф корреляции и построить матрицу
Матрица парных коэффициентов корреляции
Здравствуйте. Помогите, пожалуйста, с задачей: Даны выборки из генеральных совокупностей для двух.
Почему заданная матрица корреляции имеет отрицательные значения?
вот в чем дело: n=6 — размерность матрицы N=1000 — задаем число наблюдений z=randn(n,N) — массив.
Статистка в Spark: корреляция

В рамках анализа данных и отбора признаков нередко вычисляется корреляция между признаками. Сегодня мы разберем, что такое корреляция, какие методы вычисления существуют, как найти коэффициенты Пирсона и Спирмена, а также как построить матрицу корреляция в Spark.
Что такое корреляция
Корреляция — эта статистическая взаимосвязь двух случайных переменных. С ростом или падением значений одной переменной изменяются значения и другой перемнной. Например, с увеличением роста человека увеличивается его масса. В этом утверждении наблюдается связь между ростом и массой человека. Для подсчета этой связи и используется корреляция. А в численном виде она выражается через коэффициент корреляции. Но есть несколько способов расчета коэффициента корреляции, например, с помощью методов Пирсона (Pearson) и Спирмана (Spearman).
Коэффициент корреляции Пирсона считается как отношение ковариации переменных к произведению их отклонений. Ковариация – мера совместной изменчивости двух случайных величин. В отличие от корреляции не показывает насколько переменные объясняет друг друга, но указывает только на тренд, а также не имеет предельных значений. Ковариация равная 100 не значит, что это набор данных лучше, чем в в наборе данных с ковариацией 10 (мы можешь лишь сказать только то, что наблюдается положительный тренд в обоих случаях). Поэтому вместо ковариации и используется корреляция, однако она может применяться в методе главных компонент, о котором говорили тут.
На языке Python коэффициент корреляция Пирсона выражается очень просто:
def cov(x, y): # Ковариация N = len(x) - 1 dx = x - x.mean() dy = y - y.mean() return sum(dx * dy) / N def std(x): # Стандартное отклонение N = len(x) - 1 ddx = (x - x.mean())**2 return np.sqrt(sum(ddx) / N) corr = cov(X, Y) / (std(X) * std(Y))
Коэффициент корреляции Спирмана считается как отношение ковариации рангов переменных к произведению их отклонений. Для подсчета ранга переменной применяется следующая процедура: минимальному значению приравнивается ранг 1, следующему после него 2 и так до максимального значения. В Python, пользуясь функциями выше, коэффициент корреляции Спирмана может выражаться так:
from scipy.stats import rankdata def rank(x): # Исходный массив [4, 5, 0, 3] # Его ранг: [3, 4, 1, 2] return rankdata(x) ran_a = rank(a) ran_b = rank(b) cov(ran_a, rank_b) / (std(rank_a) * std(rank_b))
В отличие от корреляции Пирсона, корреляция Спирмена не предполагает, что оба набора данных нормально распределены. В Википедии приведены рисунки, которые показывают различия между коэффициентами при одном наборе данных.
На основе значений коэффициента корреляции можно рассчитать насколько зависимы друг от друга переменные. Его значение находится в отрезке [-1, 1]. Если коэффициент корреляции близится к 0, то зависимость между переменными также стремится к нулю. Следовательно, изменение одной переменной не объясняет изменение второй.
Значение стремящееся к 1 показывает, что наблюдается положительный тренд, переменные объясняют друг друга. На графике это бы выглядело как в одну линию строятся точки.
Значение стремящееся к -1 показывает, что наблюдается отрицательный тренд, переменные объясняют друг друга. Но это уже склон вниз.

Исходя из значения коэффициента корреляции, можно сделать вывод о пригодности использования алгоритма машинного обучения — линейной регрессии. Ведь если он будет находиться около 1 или -1, то и линейную регрессию можно построить.
Матрица корреляции в Spark
Как уже сказано, подсчет корреляции производится для двух переменных. Поэтому для датасетов с более чем двумя признаками строится матрица корреляции — это матрица, показывающая значение коэффициентов корреляции для всех возможных пар признаков. Вот и в Spark матрицу корреляции можно рассчитать. Для этого используется класс Correlation из модуля ml.stat .
Допустим у нас имеется датасет в виде датафрейма Spark, ниже показан код для инициализации. Обратите внимание, что данные должны быть представлены в векторном виде, о том, как их преобразовать в векторы говорим тут
from pyspark.ml.linalg import Vectors from pyspark.ml.stat import Correlation data = [ (Vectors.dense([2.0, 0.0, 3.0, 4.0, 5.0]),), (Vectors.dense([4.0, 0.0, 0.0, 6.0, 7.0]),), (Vectors.dense([8.0, 1.0, 4.0, 9.0, 0.0]),), (Vectors.dense([4.0, 5.0, 0.0, 3.0, 5.0]),), (Vectors.dense([6.0, 7.0, 0.0, 8.0, 4.5]),), ] df = spark.createDataFrame(data, ["features"])
>>> df.show(truncate=False) +---------------------+ |features | +---------------------+ |[2.0,0.0,3.0,4.0,5.0]| |[4.0,0.0,0.0,6.0,7.0]| |[8.0,1.0,4.0,9.0,0.0]| |[4.0,5.0,0.0,3.0,5.0]| |[6.0,7.0,0.0,8.0,4.5]| +---------------------+
Способ вычисления корреляции между парами признаков задается параметром method . В него можно передать значение pearson или spearman (по умолчанию стоит pearson ). Тогда матрица корреляция, где коэффициенты найдены по методу Пирсона, в Spark выглядит так:
r1 = Correlation.corr(df, "features").head() print("Pearson correlation matrix:\n" + str(r1[0]))
Pearson correlation matrix: DenseMatrix([[ 1. , 0.259, 0.247, 0.860, -0.770], [ 0.259, 1. , -0.567, 0.061, 0.018], [ 0.247, -0.567, 1. , 0.301, -0.748], [ 0.860, 0.061, 0.301, 1. , -0.606], [-0.770, 0.018, -0.748, -0.606, 1. ]])
А вот матрица корреляции с коэффициентами, найденным по методу Спирмана, в Spark уже принимает немного другие значения:
r2 = Correlation.corr(df, "features", "spearman").head() print("Spearman correlation matrix:\n" + str(r2[0]))
Spearman correlation matrix: densematrix([[ 1. , 0.552, 0.229, 0.820, -0.763], [ 0.552, 1. , -0.344, 0.153, -0.552], [ 0.229, -0.344, 1. , 0.447, -0.573], [ 0.820, 0.153, 0.447, 1. , -0.666], [-0.763, -0.552, -0.573, -0.666, 1. ]])
Итак, исходя из значений коэффициента и Пирсона (0.86), и Спирмена (0.82), можно сделать вывод, что между 1-м и 3-м признаками наблюдается положительный тренд, около которого можно построить линейную регрессию. Также высокие значение коэффициентов наблюдаются у 1-го и 4-го признаков, но здесь уже отрицательный тренд (значения -0.770 и -0.763).
Матрица корреляция поможет вам для анализа зависимостей между признаками. А о том, как интерпретировать результаты корреляции и на их основе строить модели машинного обучения в Spark вы узнаете на специализированном курсе «Анализ данных с Apache Spark» в лицензированном учебном центре обучения и повышения квалификации разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве.