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!