【Python】 分散・標準偏差の求め方

■分散

データの散らばりの大きさを表す指標

(例)
データ:
「1, 2, 3, 4, 5」

平均:
(1 + 2 + 3 + 4 + 5) / 5 = 3

(平均 – 各データの値)の2乗:・・・・・・①
(3 – 1) 2 = 4
(3 – 2) 2 = 1
(3 – 3) 2 = 0
(3 – 4) 2 = 1
(3 – 5) 2 = 4

分散:上記①の和の平均
(4 + 1 + 0 + 1 + 4) / 5 = 2

■標準偏差

分散の正の平方根

(例)
標準偏差:(上記分散の値の平方根を算出する)
√2 = 1.41421356・・・・・・

■サンプルコード

# -*- Coding: UTF-8 -*-
import math

# 分散を算出する関数
def CalVariance(sample_data):
    #平均を算出
    average_val = sum(sample_data) / len(sample_data)

    # 合計値の初期化
    total = 0

    # データ分処理を繰り返す
    for i in sample_data:
        #(平均 - 各データの値)の2乗の和を求める・・・・・・①
        total = total + ((average_val - i) ** 2)

    # 分散:上記①の平均
    variance_val = total / len(sample_data)

    return variance_val

# 標準偏差を算出する関数
def CalStandardDev(sample_data):
    # 標準偏差:分散の正の平方根
    sd_val = math.sqrt(CalVariance(sample_data))

    return sd_val

############
# メイン処理
############

# データをリストに格納
sample_data = [100, 135, 98, 78, 231, 187, 164, 122]

variance_val = CalVariance(sample_data)
sd_val = CalStandardDev(sample_data)

print("分散:" + str(variance_val))
print("標準偏差:" + str(sd_val))

■実行結果

分散:2327.484375
標準偏差:48.24400869538103

■Numpyを使用して算出する

# -*- Coding: UTF-8 -*-
import numpy as np

# データをリストに格納
sample_data = [100, 135, 98, 78, 231, 187, 164, 122]

#numpyで算出
variance_val = np.var(sample_data)
sd_val = np.std(sample_data)

print("分散:" + str(variance_val))
print("標準偏差:" + str(sd_val))

■実行結果

分散:2327.484375
標準偏差:48.24400869538103

コメント