Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Desafio 5: Correlação | Estatísticas
Desafio de Entrevista em Ciência de Dados

book
Desafio 5: Correlação

Distinguir entre correlação e causalidade é um conceito fundamental em estatísticas. Embora a correlação denote uma relação entre duas variáveis, isso não implica que uma variável causa a outra. A causalidade, por outro lado, sugere uma relação direta onde uma mudança em uma variável resulta em uma mudança em outra.

Por exemplo, considere uma sorveteria que percebe um aumento nas vendas nos meses de verão e uma diminuição no inverno. Enquanto há uma correlação entre a temperatura e as vendas de sorvete, isso não significa que temperaturas mais altas causem um aumento nas vendas. Poderia haver variáveis ​​confundidoras, como as pessoas preferirem tratamentos frios em clima quente. As pessoas não compram sorvete apenas porque a temperatura aumentou; elas compram porque o acham refrescante no calor.

Portanto, embora haja uma correlação clara entre a temperatura e as vendas de sorvete, não podemos dizer definitivamente que temperaturas mais altas causem um aumento nas vendas sem considerar outros fatores. Fazer declarações causais exige um exame mais rigoroso e, idealmente, experimentos controlados para descartar ou considerar possíveis variáveis ​​confundidoras.

Aqui está o conjunto de dados que utilizaremos neste capítulo. Sinta-se à vontade para mergulhar e explorá-lo antes de enfrentar a tarefa.

import seaborn as sns

# Load the dataset
data = sns.load_dataset('tips')

# Sample of data
display(data.head())
1234567
import seaborn as sns # Load the dataset data = sns.load_dataset('tips') # Sample of data display(data.head())
copy
Tarefa

Swipe to start coding

Utilizando o conjunto de dados tips do Seaborn, realize as seguintes tarefas:

  1. Determine o coeficiente de correlação de Pearson entre as colunas total_bill e tip, o qual fornece uma medida da associação linear entre as duas variáveis numéricas.
  2. Visualize a relação entre total_bill (para o eixo X) e tip (para o eixo Y) com um gráfico de regressão linear, permitindo observar como mudanças no total_bill podem prever alterações na tip.
  3. Crie uma matriz de correlações para as variáveis categóricas no conjunto de dados usando o V de Cramér, uma medida baseada na estatística qui-quadrado que quantifica a associação entre duas variáveis categóricas.

Solução

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import chi2_contingency
import numpy as np

# Load the dataset
data = sns.load_dataset('tips')

# 1. Compute the Pearson correlation coefficient between 'total_bill' and 'tip'
correlation_coefficient = data['total_bill'].corr(data['tip'])
print(f"The Pearson correlation coefficient between 'total_bill' and 'tip' is: {correlation_coefficient:.2f}")

# 2. Visualize the relationship between 'total_bill' and 'tip' using a linear regression plot
sns.lmplot(x='total_bill', y='tip', data=data)
plt.title("Relationship between 'total_bill' and 'tip'")
plt.show()

# Calculates Cramér's V measure between categorical variables
def cramers_v(x, y):
confusion_matrix = pd.crosstab(x,y)
chi2 = chi2_contingency(confusion_matrix)[0]
n = confusion_matrix.sum().sum()
phi2 = chi2/n
r,k = confusion_matrix.shape
phi2corr = max(0, phi2-((k-1)*(r-1))/(n-1))
rcorr = r-((r-1)**2)/(n-1)
kcorr = k-((k-1)**2)/(n-1)
return np.sqrt(phi2corr/min((kcorr-1),(rcorr-1)))

# 3. Generate a matrix of correlations (Cramér's V) between categorical variables
categorical_cols = ['sex', 'smoker', 'day', 'time']
correlation_matrix = pd.DataFrame(index=categorical_cols, columns=categorical_cols)
for col1 in categorical_cols:
for col2 in categorical_cols:
correlation_matrix.loc[col1, col2] = cramers_v(data[col1], data[col2])
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 6. Capítulo 5
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import chi2_contingency
import numpy as np

# Load the dataset
data = sns.load_dataset('tips')

# 1. Compute the Pearson correlation coefficient between 'total_bill' and 'tip'
correlation_coefficient = data['total_bill'].___(___)
print(f"The Pearson correlation coefficient between 'total_bill' and 'tip' is: {correlation_coefficient:.2f}")

# 2. Visualize the relationship between 'total_bill' and 'tip' using a linear regression plot
sns.___(x='___', y='___', data=data)
plt.title("Relationship between 'total_bill' and 'tip'")
plt.show()

# Calculates Cramér's V measure between categorical variables
def cramers_v(x, y):
confusion_matrix = pd.crosstab(x,y)
chi2 = chi2_contingency(confusion_matrix)[0]
n = confusion_matrix.sum().sum()
phi2 = chi2/n
r,k = confusion_matrix.shape
phi2corr = max(0, phi2-((k-1)*(r-1))/(n-1))
rcorr = r-((r-1)**2)/(n-1)
kcorr = k-((k-1)**2)/(n-1)
return np.sqrt(phi2corr/min((kcorr-1),(rcorr-1)))

# 3. Generate a matrix of correlations (Cramér's V) between categorical variables
categorical_cols = ['sex', 'smoker', 'day', 'time']
correlation_matrix = pd.DataFrame(index=___, columns=___) # Label the X and Y axes with the names of the selected columns
for col1 in categorical_cols:
for col2 in categorical_cols:
correlation_matrix.loc[___] = cramers_v(data[___], data[___])

sns.heatmap(correlation_matrix.astype(float), annot=True)
plt.show()

Pergunte à IA

expand
ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

some-alt