「ハンバーガー統計学にようこそ!」をPythonでお勉強 3.3まで
こちらのサイトを利用してPython (Anaconda) でデータ解析の勉強をさせてもらおうと思います。
ハンバーガー統計学にようこそ!
3.1 チキンの売り上げは少ないのか
import pandas as pd
url="http://kogolab.chillout.jp/elearn/hamburger/chap3/sec1.html"
dframe_list = pd.io.html.read_html(url,encoding="sjis")
grade_data = dframe_list[0].drop([0])
grade_data.columns = ['','ポテト','チキン','小計'] # indexの変更
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])
potate = waku_potate + mogu_potate
chiken = waku_chiken + mogu_chiken
pc = potate + chiken
total_df = pd.DataFrame([ ['合計', potate, chiken, pc] ], columns=['','ポテト','チキン','小計'])
grade_data = grade_data.append( total_df )
print('観測度数')
grade_data
観測度数
ポテト | チキン | 小計 | ||
---|---|---|---|---|
1 | ワクワク | 435 | 165 | 600 |
2 | モグモグ | 265 | 135 | 400 |
0 | 合計 | 700 | 300 | 1000 |
i_grade_data = dframe_list[1].drop([0])
i_grade_data.columns = ['','ポテト','チキン','小計']
i_waku_potate = (600 / 1000) * 700
i_mogu_potate = (400 / 1000) * 700
i_waku_chiken = (600 / 1000) * 300
i_mogu_chiken = (400 / 1000) * 300
print("期待度数")
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 | ワクワク | 420.0 | 180.0 | 600 |
2 | モグモグ | 280.0 | 120.0 | 400 |
3 | 合計 | 700 | 300 | 1000 |
3.3 カイ2乗検定
# カイ2乗値
kai = (( float(grade_data['ポテト'][1]) - float(i_grade_data['ポテト'][1]) ) **2 / float(i_grade_data['ポテト'][1])) + (( float(grade_data['ポテト'][2]) - float(i_grade_data['ポテト'][2]) ) **2 / float(i_grade_data['ポテト'][2])) + (( float(grade_data['チキン'][1]) - float(i_grade_data['チキン'][1]) ) **2 / float(i_grade_data['チキン'][1])) + (( float(grade_data['チキン'][2]) - float(i_grade_data['チキン'][2]) ) **2 / float(i_grade_data['チキン'][2]))
kai
4.464285714285714
# scipyを使ってカイ2乗値
from scipy import stats
observed = [ waku_potate, mogu_potate, waku_chiken, mogu_chiken ]
expected = [ i_waku_potate, i_mogu_potate, i_waku_chiken, i_mogu_chiken ]
print( observed, expected )
chisq, p = stats.chisquare( observed, expected )
print('カイ二乗統計量= {:0.2f}'.format(chisq))
print('P値 = {:0.2f}'.format(p))
[435.0, 265.0, 165.0, 135.0] [420.0, 280.0, 180.0, 120.0]
カイ二乗統計量= 4.46
P値 = 0.22
url="http://kogolab.chillout.jp/elearn/hamburger/chap3/sec3.html"
dframe_list3 = pd.io.html.read_html(url,encoding="sjis")
# 一般的に、行と列がある二次元の表の場合は、
# 自由度=(行の数-1)×(列の数-1)
# 自由度の計算
free_level = (2-1) * (2-1)
print( "自由度= {}".format(free_level) )
print("カイ2乗分布表")
kai_list = dframe_list3[1].drop([0])
kai_list.columns = [ "↓自由度/確率→", "0.05", "0.01" ]
kai_list
自由度= 1
カイ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の0.05と0.01の数値で比較検討するらしい。(未完)