Pular para o conteúdo

Como Usar a Correlação em Python?

[

NumPy, SciPy e pandas: Correlação com Python

por Mirko Stojiljković data-science intermediate numpy

explore-dataset/) são rápidos, abrangentes e bem documentados.

Neste tutorial, você aprenderá:

  • O que são os coeficientes de correlação de Pearson, Spearman e Kendall
  • Como usar as funções de correlação do SciPy, NumPy e pandas
  • Como visualizar dados, linhas de regressão e matrizes de correlação com o Matplotlib

Você começará com uma explicação sobre correlação, verá três exemplos introdutórios rápidos e, finalmente, mergulhará nos detalhes da correlação em NumPy, SciPy e pandas.

Bônus gratuito: Clique aqui para acessar um guia de recursos gratuito do NumPy que direciona você para os melhores tutoriais, vídeos e livros para melhorar suas habilidades em NumPy.

Correlação

Cada conjunto de dados com o qual você trabalha usa variáveis ​​e observações. Por exemplo, você pode estar interessado em entender o seguinte:

Nos exemplos acima, a altura, precisão de arremesso, anos de experiência, salário, densidade populacional e produto interno bruto são as características ou variáveis. Os dados relacionados a cada jogador, funcionário e país são as observações.

Quando os dados são representados na forma de tabela, as linhas dessa tabela são geralmente as observações, enquanto as colunas são as características ou variáveis. Cada célula da tabela contém um valor correspondente a uma determinada observação para uma determinada característica.

Exemplo: Cálculo de correlação com NumPy

O NumPy é uma biblioteca fundamental para computação científica em Python. Ele fornece uma maneira eficiente de representar e manipular arrays multidimensionais, o que torna a computação de correlações uma tarefa fácil.

Vamos começar com um exemplo simples de cálculo de correlação usando o NumPy:

import numpy as np
# Criar dois arrays de exemplo
x = np.array([1, 2, 3, 4, 5])
y = np.array([5, 4, 3, 2, 1])
# Calcular a correlação
correlation = np.corrcoef(x, y)[0, 1]
print(f"A correlação entre x e y é: {correlation}")

Neste exemplo, criamos dois arrays x e y, e em seguida calculamos a correlação entre eles usando np.corrcoef(). O resultado é armazenado na variável correlation e, em seguida, impresso na tela.

A saída deste exemplo seria:

A correlação entre x e y é: -1.0

Esta correlação de -1.0 indica uma correlação perfeitamente inversa entre x e y. Ou seja, à medida que os valores de x aumentam, os valores de y diminuem de maneira perfeitamente linear.

Exemplo: Cálculo de correlação com SciPy

O SciPy é uma biblioteca de código aberto para matemática científica em Python. Ele contém várias funções úteis para cálculos estatísticos e científicos, incluindo funções de correlação.

Aqui está um exemplo de cálculo de correlação usando o SciPy:

import scipy.stats as stats
# Criar dois arrays de exemplo
x = [1, 2, 3, 4, 5]
y = [5, 4, 3, 2, 1]
# Calcular a correlação
correlation, p_value = stats.pearsonr(x, y)
print(f"A correlação entre x e y é: {correlation}")
print(f"O valor p é: {p_value}")

Neste exemplo, usamos a função pearsonr() do módulo stats do SciPy para calcular a correlação entre os arrays x e y. O resultado é armazenado nas variáveis correlation e p_value e, em seguida, são impressos na tela.

A saída deste exemplo seria:

A correlação entre x e y é: -1.0
O valor p é: 0.0

Novamente, obtemos uma correlação de -1.0, indicando uma correlação perfeitamente inversa entre x e y. O valor p é de 0.0, o que significa que a correlação é altamente significativa.

Exemplo: Cálculo de correlação com pandas

O pandas é uma biblioteca popular para manipulação e análise de dados em Python. Ele inclui várias funções úteis para cálculos estatísticos, incluindo funções de correlação.

Aqui está um exemplo de cálculo de correlação usando o pandas:

import pandas as pd
# Criar um DataFrame de exemplo
data = {'x': [1, 2, 3, 4, 5], 'y': [5, 4, 3, 2, 1]}
df = pd.DataFrame(data)
# Calcular a correlação
correlation = df['x'].corr(df['y'])
print(f"A correlação entre x e y é: {correlation}")

Neste exemplo, criamos um DataFrame df a partir dos arrays x e y. Em seguida, usamos o método corr() do pandas para calcular a correlação entre as colunas x e y. O resultado é armazenado na variável correlation e, em seguida, impresso na tela.

A saída deste exemplo seria:

A correlação entre x e y é: -1.0

Mais uma vez, obtemos uma correlação de -1.0, indicando uma correlação perfeitamente inversa entre x e y.

Correlação Linear

A correlação linear é uma medida da relação linear entre duas variáveis. Nesta seção, discutiremos o coeficiente de correlação de Pearson, que é uma medida comum de correlação linear.

Coeficiente de Correlação de Pearson

O coeficiente de correlação de Pearson mede a força e a direção da relação linear entre duas variáveis. Tem um valor entre -1 e 1, onde -1 indica uma correlação perfeitamente inversa, 1 indica uma correlação perfeitamente direta e 0 indica nenhuma correlação linear.

A fórmula para calcular o coeficiente de correlação de Pearson é:

correlation = cov(X, Y) / (std(X) * std(Y))

Onde cov(X, Y) é a covariância entre X e Y, e std(X) e std(Y) são os desvios padrão de X e Y, respectivamente.

Vamos ver como calcular o coeficiente de correlação de Pearson usando o NumPy, SciPy e pandas.

Coeficiente de Correlação de Pearson: NumPy e SciPy

Vamos usar o exemplo anterior com os arrays x e y para calcular o coeficiente de correlação de Pearson usando o NumPy e o SciPy:

import numpy as np
import scipy.stats as stats
# Calcular a correlação de Pearson usando NumPy
correlation_np = np.corrcoef(x, y)[0, 1]
# Calcular a correlação de Pearson usando SciPy
correlation_scipy, p_value_scipy = stats.pearsonr(x, y)
print(f"Coeficiente de correlação de Pearson (NumPy): {correlation_np}")
print(f"Coeficiente de correlação de Pearson (SciPy): {correlation_scipy}")

O resultado deste exemplo seria:

Coeficiente de correlação de Pearson (NumPy): -1.0
Coeficiente de correlação de Pearson (SciPy): -1.0

Obtemos o mesmo resultado de -1.0 usando tanto o NumPy quanto o SciPy para calcular o coeficiente de correlação de Pearson.

Coeficiente de Correlação de Pearson: pandas

Agora vamos ver como calcular o coeficiente de correlação de Pearson usando o pandas:

import pandas as pd
# Calcular a correlação de Pearson usando pandas
correlation_pd = df['x'].corr(df['y'])
print(f"Coeficiente de correlação de Pearson (pandas): {correlation_pd}")

A saída deste exemplo seria:

Coeficiente de correlação de Pearson (pandas): -1.0

Mais uma vez, obtemos um resultado de -1.0 usando o pandas para calcular o coeficiente de correlação de Pearson.

Correlação de Classe

A correlação de classe é uma medida da relação monotônica entre duas variáveis. Nesta seção, discutiremos o coeficiente de correlação de Spearman e o coeficiente de correlação de Kendall, que são medidas comuns de correlação de classe.

Coeficiente de Correlação de Spearman

O coeficiente de correlação de Spearman mede a força e a direção da relação monotônica entre duas variáveis. Uma relação monotônica é qualquer relação onde a ordem dos valores em uma variável é preservada na outra variável.

O coeficiente de correlação de Spearman tem um valor entre -1 e 1, onde -1 indica uma relação monotônica inversa perfeita, 1 indica uma relação monotônica direta perfeita e 0 indica nenhuma relação monotônica.

Vamos ver como calcular o coeficiente de correlação de Spearman usando o SciPy e o pandas.

Coeficiente de Correlação de Spearman: SciPy

Vamos usar o exemplo anterior com os arrays x e y para calcular o coeficiente de correlação de Spearman usando o SciPy:

import scipy.stats as stats
# Calcular o coeficiente de correlação de Spearman usando SciPy
correlation_spearman, p_value_spearman = stats.spearmanr(x, y)
print(f"Coeficiente de correlação de Spearman (SciPy): {correlation_spearman}")

O resultado deste exemplo seria:

Coeficiente de correlação de Spearman (SciPy): -1.0

Mais uma vez, obtemos -1.0 como resultado, indicando uma correlação de Spearman inversa perfeita entre x e y.

Coeficiente de Correlação de Spearman: pandas

Vamos ver como calcular o coeficiente de correlação de Spearman usando o pandas:

import pandas as pd
# Calcular o coeficiente de correlação de Spearman usando pandas
correlation_spearman_pd = df['x'].corr(df['y'], method='spearman')
print(f"Coeficiente de correlação de Spearman (pandas): {correlation_spearman_pd}")

A saída deste exemplo seria:

Coeficiente de correlação de Spearman (pandas): -1.0

Mais uma vez, obtemos um resultado de -1.0 usando o pandas para calcular o coeficiente de correlação de Spearman.

Coeficiente de Correlação de Kendall

O coeficiente de correlação de Kendall mede a força e a direção da relação monotônica entre duas variáveis. É uma medida não paramétrica, o que significa que não faz suposições sobre a distribuição dos dados.

O coeficiente de correlação de Kendall tem um valor entre -1 e 1, onde -1 indica uma relação monotônica inversa perfeita, 1 indica uma relação monotônica direta perfeita e 0 indica nenhuma relação monotônica.

Vamos ver como calcular o coeficiente de correlação de Kendall usando o SciPy e o pandas.

Coeficiente de Correlação de Kendall: SciPy

Vamos usar o exemplo anterior com os arrays x e y para calcular o coeficiente de correlação de Kendall usando o SciPy:

import scipy.stats as stats
# Calcular o coeficiente de correlação de Kendall usando SciPy
correlation_kendall, p_value_kendall = stats.kendalltau(x, y)
print(f"Coeficiente de correlação de Kendall (SciPy): {correlation_kendall}")

O resultado deste exemplo seria:

Coeficiente de correlação de Kendall (SciPy): -1.0

Mais uma vez, obtemos -1.0 como resultado, indicando uma correlação de Kendall inversa perfeita entre x e y.

Coeficiente de Correlação de Kendall: pandas

Finalmente, vamos ver como calcular o coeficiente de correlação de Kendall usando o pandas:

import pandas as pd
# Calcular o coeficiente de correlação de Kendall usando pandas
correlation_kendall_pd = df['x'].corr(df['y'], method='kendall')
print(f"Coeficiente de correlação de Kendall (pandas): {correlation_kendall_pd}")

A saída deste exemplo seria:

Coeficiente de correlação de Kendall (pandas): -1.0

Mais uma vez, obtemos um resultado de -1.0 usando o pandas para calcular o coeficiente de correlação de Kendall.

Visualização de Correlação

A visualização de correlação é uma ótima maneira de entender visualmente a relação entre duas variáveis. Nesta seção, discutiremos duas técnicas comuns para visualizar correlações: gráficos X-Y com uma linha de regressão e heatmaps de matrizes de correlação.

Gráficos X-Y com uma linha de regressão

Um gráfico X-Y com uma linha de regressão é uma maneira simples e eficaz de visualizar a relação linear entre duas variáveis. Ele traça os valores de uma variável em relação aos valores correspondentes da outra variável, e uma linha de regressão é ajustada a esses pontos para mostrar a tendência geral.

Aqui está um exemplo de como criar um gráfico X-Y com uma linha de regressão usando o Matplotlib:

import matplotlib.pyplot as plt
# Plotar o gráfico X-Y com uma linha de regressão
plt.scatter(x, y)
plt.plot(x, np.poly1d(np.polyfit(x, y, 1))(x), color='red')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Gráfico X-Y com uma Linha de Regressão')
plt.show()

Neste exemplo, usamos o método scatter() para plotar os pontos (x, y), e em seguida, usamos o método plot() para traçar a linha de regressão ajustada aos pontos. As partes restantes do código adicionam rótulos aos eixos e um título ao gráfico.

Este código produziria um gráfico X-Y com os pontos e uma linha de regressão, mostrando a relação linear entre x e y.

Heatmaps de Matrizes de Correlação

Um heatmap de matriz de correlação é uma maneira eficaz de visualizar a correlação entre várias variáveis. Ele exibe uma matriz quadrada onde cada célula representa a correlação entre duas variáveis. A intensidade da cor da célula indica o valor da correlação, tornando fácil identificar padrões e relações entre as variáveis.

Aqui está um exemplo de como criar um heatmap de matriz de correlação usando o Seaborn:

import seaborn as sns
# Criar uma matriz de correlação
correlation_matrix = df.corr()
# Plotar o heatmap de matriz de correlação
sns.heatmap(correlation_matrix, annot=True, cmap='RdBu_r', vmin=-1, vmax=1)
plt.title('Heatmap de Matriz de Correlação')
plt.show()

Neste exemplo, usamos o método corr() do pandas para calcular a matriz de correlação a partir do DataFrame df. Em seguida, usamos o método heatmap() do Seaborn para plotar o heatmap da matriz de correlação. Os parâmetros annot=True exibem os valores das células no heatmap, cmap='RdBu_r' define a paleta de cores e vmin=-1 e vmax=1 definem os valores mínimo e máximo para a escala de cores.

Este código produziria um heatmap de matriz de correlação, mostrando as correlações entre as variáveis do DataFrame df.

Conclusão

Neste tutorial, você aprendeu como calcular e visualizar correlações usando NumPy, SciPy e pandas. Vimos como calcular os coeficientes de correlação de Pearson, Spearman e Kendall, bem como como criar gráficos X-Y com uma linha de regressão e heatmaps de matrizes de correlação.

Agora você tem as ferramentas necessárias para analisar a relação entre variáveis e obter insights valiosos de seus dados. Use essas técnicas para aprimorar suas análises e tomar decisões informadas com base nos relacionamentos entre suas variáveis.