【初心者向け】Pythonで標準偏差を求める方法まとめ|statistics・NumPy・pandas別に解説!

python

データ分析の現場でよく使われる**「標準偏差(Standard Deviation)」

これは「データのちらばり具合(ばらつきの程度)」を数字で表したものです。平均値だけでは見えないデータの分布の広がり**を把握できます。

平均 → 中心の位置
標準偏差 → どれだけばらついているか

この記事では、Pythonで標準偏差を求める3つの方法(標準ライブラリ・NumPy・pandas)**をわかりやすく解説します!

スポンサーリンク

標準偏差とは?

定義(簡単に説明すると)

  • データの 平均値とのずれの平均をとり、平方根を取ったもの
  • 値が大きい → データがちらばっている
  • 値が小さい → データが平均に近くまとまっている

身近な例で理解しよう

例:テストの点数

  • クラスA:80点、82点、78点、81点、79点(平均80点)
  • クラスB:60点、70点、90点、100点、80点(平均80点)

どちらも平均は80点ですが、クラスAの方が点数がまとまっていて、クラスBの方がばらついています。この「ばらつき」を数字で表すのが標準偏差です。

Python標準ライブラリで標準偏差を求める(statistics)

基本的な使い方

import statistics

data = [10, 20, 30, 40, 50]
print(statistics.stdev(data))  # 15.811388300841896

2つの関数の違い

関数意味使う場面
statistics.stdev()標本の標準偏差(n-1で割る)全体の一部のデータを調べる時
statistics.pstdev()母集団の標準偏差(nで割る)全体のデータを調べる時

標本と母集団の違い

  • 母集団:調べたい全体のデータ(例:日本全国の中学生の身長)
  • 標本:母集団から一部を取り出したデータ(例:ある中学校の生徒の身長)

実際の分析では、全体のデータを集めるのは難しいので、標本の標準偏差(stdev)を使うことが多いです。

NumPyで標準偏差を求める(高速・大量データ向き)

基本的な使い方

import numpy as np

data = np.array([10, 20, 30, 40, 50])
print(np.std(data))            # 14.142135623730951(母集団の標準偏差)
print(np.std(data, ddof=1))    # 15.811388300841896(標本の標準偏差)

ddofパラメータとは?

ddof(Delta Degrees of Freedom)は「自由度の調整」を意味します。

  • ddof=0(デフォルト):母集団の標準偏差(nで割る)
  • ddof=1:標本の標準偏差(n-1で割る)

NumPyを使うメリット

  • 大量のデータを高速で処理できる
  • 多次元配列にも対応
  • 軸を指定して計算できる
# 2次元データの例
data_2d = np.array([[10, 20, 30], [40, 50, 60]])
print(np.std(data_2d, axis=0))  # 各列の標準偏差
print(np.std(data_2d, axis=1))  # 各行の標準偏差

pandasで標準偏差を求める(DataFrame向き)

基本的な使い方

import pandas as pd

df = pd.DataFrame({
    '点数': [80, 90, 85, 70, 75]
})

print(df['点数'].std())  # 8.366600265340756

pandasの特徴

  • 欠損値(NaN)は自動で無視される
  • グループごとの集計も簡単にできる
  • 標本の標準偏差(ddof=1)がデフォルト

グループごとの標準偏差

df = pd.DataFrame({
    'クラス': ['A', 'A', 'B', 'B', 'B'],
    '点数': [80, 90, 85, 70, 75]
})

print(df.groupby('クラス')['点数'].std())

標準偏差の使いどころ

実際の活用例

用途解釈
成績のばらつき分析平均点は同じでも、標準偏差が小さい方が成績が安定標準偏差が小さい = みんな同じくらいの点数
センサーデータの異常検知異常値を見つける指標になる標準偏差の2〜3倍以上離れた値は異常の可能性
データの信頼性判定偏差が大きい = 分布が広い、分析の精度に注意ばらつきが大きいと予測が難しい

具体的な例:テストの成績分析

import pandas as pd

# テストデータ
test_data = pd.DataFrame({
    'クラス': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
    '点数': [78, 80, 82, 79, 81, 60, 70, 90, 100, 80]
})

# クラス別の平均と標準偏差
result = test_data.groupby('クラス')['点数'].agg(['mean', 'std'])
print(result)

よくあるエラーと注意点

エラーと対処法

症状原因対処法
StatisticsError: variance requires at least two data pointsデータ数が1個しかないデータを2個以上用意する
NumPyで意図した結果が出ないddof の指定ミスddof=1 を指定して標本標準偏差にする
pandasで NaN が出る欠損値が含まれているdropna() で欠損値を除去するか、fillna() で補完

注意すべきポイント

1. ライブラリごとのデフォルト値の違い

  • statistics: 標本標準偏差
  • NumPy: 母集団標準偏差
  • pandas: 標本標準偏差

2. 欠損値の扱い

# 欠損値があるデータの例
import pandas as pd
import numpy as np

data_with_nan = pd.Series([10, 20, np.nan, 40, 50])
print(data_with_nan.std())  # 欠損値は自動で除外される

まとめ:標準偏差は「ばらつきの可視化」に欠かせない!

平均だけでは分からないデータの特徴も、標準偏差を使えば簡単に数値で表現可能です。

Pythonでは、statistics(軽量)・NumPy(高速)・pandas(表形式)といったライブラリで柔軟に計算できます。

本記事のまとめ表

方法関数特徴使う場面
statistics(標準)stdev() / pstdev()軽量、標準ライブラリ小規模データ
NumPynp.std()高速、大量データ対応数値計算メイン
pandasdf['列'].std()欠損値処理が自動データ分析・前処理

どれを選べばいい?

  • 初心者・小さなデータ → statistics
  • 大量データ・高速処理 → NumPy
  • CSV読み込み・データ分析 → pandas

標準偏差を理解すると、データの「見えない特徴」が数字で見えるようになります。

ぜひ実際のデータで試してみてください。

コメント

タイトルとURLをコピーしました