パンダの2つのカテゴリの平均を計算したい場合、次のようにできます。
data = {'Category': ['cat2','cat1','cat2','cat1','cat2','cat1','cat2','cat1','cat1','cat1','cat2'],
'values': [1,2,3,1,2,3,1,2,3,5,1]}
my_data = DataFrame(data)
my_data.groupby('Category').mean()
Category: values:
cat1 2.666667
cat2 1.600000
この方法でフォーマットされた多くのデータがあり、今では[〜#〜] t [〜#〜] --cat1の平均を確認するためにテストを行う必要があります=とcat2は統計的に異なります。どうやってやるの?
それはあなたがどのようなt検定をしたいか(片側または両側の依存または独立)に依存しますが、次のように単純でなければなりません:
from scipy.stats import ttest_ind
cat1 = my_data[my_data['Category']=='cat1']
cat2 = my_data[my_data['Category']=='cat2']
ttest_ind(cat1['values'], cat2['values'])
>>> (1.4927289925706944, 0.16970867501294376)
t統計とp値を含むTupleを返します
他のt検定についてはこちらをご覧ください http://docs.scipy.org/doc/scipy/reference/stats.html
編集:これがデータ形式に関するものだとは気がつきませんでした。あなた は使用できます
two_data = pd.DataFrame(data, index=data['Category'])
次に、 カテゴリへのアクセス は次のように簡単です
scipy.stats.ttest_ind(two_data.loc['cat'], two_data.loc['cat2'], equal_var=False)
loc operator
はラベルで行にアクセスします。
片面または両面の依存または独立
2つの独立したサンプルがあるが、等しい分散があることを知らないの場合、 ウェルチのt検定 。それは次のように簡単です
scipy.stats.ttest_ind(cat1['values'], cat2['values'], equal_var=False)
ウェルチのテストを好む理由については、 https://stats.stackexchange.com/questions/305/when-conducting-at-test-why-would-one-prefer-to-assume-or -equal-variのテスト 。
2つの従属サンプルの場合、次を使用できます。
scipy.stats.ttest_rel(cat1['values'], cat2['values'])
コードを少し簡略化します。
from scipy.stats import ttest_ind
ttest_ind(*my_data.groupby('Category')['value'].apply(lambda x:list(x)))