こんばんわ! Keisukeです!
今週は, 主に統計を勉強したのでPythonに軽く実装してみようかと思います!
Pythonは, 5~8年くらい前に新しくできたプログラミング言語です。
今日は, Pythonを使って平均値, 分散値, 標準偏差を算出したいと思います!
取り扱うデータは, 適当に打ち込んだテストの点数です!
data = [90点 88点 70点 54点 23点 98点 67点 82点 97点 65点 34点 23点 2点 65点]
スプレッドシートで計算すると
平均値 : 61.28571429
分散値 : 920.8351648
標準偏差 : 30.34526594
となりました!
上記をPythonで出力しようとすると…
=================================================================
”’
平均値 → 偏差 → 分散値 → 標準偏差
”’
def cal_ave(data): #平均値
s = sum(data)
n = len(data)
ave = s/n
return ave
def cal_dif(data): #偏差
ave = cal_ave(data)
diff = []
for i in data:
diff.append( i – ave )
return diff
def cal_var(data): #分散値
diff = cal_dif(data)
sq_diff = []
for d in diff:
sq_diff.append(d**2)
sum_sq_diff = sum(sq_diff)
vari = sum_sq_diff / len(data)
return vari
if __name__ == ‘__main__’:
data = [90,88,70,54,23,98,67,82,97,65,34,23,2,65]
vari = cal_var(data)
stv = vari ** 0.5 #標準偏差
print(‘平均値 : {0}’.format(cal_ave(data)))
print(‘分散値 : {0}’.format(vari))
print(‘標準偏差 : {0}’.format(stv))
=================================================================
結果
平均値 : 61.285714285714285
分散値 : 855.0612244897958
標準偏差 : 29.241429932371567
あれ?
結果が違いますね!??
スプレッドシート
平均値 : 61.28571429
分散値 : 920.8351648
標準偏差 : 30.34526594
Python
平均値 : 61.285714285714285
分散値 : 855.0612244897958
標準偏差 : 29.241429932371567
分散値と標準偏差の値に相違があるようですね!!
理由は簡単です!
スプレッドシート、Excelでは標準偏差と分散値の計算を(n-1)法を用いて行っていますが
Pythonでは(n-1)法を使ってないんですね!
Pythonに(n-1)法を適用すると…
=================================================================
def cal_var(data): #分散値
diff = cal_dif(data)
sq_diff = []
for d in diff:
sq_diff.append(d**2)
sum_sq_diff = sum(sq_diff)
vari = sum_sq_diff / (len(data) -1) # (n-1)法を適用
=================================================================
平均値 : 61.285714285714285
分散値 : 920.8351648351647
標準偏差 : 30.345265937789453
だいたい同じになりましたね!
Pythonは今や、ライブラリを使えば理論が分かってなくても
なんでもできちゃう言語になっているんです!
ですが、こういった数値計算における理論は知って置くにこした事はないと思っています!
数値異常に気づけたり, ライブラリが間違ってる可能性だってありますからね!
僕が, 理論好きということもありますが….
[今日の達成]
・Pythonで統計処理!
[今日の未消化]
・英語をあまり使わなかった