カテゴリ:データサイエンス
5.7
bins=[10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100]
df["A"].plot.hist(bins=bins, color="c",ylim=(0,6))
plt.title("Aのばらつき:大きい")
plt.show()
df["B"].plot.hist(bins=bins, color="c",ylim=(0,6))
plt.title("Bのばらつき:小さい")
plt.show()
5.8
df["A"].plot.hist(bins=bins, color="c",ylim=(0,6))
plt.axvline(x=meanA, color="magenta")
plt.axvline(x=meanA - stdA, color="blue", linestyle="--")
plt.axvline(x=meanA + stdA, color="red", linestyle="--")
plt.title("Aのばらつき:大きい")
plt.show()
df["B"].plot.hist(bins=bins, color="c",ylim=(0,6))
plt.axvline(x=meanB, color="magenta")
plt.axvline(x=meanB - stdB, color="blue", linestyle="--")
plt.axvline(x=meanB + stdB, color="red", linestyle="--")
plt.title("Bのばらつき:小さい")
plt.show()
5.9
import random
# ゴルトンボード表示関数:段数、玉数を指定する
def galton(steps, count) :
# 玉が落ちた位置を入れる空のリストを用意する
ans = []
# 指定された玉数だけくり返す
for i in range(count):
# 玉を落とす最初の位置を50にする
val = 50
# 指定された段数だけくり返す
for j in range(steps):
# 0か1のランダムで、0なら-1、1なら+1
if random.randint(0, 1) == 0:
val = val -1
else :
val = val + 1
# 最終的に玉が落ちた位置をリストに追加する
ans.append(val)
# 落下した結果のリストをデータフレームにして
df = pd.DataFrame(ans)
# 0列目(落とした結果の列)をヒストグラムで表示
df[0].plot.hist()
plt.title(str(steps)+"段:"+str(count)+"個")
plt.ylabel("")
plt.show()
galton(1, 10000)
5.13
from scipy.stats import norm
mean = 166.8
std = 5.8
value = 160.0
cdf = norm.cdf(x=value, loc=mean, scale=std)
print(value,"は、下から", cdf*100,"%")
5.15
from scipy.stats import norm
mean = 166.8
std = 5.8
per = 0.20
ppf = norm.ppf(q=per, loc=mean, scale=std)
print("下から", per * 100, "%の値は、", ppf, "です。")
5.17
scoreM=60
meanM = 50
stdM = 5
scoreE=80
meanE = 70
stdE = 8
cdf = norm.cdf(x=scoreM, loc=meanM, scale=stdM)
print("数学の", scoreM, "点は、上から", (1-cdf)*100, "%")
cdf = norm.cdf(x=scoreE, loc=meanE, scale=stdE)
print("英語の", scoreE, "点は、上から", (1-cdf)*100, "%")
5.18
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from scipy.stats import norm
sns.set_theme(font=["Meiryo"])
def disp_histnorm(df, msg):
sns.histplot(df, kde=True, color="blue", alpha=0.2, stat="density")
mu, std = norm.fit(df)
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std)
plt.plot(x, p, linewidth=2, color="red")
plt.title(msg)
plt.show()
df = pd.DataFrame({
"A" : np.random.randint(0, 100, 15),
"B" : np.random.normal(50, 10, 15)
})
disp_histnorm(df["A"], "かたよりのないランダムな値")
disp_histnorm(df["B"], "正規分布になるようなランダムな値")
5.20
scorelist = [60, 70, 80]
for score in scorelist:
cdf = norm.cdf(x=score, loc=50, scale=10)
print("偏差値",score, "は、上から", (1-cdf) * 100, "%")
5.21
perlist = [0.1586, 0.02275, 0.00134]
for per in perlist:
ppf = norm.ppf(q=(1-per), loc=50, scale=10)
print("上から", per * 100, "%以上に入るには、偏差値",ppf,"以上が必要")
5.22
std = 15
IQlist = [110, 130, 148]
for IQ in IQlist:
cdf = norm.cdf(IQ, loc=100, scale=std)
print("IQ", IQ, "は、上から", (1-cdf) * 100, "%")
5.23
std = 24
IQlist = [110, 130, 148]
for IQ in IQlist:
cdf = norm.cdf(IQ, loc=100, scale=std)
print("IQ", IQ, "は、上から", (1-cdf) * 100, "%")