API · SciPy
SciPy stats.zscore 関数
このチュートリアルでは、Python で Scipy モジュールを使用して、統計 z スコア関数とは何かを説明します。
このページの内容
z スコアは、データの平均からの距離を標準偏差の単位で測ることで値を標準化します。
z = (X - μ) / σ
ここで、X は値、μ は平均、σ は標準偏差です。z スコアは、値が平均からどれだけ離れているかを表し、同じ尺度で観測値を比較するのに役立ちます。このガイドでは、SciPy を使って配列と pandas DataFrame の z スコアを計算する方法を示します。
scipy.stats.zscore を使用する
scipy.stats.zscore 関数は、配列のような入力から、その平均と標準偏差を使用して標準化されたスコアを計算します。呼び出しシグネチャは scipy.stats.zscore(a, axis=0, ddof=0, nan_policy='propagate') です。
| パラメーター | 目的 |
|---|---|
a |
観測値を含む、必須の配列のような入力。 |
axis |
平均と標準偏差を計算する軸。デフォルトは 0 で、1 次元配列ではすべての値を使用し、多次元配列では軸 0 に沿って個別に計算します。すべての値をまとめて計算するには axis=None を使用します。 |
ddof |
標準偏差の計算で使用されるデルタ自由度。デフォルトの 0 は母標準偏差を使用します。標本標準偏差には ddof=1 を設定します。 |
nan_policy |
NaN 値の扱いを制御します。propagate(デフォルト)は NaN がその計算軸に沿って結果に影響することを許可し、raise は NaN が存在するとエラーを報告し、omit は NaN を計算から除外し、その出力位置を NaN のままにします。 |
必須なのは a のみです。各行、各列、または入力全体のどれで平均と標準偏差を共有するかに応じて axis を選択します。
1 次元配列の z スコアを計算する
1 次元配列では、デフォルトの axis=0 が値の全集合を使用します。NumPy と SciPy をインストールして、この例を実行します。
import numpy as np
from scipy import stats
values = np.array([10, 20, 30, 40, 50])
scores = stats.zscore(values)
print(np.round(scores, 3))
この例は実行可能なコードとして提供されています。その出力はこの執筆ステップでは実行されていません。負のスコアは値が平均より下にあることを意味し、正のスコアは値が平均より上にあることを意味し、ゼロのスコアは平均を示します。大きさは標準偏差の単位での距離を与えます。
多次元配列の z スコアを計算する
2 次元配列では、デフォルトの axis=0 が各列のスコアを行方向に計算します。結果は入力の形状を保ちます。各行ごとに個別に計算するには axis=1 を渡し、配列全体で 1 つの平均と標準偏差を使用するには axis=None を渡します。
import numpy as np
from scipy import stats
data = np.array([[1, 10], [2, 20], [3, 30]])
scores = stats.zscore(data, axis=0)
print(np.round(scores, 3))
このコードは列ごとの標準化を示すもので、ここでは実行されていません。出力は主張されません。
pandas DataFrame の z スコアを計算する
DataFrame.apply() はデフォルトで各列に関数を適用します(axis=0)。このように stats.zscore を適用すると、各列が独立に標準化されます。この固定された DataFrame により、入力が再現可能になります。
import pandas as pd
from scipy import stats
data = pd.DataFrame({"height": [150, 160, 170], "weight": [50, 60, 70]})
scores = data.apply(stats.zscore)
print(scores.round(3))
この例はここでは実行されていないため、表示される結果は主張されません。各列には独自の平均と標準偏差があります。各行方向に計算したい場合は、代わりに data.apply(stats.zscore, axis=1) を使用します。