用語比較
np.stdとpandasのstdの違い|ddofの既定値は0と1(Python3データ分析)
np.std は N で割る標準偏差(ddof=0)を返し、pandas の std は分母を N-1 にした値(ddof=1)を返します。割る数の既定値が違うと覚えると、同じデータで値が合わない理由がわかります。
計算の割る数は N - ddof で、ddof の既定値が np.std は 0、pandas の Series.std は 1 です。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。
np.stdとpandas の stdの要点
np.std
配列の標準偏差を返す。ddof の既定値は 0 で、割る数は N。N-1 で割りたいときは ddof=1 を渡す。
pandas の std
Series.std と DataFrame.std は、標本標準偏差を返す。ddof の既定値は 1 で、割る数は N-1。NA(欠損値)は既定で除外される。
違いを表で確認
| 比較軸 | np.std | pandas の std |
|---|---|---|
| ddof の既定値 | np.std は ddof=0。割る数は N | pandas の std は ddof=1。割る数は N-1 |
| 計算式 | 割る数は N - ddof。既定では N | 割る数は N - ddof。既定では N-1 |
| 欠損値(NA)の扱い | np.std の引数に skipna は無い | skipna=True が既定で、NA を除外して計算する |
| 同じ結果にする方法 | ddof=1 を渡すと、pandas の既定と同じ N-1 で割る | pandas公式は、numpy.std と同じ動きにするには ddof=0 と skipna=False を指定すると書いている |
Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
手計算や教科書の値と合わない人
標本標準偏差(N-1 で割る)を求めたいなら、np.std には ddof=1 を渡します。pandas の std は、何も渡さなくても N-1 で割ります。
母集団全体の標準偏差を求めたい人
N で割る値がほしいので、np.std は既定のままで使えます。pandas の std では ddof=0 を渡します。
NumPyとpandasの結果を突き合わせたい人
pandas公式の Notes にある通り、numpy.std と同じ動きにするには ddof=0 と skipna=False を指定します。どちらも既定値と違う点に注意してください。
具体例で使い分ける
例 1
pandas の std の既定値と ddof=0
pandas公式の例の s = pd.Series([1, 2, 3]) を見ます。
- 平均は 2 で、平均からの差の2乗は 1、0、1 です。2乗の合計は 2 になります。
- s.std() は N-1 = 2 で割るので、2 ÷ 2 = 1 の平方根で 1.0 です。
- s.std(ddof=0) は N = 3 で割るので、2 ÷ 3 の平方根で 0.816496580927726 です。
結論: 同じ3つの値でも、割る数が2か3かで 1.0 と 0.8165 に分かれます。
例 2
np.std の軸を指定した結果
NumPy公式の例の a = np.array([[1, 2], [3, 4]]) を見ます。
- np.std(a) は4つの値全体の標準偏差で、公式の例では 1.1180339887498949 です。
- np.std(a, axis=0) は列ごとに計算し、array([1., 1.]) になります。
- np.std(a, axis=1) は行ごとに計算し、array([0.5, 0.5]) になります。
結論: axis を省くと全体で、axis を指定するとその軸に沿って計算します。割る数は、どちらも既定で N です。
例 3
NumPy で N-1 の値を出す
上の pandas の例と同じ [1, 2, 3] を、NumPy で計算する場合を考えます。
- np.std は ddof の既定値が 0 なので、np.std([1, 2, 3]) は N = 3 で割った値になります。
- NumPy公式は、N-1 で割る標準偏差を求めたいときは ddof=1 を使うと説明しています。
- np.std([1, 2, 3], ddof=1) は、pandas の s.std() と同じ 1.0 になります。
結論: NumPy でも ddof=1 を渡せば、pandas の既定と同じ N-1 で割る値になります。
問題文から答えを選ぶ手順
- 1
何を求めたいかを決める
手元のデータが全体そのものなら N で割る値、標本なら N-1 で割る値を使います。
- 2
使うライブラリの既定値を確かめる
np.std は ddof=0、pandas の std は ddof=1 が既定です。
- 3
必要なら ddof を明示する
どちらで計算しても同じ値にしたいときは、ddof を自分で書きます。
試験での見分け方
- 1np.std の既定は ddof=0 で、N で割る。
- 2pandas の std の既定は ddof=1 で、N-1 で割る。
- 3N-1 で割る値を np.std で求めるには ddof=1 を渡す。
- 4pandas の std で N で割るには ddof=0 を渡す。
誤答しやすい選択肢
NumPyもpandasも同じ既定値だと考える
修正: np.std は ddof=0、pandas の std は ddof=1 です。同じデータでも、何も渡さないと結果が変わります。
ddof は「自由度」そのものだと考える
修正: ddof は Delta Degrees of Freedom(自由度の差)で、割る数を N - ddof にするための値です。
ddof=0 だけで pandas を numpy.std と一致させられると考える
修正: pandas公式は、numpy.std と同じ動きにするには ddof=0 に加えて skipna=False も指定すると書いています。
確認問題
Q1np.std の ddof の既定値は?
答え: 0
NumPy公式のリファレンスに By default ddof is zero. と書かれています。割る数は N です。
Q2pd.Series([1, 2, 3]).std() の結果は?
答え: 1.0
pandas の std は既定で N-1 = 2 で割ります。平均からの差の2乗の合計は 2 なので、2 ÷ 2 = 1 の平方根で 1.0 です。
Q3pd.Series([1, 2, 3]).std(ddof=0) の結果は?
答え: 0.816496580927726
N = 3 で割るので、2 ÷ 3 の平方根になります。pandas公式の例と同じ値です。
Q4np.std で N-1 で割る標準偏差を求めるには?
答え: ddof=1 を渡す
割る数が N - ddof になるため、ddof=1 で N-1 になります。
到達チェック
- np.std と pandas の std の ddof の既定値を言える
- 割る数が N - ddof になることを説明できる
- [1, 2, 3] の標準偏差が 1.0 と 0.8165 に分かれる理由を言える
- pandas の結果を numpy.std に合わせる指定を答えられる
関連ページで確認する
同じ資格で次に知りたいこと
- np.concatenateとnp.stackの違い|既存の軸につなぐか、新しい軸を作るか(Python3データ分析)
NumPyのnp.concatenate(既存の軸に沿って結合)とnp.stack(新しい軸に沿って結合)の違いを、結果の次元数、入力の形の条件、axis引数の意味で整理します。NumPy公式リファレンスの例のnp.stack((a, b))が2行3列になる計算つきです。
- np.arangeとnp.linspaceの違い|刻み幅で指定するか、点の数で指定するか(Python3データ分析)
NumPyのnp.arange(刻み幅を指定)とnp.linspace(要素の数を指定)の違いを、終点を含むか、小数の刻みでの要素数、戻り値の型で整理します。NumPy公式リファレンスとQuickstartの例で照合した、arange(3, 7, 2)とlinspace(2.0, 3.0, num=5)の結果つきです。
- np.ravelとflattenの違い|必要なときだけコピーするか、常にコピーを返すか(Python3データ分析)
NumPyのnp.ravel(コピーは必要なときだけ)とndarray.flatten(常にコピーを返す)の違いを、戻り値、order引数、元の配列への影響で整理します。NumPy公式リファレンスの例のnp.ravel(x, order='F')が[1, 4, 2, 5, 3, 6]になる計算つきです。
よくある質問
Qnp.stdとpandasのstdの違いは?
割る数の既定値です。np.std は ddof=0 で N、pandas の std は ddof=1 で N-1 で割ります。
Qnp.std で標本標準偏差を求めるには?
ddof=1 を渡します。NumPy公式は、N-1 で割る値を求めるには ddof=1 を使うと書いています。
Qpandasの結果をnumpy.stdと合わせるには?
pandas公式のNotesでは、ddof=0 と skipna=False を指定します。
Qデータ分析試験の範囲?
本サイトの第3章 NumPy と第4章 pandas で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
