Pacote no Python para Pesquisadores: Researchpy

A maioria dos pesquisadores ainda é adepta ao R. Ao menos quando consideramos o mundo acadêmico. Porém, não é novidade para ninguém que o Python vem tomando o mercado. Isso é refletido na academia também. Sendo assim, se você é desses pesquisadores que está começando a aprender Python, pode ser hora de conhecer a biblioteca Researchpy.

A biblioteca em questão é excelente para pesquisadores, já que contempla boa parte das análises realizadas por eles, como estatística descritiva, correlação, teste t, dentre outros. Vamos ver o que esse pacote é capaz de fazer. Começamos importando as bibliotecas e o dataset que será utilizado:

import researchpy as rp
import pandas as pd

df = pd.read_csv('experimento.csv', sep=',')
df.head()

Como vocês podem ver, é um experimento no qual testamos diferentes doses de um remédio e verificamos o aumento da libido do paciente. Mas quantas doses foram dadas e quantos são os níveis de libido? Bom, eu poderia simplesmente falar o que foi desenhado, mas prefiro que vocês vejam como descobrir isso no Python:

print("Doses testadas: %s"% sorted(set(df.dose.unique())))
print("Níveis de libido: %s"% sorted(set(df.libido.unique())))

Agora sim, vamos finalmente utilizar o Researchpy. Começamos obtendo um resumo da variável libido:

# estatistica da variavel libido
rp.summary_cont(df['libido'])

Vimos que temos a quantidade de pacientes, a média, desvio padrão, erro padrão e o intervalo de confiança. É possível fazer o mesmo para duas variáveis:

rp.summary_cont(df[['libido','dose']])

Note que nossa variável foi tratada como numérica. Mas o que aconteceria se ela fosse categória? Retornaria um erro. Nesse caso, há outra função no pacote, a summary_cat():

df['dose_cat'] = df['dose']
df['dose_cat'] = df['dose_cat'].astype('category')
rp.summary_cat(df['dose_cat'])

Se você tivesse uma TERCEIRA variável e quisesse combinar a análise com um GROUPBY, seria possível. Vamos imaginar que a gente tivesse a variável idade e quisesse saber a descritiva de idade para libido por cada dose. Teríamos algo como:

rp.summary_cont(df.groupby(['libido', 'dose'])['idade'])

Outra tarefa comum a ser feita é obter a frequência cruzada, i.e., quantas pessoas que tomaram a dose 1 ficaram com a libido no nível 1, quantas ficaram no nível 2 e por aí vai:

rp.crosstab(df['libido'], df['dose'])

Você pode ir além e fazer o teste do qui-quadrado para independência e também calcular qual era a frequência esperada:

# frequencia cruzada dose x libido com qui-quadrado e freq esperada
rp.crosstab(df['libido'], df['dose'], test='chi-square', expected_freqs= True)

Se você quiser dar uma ajustada no layout:

crosstab, test, freq = rp.crosstab(df['libido'], df['dose'], test='chi-square', expected_freqs= True)
print("Frequência Cruzada: "+ '\n' + '\n %s' %crosstab)
print("")
print("Teste Qui-Quadrado: " + '\n' + '\n %s' %test)
print("")
print("Frequência Esperada: "+ '\n' + '\n %s' %freq)

Outros testes aceitos: McNemar, Fisher e G-Test.

Também é possível excluir a coluna totalizadora ao incluir o argumento Margin = False. Ou trocar os valores pelos percentuais, usando o argumento prop=(“row”, “col”, “cell”).

Por fim, correlação é algo que costumeiramente aparece em qualquer tipo de análise. É claro, o pacote também tem isso:

rp.correlation.corr_case(df)

Para uma saída diferente, temos o corr_pair:

rp.correlation.corr_pair(df)

E se você curtiu o post, se inscreva no blog para ficar por dentro de todas as novidades. Basta ir ali no canto direito e assinar para receber o alerta de post novo. E se puder, compartilhe com seus amigos que estão estudando os temas que aqui são abordados. Isso ajuda bastante. Se tiver Twitter, siga o @EstatSite para ficar ligado em dicas mais rápidas e participar de discussões interessantes que rolam por lá!

Forte abraço e bons estudos!

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *