Pandas Series.std() 関数
Series.std()Pandas で Series の標準偏差を計算するための関数です。標準偏差はデータの散らばり度合いを測定する指標で、データとその平均値との間の平均的な偏差の程度を表します。
標準偏差が大きいほど、データが分散していることを示し、標準偏差が小さいほど、データが集中していることを示します。品質管理、リスク評価、試験成績の分析などの場面でよく使用されます。
基本構文とパラメータ
std()Series オブジェクトのメンバー関数であり、ドット演算子で直接呼び出します。
構文形式
Series.std(axis=None, skipna=True, level=None, numeric_only=None, ddof=1, **kwargs)
パラメータの説明
| パラメータ | 型 | 説明 | デフォルト値 |
|---|---|---|---|
| axis | int | 軸を指定します。Series は1行のデータのみを持つため、このパラメータは主に DataFrame との互換性のためのものです。 | None |
| skipna | bool | True の場合、計算時に NaN 値をスキップします。False の場合、NaN に遭遇すると結果は NaN を返します。 | True |
| level | int または str | Series が MultiIndex(階層型インデックス)の場合、計算する階層を指定します。 | None |
| numeric_only | bool | True の場合、数値型データのみに対して計算します。それ以外の場合は数値への変換を試みます。 | False |
| ddof | int | 自由度調整パラメータです。ddof=1 は標本標準偏差(n-1)を使用し、ddof=0 は母標準偏差(n)を使用します。 | 1 |
戻り値
- 戻り値の型:
float - 説明:Series の要素の標準偏差を返します。デフォルトでは標本標準偏差(n-1 で除算)を使用します。
例
簡単なものから複雑なものまでの一連の例を通して、完全に習得しましょう。Series.std()の使い方。
例1:基本的な使い方 - 標準偏差の概念を理解する
標準偏差はデータのばらつきの程度を測定し、値が大きいほどデータが分散していることを示します。
例
import pandas as pd
import numpy as np
# 2つのグループの成績データ
# Aグループ:成績が比較的集中している
group_a = pd.Series([85, 86, 87, 88, 89])
# Bグループ:成績が比較的分散している
group_b = pd.Series([70, 75, 85, 95, 100])
print(Aグループの成績(比較の集中):)
print(group_a)
print(f"平均値:{group_a.mean():.2f}")
print(f"標準偏差:{group_a.std():.2f}")
print()
print(Bグループの成績(比較の分散):)
print(group_b)
print(f"平均値:{group_b.mean():.2f}")
print(f"標準偏差:{group_b.std():.2f}")
print()
print("分析:2つのグループの平均値は同じ(85)ですが、Bグループの標準偏差がより大きく、成績の差がより大きいことを示しています。")
import numpy as np
# 2つのグループの成績データ
# Aグループ:成績が比較的集中している
group_a = pd.Series([85, 86, 87, 88, 89])
# Bグループ:成績が比較的分散している
group_b = pd.Series([70, 75, 85, 95, 100])
print(Aグループの成績(比較の集中):)
print(group_a)
print(f"平均値:{group_a.mean():.2f}")
print(f"標準偏差:{group_a.std():.2f}")
print()
print(Bグループの成績(比較の分散):)
print(group_b)
print(f"平均値:{group_b.mean():.2f}")
print(f"標準偏差:{group_b.std():.2f}")
print()
print("分析:2つのグループの平均値は同じ(85)ですが、Bグループの標準偏差がより大きく、成績の差がより大きいことを示しています。")
実行結果:
A组成绩(较集中): 0 85 1 86 2 87 3 88 4 89 dtype: int64 平均值:85.00 标准差:1.58 B组成绩(较分散): 0 70 1 75 2 85 3 95 4 100 dtype: int64 平均值:85.00 标准差:12.50 分析:虽然两组平均值相同(85),但 B 组标准差更大,说明成绩差异更大。
コードの解説:
- Aグループの成績の標準偏差は約1.58で、非常に集中しています。
- Bグループの成績の標準偏差は約12.50で、ばらつきの程度がはるかに大きいです。
- これは、平均値が同じでも、データの分布の形状がまったく異なる可能性があることを示しています。
例2:ddof パラメータの役割
ddofこのパラメータは、標本標準偏差を使用するか母標準偏差を使用するかを制御します。
例
import pandas as pd
import numpy as np
# データセットを作成する
data = pd.Series([2, 4, 4, 4, 5, 5, 7, 9])
print("データ:")
print(data)
print()
# デフォルトの ddof=1 は標本標準偏差を使用(n-1 で除算)
sample_std = data.std(ddof=1)
print(f"標本標準偏差(ddof=1):{sample_std:.4f}")
# ddof=0 は母標準偏差を使用(n で除算)
population_std = data.std(ddof=0)
print(f"母標準偏差(ddof=0):{population_std:.4f}")
print()
print("説明:")
print("標本標準偏差 = sqrt(sum((x-mean)^2) / (n-1))")
print("母標準偏差 = sqrt(sum((x-mean)^2) / n)")
print("データ量が大きい場合、両者の差は非常に小さくなります。")
import numpy as np
# データセットを作成する
data = pd.Series([2, 4, 4, 4, 5, 5, 7, 9])
print("データ:")
print(data)
print()
# デフォルトの ddof=1 は標本標準偏差を使用(n-1 で除算)
sample_std = data.std(ddof=1)
print(f"標本標準偏差(ddof=1):{sample_std:.4f}")
# ddof=0 は母標準偏差を使用(n で除算)
population_std = data.std(ddof=0)
print(f"母標準偏差(ddof=0):{population_std:.4f}")
print()
print("説明:")
print("標本標準偏差 = sqrt(sum((x-mean)^2) / (n-1))")
print("母標準偏差 = sqrt(sum((x-mean)^2) / n)")
print("データ量が大きい場合、両者の差は非常に小さくなります。")
実行結果:
数据: 0 2 1 4 2 4 3 4 4 5 5 5 6 7 7 9 dtype: int64 样本标准差(ddof=1):2.2678 总体标准差(ddof=0):2.1213
コードの解説:
- 標本標準偏差(ddof=1)は n-1 を除数として使用し、母集団から抽出した標本に適用されます。
- 母標準偏差(ddof=0)は n を除数として使用し、データセット全体に適用されます。
- Pandas はデフォルトで ddof=1、つまり標本標準偏差を使用します。
例3:欠損値を含むデータの処理
例
import pandas as pd
import numpy as np
# 欠損値を含む Series を作成する
data_with_nan = pd.Series([10, 20, np.nan, 30, 40, np.nan, 50])
print("欠損値を含むデータ:")
print(data_with_nan)
print()
# デフォルトの skipna=True は NaN をスキップして標準偏差を計算
std_skipna = data_with_nan.std()
print(f"skipna=True(デフォルト)の場合の標準偏差:{std_skipna:.4f}")
# skipna=False を設定
std_no_skipna = data_with_nan.std(skipna=False)
print(f"skipna=False の場合の標準偏差:{std_no_skipna}")
import numpy as np
# 欠損値を含む Series を作成する
data_with_nan = pd.Series([10, 20, np.nan, 30, 40, np.nan, 50])
print("欠損値を含むデータ:")
print(data_with_nan)
print()
# デフォルトの skipna=True は NaN をスキップして標準偏差を計算
std_skipna = data_with_nan.std()
print(f"skipna=True(デフォルト)の場合の標準偏差:{std_skipna:.4f}")
# skipna=False を設定
std_no_skipna = data_with_nan.std(skipna=False)
print(f"skipna=False の場合の標準偏差:{std_no_skipna}")
実行結果:
包含缺失值的数据: 0 10.0 1 20.0 2 NaN 3 30.0 4 40.0 5 NaN 6 50.0 dtype: float64 skipna=True(默认)时的标准差:15.8114 skipna=False 时的标准差:nan
例4:実際の応用 - 株式収益率の変動分析
標準偏差は金融分野でリスクを測定するために一般的に使用されます。
例
import pandas as pd
# 2つの銘柄の10日間の日次収益率(%)をシミュレーション
stock_a = pd.Series([1.2, 0.8, -0.5, 1.5, 0.3, -0.2, 1.0, 0.7, -0.3, 0.5])
stock_b = pd.Series([3.5, -2.0, 4.2, -1.5, 2.8, -3.0, 1.2, -0.8, 3.0, -2.4])
print("銘柄Aの日次収益率(%):")
print(stock_a)
print(f"平均収益率:{stock_a.mean():.2f}%")
print(f"ボラティリティ(標準偏差):{stock_a.std():.2f}%")
print()
print("銘柄Bの日次収益率(%):")
print(stock_b)
print(f"平均収益率:{stock_b.mean():.2f}%")
print(f"ボラティリティ(標準偏差):{stock_b.std():.2f}%")
print()
print("分析:")
print("銘柄Bの標準偏差がより大きく、収益率の変動がより激しく、リスクがより高いことを示しています。")
print("両者の平均収益率は近い可能性がありますが、リスクの程度は異なります。")
# 2つの銘柄の10日間の日次収益率(%)をシミュレーション
stock_a = pd.Series([1.2, 0.8, -0.5, 1.5, 0.3, -0.2, 1.0, 0.7, -0.3, 0.5])
stock_b = pd.Series([3.5, -2.0, 4.2, -1.5, 2.8, -3.0, 1.2, -0.8, 3.0, -2.4])
print("銘柄Aの日次収益率(%):")
print(stock_a)
print(f"平均収益率:{stock_a.mean():.2f}%")
print(f"ボラティリティ(標準偏差):{stock_a.std():.2f}%")
print()
print("銘柄Bの日次収益率(%):")
print(stock_b)
print(f"平均収益率:{stock_b.mean():.2f}%")
print(f"ボラティリティ(標準偏差):{stock_b.std():.2f}%")
print()
print("分析:")
print("銘柄Bの標準偏差がより大きく、収益率の変動がより激しく、リスクがより高いことを示しています。")
print("両者の平均収益率は近い可能性がありますが、リスクの程度は異なります。")
実行結果:
股票 A 日收益率(%): 0 1.2 1 0.8 2 -0.5 3 1.5 4 0.3 5 -0.2 6 1.0 7 0.7 8 -0.3 9 0.5 dtype: int64 平均收益率:0.60% 波动率(标准差):0.68% 股票 B 日收益率(%): 0 3.5 1 -2.0 2 4.2 3 -1.5 4 2.8 5 -3.0 6 1.2 7 -0.8 8 3.0 9 -2.4 dtype: int64 平均收益率:0.60% 波动率(标准差):2.59% 分析:股票 B 的波动率是股票 A 的约 4 倍,说明风险高得多。
注意事項
- デフォルトでは標本標準偏差(ddof=1)を使用し、統計分析に適しています。
- 母標準偏差を計算する必要がある場合は、ddof=0 を設定します。
- 標準偏差の単位は元のデータと同じであるため、直感的に理解しやすいです。
- 標準偏差が大きいほど、データが分散していることを示し、標準偏差が小さいほど、データが集中していることを示します。
まとめ
Series.std()は、データのばらつきの程度を測定する重要な関数です。その主な特徴は次のとおりです:
- デフォルトで標本標準偏差(ddof=1)を使用するため、統計分析により適しています。
- と組み合わせて
mean()使用することで、データの分布特性を包括的に記述できます。 - 金融分野では、標準偏差はリスク(ボラティリティ)を測定するためによく使用されます。
- 標準偏差の2乗が分散です(
var())。
実際のデータ分析では、標準偏差は平均値、中央値などの指標と組み合わせて使用され、データ分布の完全な理解を形成します。
その他の拡張
Pandas のよく使う関数