<jupyter_start><jupyter_text>Step 1. 分布乱数と一様分布二項分布正規分布Step 1 の目標正規分布に従う乱数のヒストグラムを描く。 1.1 乱数と一様分布一様乱数の分布の図示まずは、一様乱数を発生させて、その分布を図示してみましょう。<jupyter_code># 乱数を扱うためのライブラリをインポートする。
import random
sample_size = 10 # 乱数発生回数

# 一様乱数を dist に格納する （distribution : 分布）
dist = [random.random() for i in range(sample_size)]
# dist の中身を確認する。
dist
# 図やグラフを図示するためのライブラリをインポートする。
import matplotlib.pyplot as plt
%matplotlib inline
# ヒストグラムを描く。
plt.hist(dist)
plt.grid()
plt.show()<jupyter_output><empty_output><jupyter_text>乱数発生回数を増やしてみる乱数発生回数を多くするにしたがって、"理想的な" 分布の形に近づいていきます。<jupyter_code>sample_size = 100 # 乱数発生回数

# 一様乱数を dist に格納する
dist = [random.random() for i in range(sample_size)]

# ヒストグラムを描く。
plt.hist(dist)
plt.grid()
plt.show()
sample_size = 1000 # 乱数発生回数

# 一様乱数を dist に格納する
dist = [random.random() for i in range(sample_size)]

# ヒストグラムを描く。
plt.hist(dist)
plt.grid()
plt.show()
sample_size = 10000 # 乱数発生回数

# 一様乱数を dist に格納する
dist = [random.random() for i in range(sample_size)]

# ヒストグラムを描く。
plt.hist(dist)
plt.grid()
plt.show()
sample_size = 100000 # 乱数発生回数

# 一様乱数を dist に格納する
dist = [random.random() for i in range(sample_size)]

# ヒストグラムを描く。
plt.hist(dist)
plt.grid()
plt.show()<jupyter_output><empty_output><jupyter_text>binを増やしてみるゴミを分別するのに使う箱のことを bin と言います。ヒストグラムを描く時は、いくつの bin に分別するかで表示が違ってきます。binの数を多くすると、分布の細かい形が見えますが、ひとつのbinあたり分別されたデータ数は当然少なくなります。<jupyter_code>sample_size = 100000 # 乱数発生回数

# 一様乱数を dist に格納する
dist = [random.random() for i in range(sample_size)]

# ヒストグラムを描く。
plt.hist(dist, bins=100) # binを多くする
plt.grid()
plt.show()<jupyter_output><empty_output><jupyter_text>1.2 二項分布 __np.random.binomial(n, p)__ は、確率pで奇数が出る（確率1-pで偶数が出る）ルーレットをn回プレイしたときに、奇数が出る個数を返します。このような分布を、二項分布と言います。 等確率の二項分布奇数と偶数が等確率で出るルーレットを１０回プレイし、奇数が出る回数を数えます。それを１００００回繰り返します。奇数と偶数が同じ回数だけ出る確率（５回ずつ出る確率）はどのくらいでしょうか。<jupyter_code># 数値計算のライブラリをインポートする。
import numpy as np
sample_size = 10000 # 乱数発生回数

# 確率pで奇数が出る（確率1-pで偶数が出る）ルーレットをn回プレイしたときに、
# 奇数が出る回数の分布
dist = [np.random.binomial(n=10, p=0.5) for i in range(sample_size)]

# ヒストグラムを描く。
plt.hist(dist, bins=100)
plt.grid()
plt.show()<jupyter_output><empty_output><jupyter_text>上図から分かるように、奇数と偶数が等確率で出るルーレットを１０回プレイして、奇数と偶数が同じ回数だけ出る確率（５回ずつ出る確率）は、約２５％（１００００回中の約２５００回）ほどです。案外少ない、という印象を持つかもしれませんね。そのルーレットはイカサマかあなたはカジノで他の客がルーレットをプレイしているのを観察していました。すると、奇数の出る回数がやけに多いので、そのルーレットはイカサマではないかという気がしてきました。イカサマでなければ、ルーレットは奇数と偶数が等確率で出るはずです。ところがこのルーレットは、１００回中６０回、奇数が出ました。このルーレットはイカサマでしょうか。奇数と偶数が等確率で出るルーレットを１００回プレイした時、奇数が出る回数が６０回以上になる確率はどれくらいでしょうか。まずは分布を描いてみましょう。<jupyter_code>sample_size = 10000 # 乱数発生回数

# 確率pで奇数が出る（確率1-pで偶数が出る）ルーレットをn回プレイしたときに、
# 奇数が出る回数の分布
dist = [np.random.binomial(n=100, p=0.5) for i in range(sample_size)]

# ヒストグラムを描く。
plt.hist(dist, bins=100)
plt.grid()
plt.show()<jupyter_output><empty_output><jupyter_text>上と同様の計算で、今度は「ルーレットを１００回プレイして奇数が６０回以上出る確率」を計算してみます。<jupyter_code>sample_size = 10000 # 乱数発生回数

# 確率pで奇数が出る（確率1-pで偶数が出る）ルーレットをn回プレイしたときに、
# 奇数が出る回数の分布
dist = [np.random.binomial(n=100, p=0.5) for i in range(sample_size)]

p = sum([1 for n in dist if n >= 60]) / sample_size
print("p値: %(p)s " %locals())<jupyter_output><empty_output><jupyter_text>奇数と偶数が等確率で出るルーレットを１００回プレイして、奇数が出る回数が「偶然」６０回以上になる確率は 5% 以下になることが分かりました。つまり、１００回中６０回以上奇数が出るようなルーレットは、そのルーレットがイカサマだと疑ってみるのが良さそうです。このときのpを、p値(有意確率)と呼びます。* 帰無仮説：そのルーレットはイカサマではない（奇数と偶数が等確率で出る）。* 対立仮説：そのルーレットはイカサマである。* p < 0.05 なので、有意水準5%で、帰無仮説を棄却できる。* すなわち、そのルーレットはイカサマである可能性が高い。練習1.1１００回中６０回以上奇数が出るようなルーレットは、そのルーレットがイカサマだと疑ってみるのが良さそうです。では、１０回中６回以上奇数が出た場合、奇数が出た確率は同じ６０％ですが、そのルーレットはイカサマと言えるでしょうか。p値を計算して答えてください。<jupyter_code># 練習1.1<jupyter_output><empty_output><jupyter_text>等確率でない二項分布全住民の5%がある感染症に罹患したと推定されている。その全住民の中から無作為に20人を抽出した場合、抽出された集団の中に罹患者は何人いるでしょうか。そのような分布も二項分布になります。分布を描いてみましょう。<jupyter_code>sample_size = 10000 # 乱数発生回数

# 確率pで奇数が出る（確率1-pで偶数が出る）ルーレットをn回プレイしたときに、
# 奇数が出る回数の分布
dist = [np.random.binomial(n=20, p=0.05) for i in range(sample_size)]

# ヒストグラムを描く。
plt.hist(dist, bins=100)
plt.grid()
plt.show()<jupyter_output><empty_output><jupyter_text>練習1.2全住民の5%がある感染症に罹患したと推定されている。その全住民の中から無作為に100人を抽出したところ、抽出された集団の中に罹患者が10人以上いた。(1)　それが偶然起こる確率を概算しなさい。(2)　その結果をどう解釈すれば良いか。<jupyter_code># 練習1.2<jupyter_output><empty_output><jupyter_text>1.3 正規分布__random.normalvariate(mu, sigma)__ は正規分布に従う乱数を発生させる関数です（mu は平均で、sigma は標準偏差）。標準正規分布平均０、標準偏差1の正規分布を「標準正規分布」と言います。標準正規分布を描いてみましょう。<jupyter_code>sample_size = 10000 # 乱数発生回数

dist = [random.normalvariate(mu=0, sigma=1) for i in range(sample_size)]

# ヒストグラムを描く。
plt.hist(dist, bins=100)
plt.grid()
plt.show()<jupyter_output><empty_output><jupyter_text>標準正規分布に従う乱数が２以上の値を出力する確率はどのくらいでしょうか。計算してみましょう。<jupyter_code>sample_size = 10000 # 乱数発生回数

dist = [random.normalvariate(mu=0, sigma=1) for i in range(sample_size)]

p = sum([1 for n in dist if n >= 2]) / sample_size
print("p値: %(p)s " %locals())<jupyter_output><empty_output><jupyter_text>偏差値大学受験模試などでよく使われる「偏差値」は、平均５０、標準偏差１０の正規分布に従うという仮定をおいています。分布を描いてみましょう。ここで、縦軸は「学生数」をイメージしてください。<jupyter_code>sample_size = 10000 # 乱数発生回数

# 確率pで奇数が出る（確率1-pで偶数が出る）ルーレットをn回プレイしたときに、
# 奇数が出る回数の分布
dist = [random.normalvariate(mu=50, sigma=10) for i in range(sample_size)]

# ヒストグラムを描く。
plt.hist(dist, bins=100)
plt.grid()
plt.show()<jupyter_output><empty_output><jupyter_text>練習1.3偏差値７０以上の学生は、１万人中、何人いると推定されるでしょうか。<jupyter_code># 練習1.3<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12240228789323165, 'fraction_numerical': 0.04194470924690181, 'mean_word_length': 10.479212253829322, 'pattern_counts': {'":': 0, '<': 54, '<?xml version=': 0, '>': 55, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '13', 'dir': 'jupyter-structured-clean-dedup', 'id': '334720', 'license': 'MIT', 'n_tokens_mistral': 4024, 'n_tokens_neox': 3839, 'n_words': 276, 'path': 'beginner/mario/distribution.ipynb', 'repo_name': 'maskot1977/tutorial-6th', 'size': '5245'}