こちらのサイトを利用してPython (Anaconda) でデータ解析の勉強をさせてもらおうと思います。
ハンバーガー統計学にようこそ!
3.4 実践編:ハンバーガーを入れてみる
1 2 3 4 5 |
import pandas as pd url = "http://kogolab.chillout.jp/elearn/hamburger/chap3/sec4.html" dframe_list = pd.io.html.read_html(url, encoding="sjis") |
1 2 3 4 5 |
grade_data = dframe_list[0].drop([0]) grade_data.columns = ['','ポテト','チキン', 'ハンバーガー', '小計'] print('観測度数: 表3.9 ポテトとチキンとハンバーガーの売り上げ数') grade_data |
観測度数: 表3.9 ポテトとチキンとハンバーガーの売り上げ数
ポテト | チキン | ハンバーガー | 小計 | ||
---|---|---|---|---|---|
1 | ワクワク | 435 | 165 | 650 | 1250 |
2 | モグモグ | 265 | 135 | 350 | 750 |
3 | 合計 | 700 | 300 | 1000 | 2000 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#帰無仮説と対立仮説を立てる #まず、帰無仮説を立てます。 #帰無仮説:[ここは考えなければいけないのだが・・・] #次に、その逆である対立仮説を立てます。 #対立仮説:[ここも考えなければいけないのだが・・・] i_grade_data = dframe_list[1].drop([0]) i_grade_data.columns = ['','ポテト','チキン', 'ハンバーガー', '小計'] i_waku_potate = (1250 / 2000) * 700 i_mogu_potate = ( 750 / 2000) * 700 i_waku_chiken = (1250 / 2000) * 300 i_mogu_chiken = ( 750 / 2000) * 300 i_waku_burger = (1250 / 2000) * 1000 i_mogu_burger = ( 750 / 2000) * 1000 i_grade_data['ポテト'][1] = str(i_waku_potate) i_grade_data['ポテト'][2] = str(i_mogu_potate) i_grade_data['チキン'][1] = str(i_waku_chiken) i_grade_data['チキン'][2] = str(i_mogu_chiken) i_grade_data['ハンバーガー'][1] = str(i_waku_burger) i_grade_data['ハンバーガー'][2] = str(i_mogu_burger) print('期待度数: 表3.10 ポテトとチキンとハンバーガーの売り上げの期待度数') i_grade_data |
期待度数: 表3.10 ポテトとチキンとハンバーガーの売り上げの期待度数
ポテト | チキン | ハンバーガー | 小計 | ||
---|---|---|---|---|---|
1 | ワクワク | 437.5 | 187.5 | 625.0 | 1250 |
2 | モグモグ | 262.5 | 112.5 | 375.0 | 750 |
3 | 合計 | 700 | 300 | 1000 | 2000 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# 有意水準 = 1% # 期待度数を計算する # scipyを使ってカイ2乗値 from scipy import stats waku_potate = float(grade_data.ix[1][1]) mogu_potate = float(grade_data.ix[2][1]) waku_chiken = float(grade_data.ix[1][2]) mogu_chiken = float(grade_data.ix[2][2]) waku_burger = float(grade_data.ix[1][3]) mogu_burger = float(grade_data.ix[2][3]) observed = [ waku_potate, mogu_potate, waku_chiken, mogu_chiken, waku_burger, mogu_burger ] expected = [ i_waku_potate, i_mogu_potate, i_waku_chiken, i_mogu_chiken, i_waku_burger, i_mogu_burger ] print( observed, expected ) chisq, p = stats.chisquare( observed, expected ) print('カイ二乗統計量 X = {:0.2f}'.format(chisq)) print('P値 = {:0.2f}'.format(p)) |
[435.0, 265.0, 165.0, 135.0, 650.0, 350.0] [437.5, 262.5, 187.5, 112.5, 625.0, 375.0]
カイ二乗統計量 X = 9.90
P値 = 0.08
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 一般的に、行と列がある二次元の表の場合は、 # 自由度=(行の数-1)×(列の数-1) # 自由度の計算 free_level = (3-1) * (2-1) print( "自由度= {}".format(free_level) ) print("カイ2乗分布表") kai_list = dframe_list[2].drop([0]) kai_list.columns = [ "↓自由度/確率→", "0.05", "0.01" ] kai_list |
自由度= 2
カイ2乗分布表
↓自由度/確率→ | 0.05 | 0.01 | |
---|---|---|---|
1 | 1 | 3.84 | 6.63 |
2 | 2 | 5.99 | 9.21 |
3 | 3 | 7.81 | 11.34 |
4 | 4 | 9.49 | 13.28 |
5 | 5 | 11.07 | 15.09 |
6 | …以下続く… | … | … |
1 2 3 |
# カイ2乗分布表より有意水準1%のカイ2乗値は iX=9.21 # 計算で求めたカイ2乗値は X=9.90 |
もし表の値よりも大きければ、それは、1%よりも小さい確率でしか起こらないことが起こったということです。
したがって帰無仮説が間違っていたと考え、帰無仮説を棄却します。
もし表の値よりも小さければ、それは、1%よりも大きい確率で起こりうることだということです。
したがって帰無仮説を採択します。
X > iX なので 無帰仮説を棄却する。
(ということでいいのだろうか・・・)
こういうブログもありました。
- 「ハンバーガー統計学にようこそ!」をPythonでお勉強 3.3まで
- 「ハンバーガー統計学にようこそ!」をPythonでお勉強 4.4まで
- 「ハンバーガー統計学にようこそ!」をPythonでお勉強 2.2まで
- 「ハンバーガー統計学にようこそ!」をPythonでお勉強 2.9まで
- 「ハンバーガー統計学にようこそ!」をPythonでお勉強 2.4まで
人気のあるブログ:
- 新しいgemのアップデート方法(rubygems-update)
- Coda2でscssを使うときのお供にcompassをどうぞ。
- NginxをSSL付きで動かすために設定したこと
- SIM無しiPhone 3Gで初めて脱獄をやってみた
- bashでUTF-8に設定して日本語表示したり使ったり。Emacsでも。