データのバラつき(散らばり具合)を表す「標準偏差」は、Pythonで容易に出力可能です。
本記事では、そんなPython基礎となる標準偏差について、詳しくご説明します。
標準偏差
標準偏差(standard deviation)は、下式の通り、データ分散の平方根で算出されます。
分散よりも標準偏差の方が、データのバラつき(散らばり具合)が把握しやすいです。
\(\sigma=\sqrt{\dfrac{1}{n}\sum ^{n}_{i=1}\left( x_{i}-\mu \right) ^{2}}\)
実装(分散と標準偏差)
まずは、データ分散から標準偏差まで求める関数の実装例を、以下にご紹介します。
#input
def cal(data):
S = sum(data)
N = len(data)
M = S/N
d = []
for i in data:
d.append(i-M)
D = []
for j in d:
D.append(j**2)
SD = sum(D)
V = SD/len(data)
std = V**0.5
return std
実装した関数にデータを入力して、分散を出力してみます。
#input
data = [1,2,3,4,5]
std = cal(data)
print(data,"の標準偏差:{}".format(std))
#output
[1, 2, 3, 4, 5] の標準偏差:1.4142135623730951
statistics.pstdev()
statisticsモジュールのstatistics.pstdev()を使用すると、母標準偏差(母分散の平方根)を計算できます。
以下に例をご紹介します。
#input
from statistics import pstdev as std
data = [11,22,33,44,55]
std = std(data)
print(data,"の母標準偏差:{}".format(std))
#output
[11, 22, 33, 44, 55] の母標準偏差:15.556349186104045
statistics.stdev()
statisticsモジュールのstatistics.stdev()を使用すると、標本標準偏差を計算できます。
標本標準偏差とは、下式に示されるように、\(n\)でなく\(n-1\)で除した不偏分散の平方根のことです。
\(\sigma=\sqrt{\dfrac{1}{n-1}\sum ^{n}_{i=1}\left( x_{i}-\mu \right) ^{2}}\)
statistics.variance()の使用例を、以下にご紹介します。
#input
from statistics import stdev as std
data = [11,22,33,44,55]
std = std(data)
print(data,"の標本標準偏差:{}".format(std))
#output
[11, 22, 33, 44, 55] の標本標準偏差:17.392527130926087
numpy.std()
NumPyのnumpy.std()を使用すると、配列データの標準偏差を計算できます。
使用例を以下にご紹介します。
#input
import numpy as np
data = np.array([[111,222,333],
[444,555,666],
[777,888,999]])
std1 = np.std(data)
std2 = np.std(data,axis=0)
std3 = np.std(data,axis=1)
np.set_printoptions(precision=1)
print("全データの標準偏差:{:.1f}".format(std1))
print("列データの標準偏差:{}".format(std2))
print("行データの標準偏差:{}".format(std3))
#output
全データの標準偏差:286.6
列データの標準偏差:[271.9 271.9 271.9]
行データの標準偏差:[90.6 90.6 90.6]
numpy.nanstd()
NumPyのnumpy.nanstd()は、上でご紹介したnumpy.std()に加えて、nanデータを除外して計算できる関数です。
使用例を以下にご紹介します。
#input
import numpy as np
data = np.array([[111 ,np.nan ,333],
[np.nan ,555 ,666],
[777 ,888 ,np.nan]])
std1 = np.nanstd(data)
std2 = np.nanstd(data,axis=0)
std3 = np.nanstd(data,axis=1)
np.set_printoptions(precision=1)
print("全データの標準偏差:{:.1f}".format(std1))
print("列データの標準偏差:{}".format(std2))
print("行データの標準偏差:{}".format(std3))
#output
全データの標準偏差:264.2
列データの標準偏差:[333. 166.5 166.5]
行データの標準偏差:[111. 55.5 55.5]
まとめ
この記事では、Python基礎となる標準偏差について、ご説明しました。
本記事を参考に、ぜひ色々とトライしてみて下さい。
参考
Python学習用おすすめ教材
Pythonの基本を学びたい方向け
統計学基礎を学びたい方向け
Pythonの統計解析を学びたい方向け
おすすめプログラミングスクール
Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。
私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。
現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。
無料体験ができますので、まずは試してみてください!