「ハンバーガー統計学にようこそ!」をPythonでお勉強 3.4まで

Pythonロゴ

こちらのサイトを利用してPython (Anaconda) でデータ解析の勉強をさせてもらおうと思います。
ハンバーガー統計学にようこそ!

3.4 実践編:ハンバーガーを入れてみる

import pandas as pd

url = "http://kogolab.chillout.jp/elearn/hamburger/chap3/sec4.html"
dframe_list = pd.io.html.read_html(url, encoding="sjis")
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
#帰無仮説と対立仮説を立てる
#まず、帰無仮説を立てます。
#帰無仮説:[ここは考えなければいけないのだが・・・]
#次に、その逆である対立仮説を立てます。
#対立仮説:[ここも考えなければいけないのだが・・・]

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%
# 期待度数を計算する

# 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)×(列の数-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 …以下続く…
# カイ2乗分布表より有意水準1%のカイ2乗値は iX=9.21
# 計算で求めたカイ2乗値は X=9.90

もし表の値よりも大きければ、それは、1%よりも小さい確率でしか起こらないことが起こったということです。
したがって帰無仮説が間違っていたと考え、帰無仮説を棄却します。
もし表の値よりも小さければ、それは、1%よりも大きい確率で起こりうることだということです。
したがって帰無仮説を採択します。

X > iX なので 無帰仮説を棄却する。
(ということでいいのだろうか・・・)

鹿児島県の出水市という所に住んでいまして、インターネット周辺で色々活動して行きたいと思ってるところです。 Webサイト作ったり、サーバ設定したり、プログラムしたりしている、釣りと木工好きなMacユーザです。 今はデータサイエンスに興味を持って競馬AI予想を頑張ってます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください