修正するなど
Excelのデータを読み込む( http://d.hatena.ne.jp/fukuit/20160828/1472395613 )として書いていた記事に間違いがあったので、修正。間違えてたのは、t検定のメソッド。
t,p = stats.ttest_rel(tokyo, kyoto)
と書いていたけれど、 ttest_rel() は対応のあるt検定だった。ここは、対応のないt検定をしなければならない。その場合は、ttest_ind()を使う。
t,p = stats.ttest_ind(tokyo, kyoto)
ちなみに、studentのt検定とWelchのt検定では、Welchの方法のほうがrobustだし、正規分布を仮定しなくてもいいので、この場合はWelchの方法で良いだろうと思う。
t,p = stats.ttest_ind(tokyo, kyoto, equal_var=False)
さて、ttest_ind()には、片側検定をするためのオプションがない。東京の方が低いという仮説を検定するので、まあこれは、t値が負の値になってp値が0.025以下になればOKだろう。OKだよね?
結果は、t値が-4.09874 で、 p値が0.00014なので、「東京のほうが低いとはいえない」という帰無仮説を棄却できることになった。
グラフ描画
せっかく、数値データをExcelで読み込んだので、グラフを描画したい。R ならggplot2を使うところで、もちろんpythonでもggplot2を使えるようなんだけれど、matplotlibを使うのが一般的なようだ。
以下のように修正する。
import xlrd import os.path import pandas as pd import numpy as np from scipy import stats from matplotlib import pyplot as plt %matplotlib inline xlfile = "data.xlsx" if os.path.exists(xlfile): xls = xlrd.open_workbook(xlfile) sheet1 = xls.sheet_by_index(0) nrows = sheet1.nrows - 1 ncols = sheet1.ncols data = np.zeros(ncols*nrows).reshape((nrows, ncols)) date = [] for r in range(1, nrows+1): for c in range(0, ncols): if c==0: d = xlrd.xldate.xldate_as_datetime(sheet1.cell(r,c).value, xls.datemode) date.append(d) else: data[r-1,c] = sheet1.cell(r,c).value tokyo = data[:,1] kyoto = data[:,2] plt.plot(date, tokyo, label="Tokyo") plt.plot(date, kyoto, label="Kyoto") plt.legend() plt.show()
日付が重なっちゃって読みづらいな。