Executando verificação de segurança...
5

[DATA SCIENCE] DAY: 025 - Usando Spearman e Qui-Quadrado

🌎 Bom dia, boa tarde e boa noite pessoal, tudo bem?

🛀 Hoje iremos falar sobre Spearman e Qui-Quadrado

Spearman é um coeficiente de correlação estatística utilizado para medir a relação monotônica entre duas variáveis ordinais. Ele varia entre -1 e 1, onde -1 indica uma relação negativa perfeita, 1 indica uma relação positiva perfeita e 0 indica ausência de relação.
Significado da web

O teste Qui-Quadrado, também conhecido como teste de independência, é usado para verificar se há uma associação entre duas variáveis categóricas. Ele compara as frequências observadas de uma categoria em relação às frequências esperadas se as variáveis fossem independentes.
Significado da web

📝 Obs: Irei utilizar o jupyter notebook para a fácil visualização dos gráficos, mas fique a vontade para escolher outro ambiente de sua preferência. Uma sugestão caso não conheça nenhum, tem o colab do google.

1 - Primeiro, podemos usar a notação as para abreviar o nome das bibliotecas e métodos que vamos importar, vamos aplicar a configuração de visualização de alguns gráficos, ler um arquivo CSV e renomear as colunas:

🔍 Para baixar o arquivo que está sendo usado, clique aqui.

💻

import pandas as pd

import matplotlib.pyplot as plt
from matplotlib import rcParams

import seaborn as sns

%matplotlib inline
rcParams['figure.figsize'] = 6, 3
sns.set_style('whitegrid')

caminho = 'O-caminho-do-seu-arquivo/mtcars.csv'
carros = pd.read_csv(caminho)
carros.columns = ['nomes','mpg','cyl','disp', 'hp', 'drat', 'wt', 'qsec', 'vs', 'am', 'qtd_marchas', 'carb']


📝 Obs: O que esse código faz???

  • Importação de bibliotecas: O código importa as bibliotecas pandas, matplotlib, seaborn e algumas configurações de matplotlib.
  • Configuração de visualização: O tamanho do gráfico é definido e o estilo de visualização é configurado como whitegrid.
  • Carregamento do dataset: O arquivo csv "mtcars" é carregado usando a função read_csv do pandas e atribuído à variável carros.
  • Renomeação de colunas: As colunas do dataset são renomeadas de acordo com a lista fornecida.

Vamos importar a função spearmanr da biblioteca scipy.stats.É usada para calcular o coeficiente de correlação de Spearman entre duas séries de dados.

💻

from scipy.stats import spearmanr

Obs: Ela retorna dois valores: o primeiro é o valor do coeficiente de correlação de Spearman, e o segundo é o p-valor, que é usado para testar a hipótese nula de que não há relação entre as duas séries de dados.


Lembre-se de escolher variáveis que seguem os pressupostos:

  • Não apresentar distribuição normal
  • Variáveis ordinais
  • Variáveis não linearmente relacionadas

2 - Seguindo após as configurações iniciais, vamos criar um gráfico de dispersão conhecido como pairplot para visualizar a relação entre as variáveis do conjunto de dados carros.

💻

X = carros[['cyl', 'vs', 'am', 'qtd_marchas']]
sns.pairplot(X)


📝 Obs: O que esse código faz???

  • Seleção de dados: O conjunto de dados carros é selecionado com base nas colunas cyl, vs, am e qtd_marchas. Essas colunas são armazenadas na variável X.__
  • Importação de pacote: A linha de código importa o pacote seaborn (sns) que fornece uma variedade de ferramentas estatísticas e gráficos para análise de dados.
  • Gráfico de dispersão: A função pairplot() é usada para criar um gráfico de dispersão para cada par de variáveis presentes na variável X. Esse gráfico mostra a relação entre essas duas variáveis e ajuda a identificar padrões e tendências nos dados.
  • Visualização: A função pairplot() é uma maneira fácil de visualizar a relação entre várias variáveis e pode ser útil para identificar padrões e tendências nos dados.

Gráfico gerado:
Gráfico do código acima

3 - Agora iremos selecionar algumas colunas do conjunto de dados de carros e ver na prática como funciona o coeficiente de correlação de Spearman:

💻

cyl = carros['cyl']
vs = carros['vs']
am = carros['am']
marchas = carros['qtd_marchas']

coeficiente_spearmanr, p_valor = spearmanr(cyl, vs)
print('Spearman Rank Correlation Coefficient {:0.3}'.format(coeficiente_spearmanr))

Saída do código:

Spearman Rank Correlation Coefficient -0.814


📝 Obs: O que esse código faz???

  • Variáveis: O código está definindo quatro variáveis, cyl, vs, am e marchas, que estão buscando dados de um conjunto de dados chamado carros.
  • Correlação de Rank de Spearman: O código está usando a função spearmanr para calcular o coeficiente de correlação de rank de Spearman entre as variáveis cyl e vs.
  • Saída: O código então imprime o coeficiente calculado com uma string formatada que inclui o coeficiente arredondado para três casas decimais.
  • Interpretação: O coeficiente de correlação de rank de Spearman é uma medida estatística que calcula a força e a direção da associação monotônica entre duas variáveis. Neste caso, está sendo usado para determinar a relação entre as variáveis cyl e vs no conjunto de dados carros.

Podemos dizer que as variáveis cyl(quantidade de cilindros) e vs (formato do motor) tem forte correlacão, já as outras duas variáveis tem uma correlacão apenas moderada:

Utilizando a variável am

💻

coeficiente_spearmanr, p_valor = spearmanr(cyl, am)
print('Spearman Rank Correlation Coefficient {:0.3}'.format(coeficiente_spearmanr))

Saída do código:

Spearman Rank Correlation Coefficient -0.522

Utilizando a variável qtl_marchas

💻

coeficiente_spearmanr, p_valor = spearmanr(cyl, marchas)
print('Spearman Rank Correlation Coefficient {:0.3}'.format(coeficiente_spearmanr))

Saída do código:

Spearman Rank Correlation Coefficient -0.564

4 - Por último, vamos entender como funciona o Qui-quadrado na prática, mas para calcular o Qui-quadrado precisamos montar um crosstab, assunto abordado no post do dia 24:

💻

table = pd.crosstab(cyl, am)

from scipy.stats import chi2_contingency
chi2, p, dof, expected = chi2_contingency(table.values)
print('Chi-square Statistic {:0.3} p_value {:0.3}'.format(chi2, p))

Saída do código:

Chi-square Statistic 8.74 p_value 0.0126


📝 Obs: O que esse código faz???

  • Crosstab: O código está criando uma tabela cruzada das variáveis cyl e am do conjunto de dados carros, usando o método pd.crosstab().

  • Chi-Square Test: O código está importando a função chi2_contingency do pacote scipy.stats e usando-a para calcular o teste de qui-quadrado para verificar a dependência estatística entre as variáveis cyl e am na tabela cruzada.

  • Saída: O código então imprime o valor estatístico do teste de qui-quadrado e o valor p correspondente, arredondado para três casas decimais.

  • Interpretation: O teste de qui-quadrado é uma ferramenta estatística usada para verificar se duas variáveis categóricas são independentes ou dependentes. Neste caso, ele está sendo usado para verificar se existe dependência estatística entre as variáveis cyl e am no conjunto de dados carros. O valor p menor que 0.05 indica que as variáveis são dependentes.

Podemos aplicar esses mesmos conceitos nas outras variáveis/colunas para verificarmos se são dependentes ou independentes:


Utilizando a variável vs:

💻

table = pd.crosstab(cyl, vs)
chi2, p, dof, expected = chi2_contingency(table.values)
print('Chi-square Statistic {:0.3} p_value {:0.1}'.format(chi2, p))

Saída do código:

Chi-square Statistic 21.3 p_value 2e-05

Com base no resultado do teste de qui-quadrado, parece que as variáveis cyl e vs são dependentes. O valor p é 2e-05, que é menor que o nível de significância comumente utilizado de 0,05. Isso significa que podemos rejeitar a hipótese nula de independência entre as variáveis e concluir que elas são dependentes.


Utilizando a variável marchas:
💻

table = pd.crosstab(cyl, marchas)
chi2, p, dof, expected = chi2_contingency(table.values)
print('Chi-square Statistic {:0.3} p_value {:0.1}'.format(chi2, p))

Saída do código:

Chi-square Statistic 18.0 p_value 0.001

De acordo com a mesma lógica apresentada acima após o resultado, estas variáveis também são dependentes.


🌊 Espero que tenham gostado do conteúdo, amanhã iremos aprender Pré-processamento com scikit-learn!

🚀 Vejo vocês amanhã, tenham uma ótima semana!

Data Science

Carregando publicação patrocinada...
2
1
2

Fala onlyDataFans, muito bom, aprendi algo novo hoje! Me interessei mais pelo .pairplot que eu fazia manual com loops e plt haha.

Recomendo colocar o link nos seus posts ao menos do post anterior, como vc cita ali o day 24, mas sem o link de referência direta, entende?

No mais, ótimo trabalho, aproveite para divulgá-lo no seu Linkedin e desenvolver mais reconhecimento profissional

1
2

Se estiver no pique, e não compartilhou nenhum ainda, faz o seguinte:

Compartilha o seu post DAY 1 lá, e faz uma introdução do que vc fala sobre, e agenda os posts dos próximos Days para cada dia ou dois dias, e no que você achar melhor, pode marcar até o Deschamps, as vezes ele compartilha posts de ouro e o seu tem grandes chances!

Compartilhar também seu linkedin em algum post, vamos nos conectar!

2

Cheguei a compartilhar um post inicial lá sobre as publicações aqui no tabnews, tive uma boa impressão com o pessoal. Mas no próximo, vou seguir as suas dicas. No post de hoje coloco meu linkedin, obrigado pelo feedback!

2

Esse é a primeira publicação da sua autoria que eu vejo. Admito que gostei bastante. É sempre interessante rever alguns conceitos. Muito obrigado por compartilhar esse tipo de conhecimento!

2

Obrigado demopos, fico contente com o seu comentário. Existe outros dois capítulos que passei aqui no tabnews. Dá uma olhada no meu perfil, Gratidão!