2017-07-27 4 views
1

J'ai une trame de données pandas (100x10), où chaque colonne représente une certaine quantité et je voudrais tester toutes les colonnes en utilisant le test t. Au lieu de boucler sur les colonnes:Signification statistique des tests par paire sur la trame de données pandas

stats.ttest_rel(df.iloc[:,i], df.iloc[:,j]) 

i!=j, est-il un moyen plus propre de le faire? Quelque chose de similaire à des corrélations:

df.corr() 

où il calcule toutes les corrélations par paire.

Répondre

2

Pas besoin de faire une double boucle for-yourself. Vous pouvez utiliser itertools.combinations

results = pd.DataFrame(columns=df.columns, index=df.columns) 
for (label1, column1), (label2, column2) in itertools.combinations(df.items(), 2): 
    results.loc[label1, label2] = results.loc[label2, label1] = stats.ttest_rel(column1, column2) 
2

Je pense qu'il n'y a pas de méthode directe pour créer un test t-sage paire, vous pouvez essayer un

from scipy.stats import ttest_ind 
import pandas as pd 
import csv 
df=pd.read_csv('input.csv') 


fo = open('result.csv','wb+') 
outfile = csv.writer(fo, delimiter=',') 
outfile.writerow((df.columns).insert(0,'')) 

for i in df.columns: 
    t=[] 
    for j in df.columns: 

     t.append(ttest_ind(df[i], df[j])) 
    (t).insert(0,i) 
    outfile.writerow(t) 

ce script vous donnera fichier de sortie comme Result.csv qui indique à votre paire sage t -test de calcul