2種類の標準偏差とpandasのデフォルトの標準偏差について

標準偏差には「標本標準偏差」と「母標準偏差」の2種類があります。pandasではどちらも計算できますが、デフォルトでは標本標準偏差が使われます。 標本標準偏差と母標準偏差の違いを下記のdfを使って説明します。

import pandas as pd

df = pd.DataFrame(
    [["Alice", 17], ["Bob", 24], ["Carol", 29]],
    columns=["Name", "Age"],
)
df
Name Age
0 Alice 17
1 Bob 24
2 Carol 29

Ageの標準偏差は、df.Age.std()で計算できます。 これは、標本標準偏差(不偏分散の正の平方根)です。標本標準偏差とは、列Ageの元になる母集団の標準偏差の推定値です。たとえば、ある町に住む人を母集団とし、列Ageをサンプリングした標本とすると、標本標準偏差は町に住む人の標準偏差です。 標本標準偏差は、statisticsモジュールを使って以下のように計算できます。

from statistics import stdev

print(stdev(df.Age))  # 6.027713773341707

※ 母集団や標本については、「確率と統計 - PyQドキュメント」を参照ください。

参考

単に列Ageの標準偏差というと、列Ageの3人の標準偏差になります。この標準偏差を標本標準偏差と区別するために母標準偏差と呼ぶこともあります。 母標準偏差は、以下のように計算できます。

from statistics import pstdev

print(pstdev(df.Age))  # 4.9216076867444665

参考:標準偏差 | 統計用語集 | 統計WEB

pandasで標本標準偏差や母標準偏差を計算したいときは、以下のようにします。引数ddof=0で母標準偏差になります。ddofのデフォルトは1でこのとき標本標準偏差になります。describe()中のstdでも、ddofはデフォルトの1であり、標本標準偏差を出力しています。

print(df.Age.std())  # 標本標準偏差
print(df.Age.std(ddof=0))  # 母標準偏差
6.027713773341707
4.9216076867444665

pandasのベースになっているNumPyでは、以下のように引数ddofのデフォルトが0になっています。pandasとNumPyではstd()の引数を省略したときの値が異なるので注意しましょう。

import numpy as np

print(np.std(df.Age, ddof=1))  # 標本標準偏差
print(np.std(df.Age))  # 母標準偏差
6.027713773341707
4.9216076867444665
当コンテンツの知的財産権は株式会社ビープラウドに所属します。詳しくは利用規約をご確認ください。