Voltar ao blog

Analisando Correlação entre variáveis utilizando Python

Publicado em · 4 min de leitura

  • Andre Luiz RosárioEx Membro UFRJ Analytica
  • Claudio Almeida Santos Junior
mulher analisndo um papel com dataset e o titulo: Analisando Correlação entre variáveis utilizando Python

A análise de dados é muito importante por diversos motivos: seja para aplicar um algoritmo de machine learning, seja para saber o que está acontecendo com os dados, dentre outras razões. Tendo isso em vista, alguns fatores são muito importantes de serem analisados, a fim de obter resultados mais consistentes. Um deles é a correlação, que será o tema deste artigo.

A correlação analisa a dependência entre variáveis. É um fator importante de ser analisado, pois pode nos informar, por exemplo, qual é a variável “predominante”. Uma utilidade seria para reduzir a dimensão das features a serem analisadas, através da eliminação de variáveis muito correlacionadas entre si. Por exemplo, supondo que X e Y possuem correlação de 1, é possível eliminar ou X ou Y. Em datasets com muitas features, isso pode ajudar significativamente na performance de um modelo.

Com isso em vista, o Python é uma linguagem de programação muito boa para fazer essas análises, tendo em vista que há várias bibliotecas que podem facilitar isso. Algumas dessas bibliotecas são: Numpy [6], Pandas [3], Matplotlib [5] e Seaborn [4].

Analisando correlação usando alguns exemplos

Os exemplos utilizados a seguir são datasets prontos, que são incluídos na biblioteca sci-kit learn [7].

O primeiro passo é importar as bibliotecas necessárias:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

OBSERVAÇÃO: o comando %matplotlib inline é um comando do jupyter notebook para facilitar a visualização de gráficos nas células.

Com as bibliotecas importadas, o próximo passo é analisar o dataset desejado. Nesse artigo, serão utilizados dois datasets disponibilizados na biblioteca sci-kit learn: “Boston House Prices” [1] e “Diabetes” [2].

Dataset Boston House Prices

Uma primeira análise importante que pode ser feita consiste em visualizar as primeiras linhas. Isso pode ser feito utilizando o método pandas.DataFrame.head() que, como valor padrão, exibe as 5 primeiras linhas do dataframe (mas esse valor pode ser alterado).

#importando dataset built in do sklearn "boston house prices"
from sklearn.datasets import load_boston
data_boston = load_boston()
dataset_boston = pd.DataFrame(data_boston.data, columns = data_boston.feature_names)
dataset_boston['target'] = data_boston.target
dataset_boston.head()

tabela das primeiras linha do dataset

No caso desse dataset, em que se deseja, por exemplo, prever o preço das casas de Boston, um fator importante de analisar é a correlação entre as variáveis. A biblioteca pandas disponibiliza um método que calcula a correlação das variáveis pandas.DataFrame.corr() que, por padrão, utiliza o método de pearson para realizar esse cálculo, mas é possível escolher outros. Esse método retorna a matriz de correlação das variáveis do dataframe. O resultado obtido para o dataset utilizado, está presente abaixo.

X_boston = dataset_boston.drop('target', axis=1)
y_boston = dataset_boston['target']
X_boston.corr()

Matriz de correlação obtida para o dataset Boston House Prices.

Há uma forma alternativa de visualizar a matriz de correlação, que é utilizando o método seaborn.heatmap , disponível na biblioteca seaborn. Esse método retorna um gráfico de calor das variáveis, com uma escala de cor que pode ser escolhida pelo usuário.

plt.figure(figsize = (10,6))
sns.heatmap(X_boston.corr())

Matriz de correlação utilizando o método heatmap.

Entretanto, pode ser melhor analisar a correlação apenas entre duas variáveis. Para isso, a função matplotlib.pyploy.scatter() mostra o gráfico de dispersão entre duas variáveis. Para o dataset Boston House Prices, foram escolhidas as variáveis “NOX” e “INDUS”. O resultado está presente a seguir.

plt.figure(figsize=(10,5))
plt.scatter(X_boston['NOX'], X_boston['INDUS'])

Gráfico de dispersão entre as variáveis “NOX” e “INDUS”.

Nesse caso, observa-se que essas variáveis não possuem uma correlação muito alta.

Dataset Diabetes

Assim como no caso anterior, optou-se por começar a análise desse dataset observando os primeiros registros:

#dataset diabetes
from sklearn.datasets import load_diabetes
data_diabetes = load_diabetes()
dataset_diabetes = pd.DataFrame(data_diabetes.data, columns = data_diabetes.feature_names)
dataset_diabetes['target'] = data_diabetes.target
dataset_diabetes.head()

Visualizando primeiras linhas do dataset Diabetes.

Analisando a matriz de correlação:

X_diabetes = dataset_diabetes.drop('target', axis=1)
y_diabetes = dataset_diabetes['target']
X_diabetes.corr()

Matriz de correlação do dataset Diabetes.

Observando a matriz de correlação através do gráfico de calor:

plt.figure(figsize=(10,6))
sns.heatmap(X_diabetes.corr())

Matriz de correlação utilizando o método heatmap.

Dessa vez, observando a matriz de correlação, percebe-se que as variáveis “s1" e “s2" apresentam alta correlação. A partir disso, um gráfico de dispersão pode ser feito para visualizar essa correlação.

plt.figure(figsize=(10,5))
plt.scatter(X_diabetes['s1'], X_diabetes['s2'])

Gráfico de dispersão entre as variáveis “s1" e “s2".

Observa-se que o gráfico obtido apresenta um comportamento, aproximadamente, linear.

Referências

[1] Boston housing prices dataset:

sklearn.datasets.load_boston The scikit-learn maintainers therefore strongly discourage the use of this dataset unless the purpose of the code is to… scikit-learn.org

[2] Diabetes dataset:

sklearn.datasets.load_diabetes Examples using sklearn.datasets.load_diabetes: Plot individual and voting regression predictions Plot individual and… scikit-learn.org

[3] Pandas:

https://pandas.pydata.org/

[4] Seaborn:

seaborn: statistical data visualization - seaborn 0.11.2 documentation Seaborn is a Python data visualization library based on matplotlib. It provides a high-level interface for drawing… seaborn.pydata.org

[5] Matplotlib:

Matplotlib A large number of third party packages extend and build on Matplotlib functionality, including several higher-level… matplotlib.org

[6] Numpy:

NumPy Why NumPy? Powerful n-dimensional arrays. Numerical computing tools. Interoperable. Performant. Open source. numpy.org

[7] Sci-kit learn:

scikit-learn "We use scikit-learn to support leading-edge basic research [...]" "I think it's the most well-designed ML package I've… scikit-learn.org