【std】numpyで標準偏差を求める方法を解説

Python

numpyのstd()関数を使用すると、配列の標準偏差を簡単に計算できます。基本的な使い方から軸指定、自由度調整、条件付き計算まで、実際のコード例とともに詳しく解説します。データ分析や統計処理でばらつきを把握したい方に役立つ内容です。

標準偏差とは

標準偏差は、データのばらつきを表す統計量です。データが平均値からどの程度散らばっているかを数値で示します。標準偏差が小さいほどデータは平均値の周りに集中しており、大きいほどデータは広く散らばっています。

計算例

データ[1, 3, 5]の標準偏差を求める場合は以下の手順です。

  1. 平均値:(1 + 3 + 5) ÷ 3 = 3
  2. 偏差の2乗:(1-3)² + (3-3)² + (5-3)² = 4 + 0 + 4 = 8
  3. 分散:8 ÷ 3 ≈ 2.67
  4. 標準偏差:√2.67 ≈ 1.63

numpyではnumpy.std()関数を使用して、配列の標準偏差を簡単に計算できます。

基本的な使い方

最もシンプルな標準偏差の計算方法を説明します。

import numpy as np

# 1次元配列の標準偏差を計算
data = np.array([1, 2, 3, 4, 5])
std_value = np.std(data)
print(std_value)
# 1.4142135623730951

2次元配列の場合、全要素の標準偏差が計算されます。

import numpy as np

# 2次元配列の標準偏差を計算
data_2d = np.array([[1, 2, 3], [4, 5, 6]])
std_value = np.std(data_2d)
print(std_value)
# 1.707825127659933

リストからnumpy配列を作成して標準偏差を計算することも可能です。

import numpy as np

# リストから標準偏差を計算
data_list = [10, 20, 30, 40, 50]
std_value = np.std(data_list)
print(std_value)
# 14.142135623730951

詳細な設定

軸の指定(axis)

axisパラメータは、多次元配列のどの軸に沿って標準偏差を計算するかを指定します。Noneの場合は全要素、0は行方向、1は列方向の標準偏差を計算します。

2次元配列の各列の標準偏差を計算する例です。

import numpy as np

# 2次元配列の各列の標準偏差を計算
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
std_cols = np.std(data, axis=0)
print(std_cols)
# [2.44948974 2.44948974 2.44948974]

2次元配列の各行の標準偏差を計算する例です。

import numpy as np

# 2次元配列の各行の標準偏差を計算
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
std_rows = np.std(data, axis=1)
print(std_rows)
# [0.81649658 0.81649658 0.81649658]

データ型の指定(dtype)

dtypeパラメータは、計算結果のデータ型を指定します。デフォルトではfloat64が使用されますが、メモリ使用量を抑えたい場合にfloat32を指定できます。

計算結果をfloat32型で取得する例です。

import numpy as np

# float32型で標準偏差を計算
data = np.array([1, 2, 3, 4, 5])
std_value = np.std(data, dtype=np.float32)
print(std_value)
# 1.4142135
print(type(std_value))
# <class 'numpy.float32'>

出力配列の指定(out)

outパラメータは、計算結果を格納する既存の配列を指定します。メモリ効率を向上させたい場合に使用します。

事前に用意した配列に結果を格納する例です。

import numpy as np

# 出力用の配列を事前に作成
data = np.array([[1, 2, 3], [4, 5, 6]])
result = np.empty(3)
np.std(data, axis=0, out=result)
print(result)
# [1.5 1.5 1.5]

自由度の調整(ddof)

ddofパラメータは、分散計算時の自由度調整を指定します。0(デフォルト)は母標準偏差、1は標本標準偏差を計算します。統計分析では通常1を使用します。

標本標準偏差を計算する例です。

import numpy as np

# 標本標準偏差を計算(ddof=1)
data = np.array([1, 2, 3, 4, 5])
population_std = np.std(data, ddof=0)  # 母標準偏差
sample_std = np.std(data, ddof=1)      # 標本標準偏差
print(f"母標準偏差: {population_std:.4f}")
# 母標準偏差: 1.4142
print(f"標本標準偏差: {sample_std:.4f}")
# 標本標準偏差: 1.5811

次元の保持(keepdims)

keepdims=Trueを指定すると、計算後も元の配列と同じ次元数を保持します。ブロードキャスト演算で元の配列と計算結果を組み合わせる際に便利です。

次元を保持して標準偏差を計算する例です。

import numpy as np

# 次元を保持して標準偏差を計算
data = np.array([[1, 2, 3], [4, 5, 6]])
std_normal = np.std(data, axis=1)
std_keepdims = np.std(data, axis=1, keepdims=True)
print(f"通常: {std_normal.shape}")
# 通常: (2,)
print(f"keepdims=True: {std_keepdims.shape}")
# keepdims=True: (2, 1)
print(std_keepdims)
# [[0.81649658]
#  [0.81649658]]

条件付き計算(where)

whereパラメータは、指定した条件を満たす要素のみを使用して標準偏差を計算します。特定の条件下でのデータ分析に使用します。

正の値のみを使用して標準偏差を計算する例です。

import numpy as np

# 正の値のみで標準偏差を計算
data = np.array([-2, -1, 0, 1, 2, 3, 4])
std_positive = np.std(data, where=(data > 0))
print(std_positive)
# 1.118033988749895

平均値の指定(mean)

meanパラメータは、標準偏差計算で使用する平均値を事前に指定します。既に平均値が分かっている場合の計算効率化に使用します。

事前に計算した平均値を使用する例です。

import numpy as np

# 事前に平均値を計算して指定
data = np.array([1, 2, 3, 4, 5])
pre_calculated_mean = 3.0
std_with_mean = np.std(data, mean=pre_calculated_mean)
print(std_with_mean)
# 1.4142135623730951

まとめ

numpyのstd()関数を使用することで、配列の標準偏差を簡単に計算できます。基本的な使い方ではnp.std(data)だけで標準偏差が求められ、多次元配列ではaxisパラメータで計算方向を指定できます。

統計分析ではddof=1で標本標準偏差を計算し、メモリ効率を重視する場合はdtypeoutパラメータを活用します。条件付き計算にはwhereパラメータが便利で、特定の条件を満たすデータのみで標準偏差を求められます。

これらの機能を組み合わせることで、様々なデータ分析シーンに対応した標準偏差の計算が可能になります。

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