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

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()
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()
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())
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'])
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()
Analisando a matriz de correlação:
X_diabetes = dataset_diabetes.drop('target', axis=1)
y_diabetes = dataset_diabetes['target']
X_diabetes.corr()
Observando a matriz de correlação através do gráfico de calor:
plt.figure(figsize=(10,6))
sns.heatmap(X_diabetes.corr())
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'])
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:
[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