【Pythonデータサイエンス入門】統計における「分散」を求める ~数値データのばらつき~

環境

macOS Sierra 10.12.6
ターミナル
Anaconda
Python 3.6.4

Anacondaをインストールすればデータサイエンスに必要なライブラリが使えるので、
ぜひインストールしましょう。

Anacondaのインストール手順についてはこちら
MacにAnacondaをインストールする

「分散」を求める

分散を求めるPythonコードは以下のような感じです。
不偏分散です。

不偏分散はなぜn-1で割るのかということは割愛します。

from statistics import mean  # mean()を使うためインポート


def de_mean(x):
    # mean(x)はxの平均を出す
    # mean([1, 2, 3, 4, 5])は3となる
    x_bar = mean(x)  # x_barにはxの平均が入る
    return [x_i - x_bar for x_i in x]  # 要素と平均の差を格納したリストを返す


def sum_of_squares(n):
    return sum(i**2 for i in n)  # リストの要素の2乗を返す


def variance(x):
    n = len(x)
    deviations = de_mean(x)
    # nではなくn-1で割る。詳しくは不偏分散で検索。
    return sum_of_squares(deviations) / (n - 1)

実行してみましょう。

>>> import variance
>>> a_class = [150, 160, 170, 175, 180]
>>> b_class = [130, 140, 150, 160, 170]
>>> variance.variance(a_class)  # A組の身長の分散
145.0
>>> variance.variance(b_class)  # B組の身長の分散
250.0

# B組のほうが身長差のバラつきが大きい