Pythonの練習3
統計量の計算や,検定も可能な「scipy」を使って練習をしてみる
import scipy as sp import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns
#2つのクラス(50人ずつ)のある科目の点数の分布を比較してみる
class1 = np.random.randint(0,100,50)
class2 = np.random.randint(0,100,50)
#ヒストグラムも描いてみる fig = plt.figure() ax = fig.add_subplot(111) ax.hist(class1,bins=50, color='red', alpha = 1) ax.hist(class2,bins=50, color='blue',alpha = 1) ax.set_xlabel('tensu') ax.set_ylabel('relative frequency') ax.set_xlim(0,100,10) plt.savefig('./fig/hist.png')
#平均を出力させて予想してみる
ave_cls1 = np.mean(class1)
ave_cls2 = np.mean(class2)
print(ave_cls1,ave_cls2)
出力結果は,クラス1では45.00点
クラス2では56.22点
点数は独立したものなので,対応のない検定を行う.
有意水準は5%,帰無仮説は「2つのクラス間に平均の差はない」とする
res = sp.stats.ttest_ind(class1,class2,equal_var=False)
print(res)
結果:
Ttest_indResult(statistic=-1.8883673077867298, pvalue=0.06195728760398108)
p=0.06>0.05 #かなり微妙な数値だが・・・
ということで,2つのクラスの平均点は有意に等しいといえる.