データ分析の現場でよく使われる**「標準偏差(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() | 軽量、標準ライブラリ | 小規模データ |
NumPy | np.std() | 高速、大量データ対応 | 数値計算メイン |
pandas | df['列'].std() | 欠損値処理が自動 | データ分析・前処理 |
どれを選べばいい?
- 初心者・小さなデータ → statistics
- 大量データ・高速処理 → NumPy
- CSV読み込み・データ分析 → pandas
標準偏差を理解すると、データの「見えない特徴」が数字で見えるようになります。
ぜひ実際のデータで試してみてください。
コメント