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
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