Pandas Series.quantile() 関数
Series.quantile()Pandas Series.quantile() 関数は、Series の分位数を計算するための Pandas の関数です。分位数は、順序付けられたデータをいくつかの等しい部分に分ける値であり、四分位数(25%、50%、75%)、中央値(50%)などがよく使われます。
分位数はデータ分布を説明する重要な指標であり、データの分布形状を理解し、外れ値を識別するのに役立ちます。統計分析、成績ランキング、収入分析などのシーンで広く応用されています。
基本構文とパラメータ
quantile()Series オブジェクトのメンバー関数であり、ドット演算子を使用して直接呼び出します。
構文形式
Series.quantile(q=0.5, interpolation='linear', numeric_only=True, closed='both')
パラメータの説明
| パラメータ | 型 | 説明 | デフォルト値 |
|---|---|---|---|
| q | float または array-like | 分位数の値。範囲は0から1です。単一の値または複数の値のリストを指定できます。 | 0.5 |
| interpolation | str | 分位数が2つの値の間にある場合の補間方法です。選択可能な値:'linear'、'lower'、'higher'、'nearest'、'midpoint'。 | 'linear' |
| numeric_only | bool | True の場合、数値型データのみを計算します。 | True |
| closed | str | DataFrame で使用し、区間の閉じ方を決定します。Series ではあまり使用されません。 | 'both' |
戻り値
- 戻り値の型:
float或Series - 説明指定された分位数の値を返します。q が単一の値の場合は float を返し、q がリストの場合は Series を返します。
実例
一連の簡単から複雑な例を通して、徹底的にSeries.quantile()その使い方をマスターしましょう。
例1:基本用法 - 中央値の計算
中央値は50%分位数であり、最もよく使われる分位数です。
実例
import pandas as pd
# 学生の成績を含む Series を作成する
scores = pd.Series([65, 70, 72, 75, 78, 80, 82, 85, 88, 90, 92, 95])
print("学生の成績:")
print(scores)
print()
# 中央値(50%分位数)を計算する
median_score = scores.quantile(0.5)
print(f"中央値:{median_score}")
print(f"median() 関数を使用:{scores.median()}")
print()
print("分析:50%の学生の成績は80点以下です。")
# 学生の成績を含む Series を作成する
scores = pd.Series([65, 70, 72, 75, 78, 80, 82, 85, 88, 90, 92, 95])
print("学生の成績:")
print(scores)
print()
# 中央値(50%分位数)を計算する
median_score = scores.quantile(0.5)
print(f"中央値:{median_score}")
print(f"median() 関数を使用:{scores.median()}")
print()
print("分析:50%の学生の成績は80点以下です。")
実行結果:
学生成绩: 0 65 1 70 2 72 3 75 4 75 5 80 6 80 7 85 8 88 9 90 10 92 11 95 dtype: int64 中位数:80.0 中位数(使用 median() 函数):80.0
コードの解説:
quantile(0.5)と同等ですmedian()。- 中央値はデータを2つに分け、50%のデータは中央値以下になります。
例2:四分位数の計算
四分位数はデータを4等分します:25%、50%、75%。
実例
import pandas as pd
# 従業員の収入を含む Series を作成する
income = pd.Series([3000, 3500, 3800, 4000, 4200, 4500, 5000, 5500, 6000, 8000, 15000])
print("従業員の月収データ(元):")
print(income)
print()
# 3つの四分位数を計算する
q1 = income.quantile(0.25) # 第1四分位数(25%)
q2 = income.quantile(0.50) # 第2四分位数/中央値(50%)
q3 = income.quantile(0.75) # 第3四分位数(75%)
print(f"第1四分位数 Q1(25%):{q1} 元")
print(f"第2四分位数 Q2(50%):{q2} 元")
print(f"第3四分位数 Q3(75%):{q3} 元")
print()
# 四分位範囲(IQR)を計算する
iqr = q3 - q1
print(f"四分位範囲 IQR:{iqr} 元")
print()
print("分析:")
print("- 25%の従業員の収入は4000元以下です")
print("- 50%の従業員の収入は5000元以下です")
print("- 75%の従業員の収入は6000元以下です")
print("- IQRが大きいほど、データがより分散していることを示します")
# 従業員の収入を含む Series を作成する
income = pd.Series([3000, 3500, 3800, 4000, 4200, 4500, 5000, 5500, 6000, 8000, 15000])
print("従業員の月収データ(元):")
print(income)
print()
# 3つの四分位数を計算する
q1 = income.quantile(0.25) # 第1四分位数(25%)
q2 = income.quantile(0.50) # 第2四分位数/中央値(50%)
q3 = income.quantile(0.75) # 第3四分位数(75%)
print(f"第1四分位数 Q1(25%):{q1} 元")
print(f"第2四分位数 Q2(50%):{q2} 元")
print(f"第3四分位数 Q3(75%):{q3} 元")
print()
# 四分位範囲(IQR)を計算する
iqr = q3 - q1
print(f"四分位範囲 IQR:{iqr} 元")
print()
print("分析:")
print("- 25%の従業員の収入は4000元以下です")
print("- 50%の従業員の収入は5000元以下です")
print("- 75%の従業員の収入は6000元以下です")
print("- IQRが大きいほど、データがより分散していることを示します")
実行結果:
员工月收入数据(元): 1 3000 2 低于 3800 3 4000 4 4200 5 4500 6 5000 7 5500 8 6000 9 8000 10 15000 dtype: int64 Q1(25% 分位):4000.0 元 Q2(50% 分位):5000.0 元 Q3(75% 分位):6000.0 元 四分位距 IQR = 6000 - 4000 = 2000 元
例3:複数の分位数を同時に計算する
複数の分位数を一度に計算できます。
実例
import pandas as pd
# データを作成する
data = pd.Series([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
print("データ:")
print(data)
print()
# 複数の分位数を計算する
percentiles = data.quantile([0, 0.1, 0.25, 0.5, 0.75, 0.9, 1.0])
print("各分位数:")
print(percentiles)
print()
# 分位数はパーセント文字列でも指定できます(単一の値のみ)
print(f"文字列 '50%' を使用:{data.quantile('50%')}")
print(f"文字列 '0.5' を使用:{data.quantile(0.5)}")
# データを作成する
data = pd.Series([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
print("データ:")
print(data)
print()
# 複数の分位数を計算する
percentiles = data.quantile([0, 0.1, 0.25, 0.5, 0.75, 0.9, 1.0])
print("各分位数:")
print(percentiles)
print()
# 分位数はパーセント文字列でも指定できます(単一の値のみ)
print(f"文字列 '50%' を使用:{data.quantile('50%')}")
print(f"文字列 '0.5' を使用:{data.quantile(0.5)}")
実行結果:
数据: 0 10 1 20 2 30 3 40 4 50 量值:60 5 70 6 80 7 90 8 100 dtype: int 参数 多个分位数: 0.00 10.0 0.10 19.0 0.25 32.5 0.50 50.0 0.75 67.5 0.90 81.0 1.00 100.0 dtype: float64
例4:interpolationパラメータの役割
分位数が2つの値の間にある場合、異なる補間方法によって異なる結果が得られます。
実例
import pandas as pd
# 6つの要素を含む Series を作成する
data = pd.Series([10, 20, 30, 40, 50, 60])
print("データ:", data.values)
print()
# 30%分位数を計算する(20と30の間にある)
# 位置 = (n-1) * q = 5 * 0.3 = 1.5
print("30%分位数、異なる補間方法を使用:")
linear = data.quantile(0.3, interpolation='linear')
print(f"linear(線形補間、デフォルト): {linear}")
lower = data.quantile(0.3, interpolation='lower')
print(f"lower(小さい方を取る): {lower}")
higher = data.quantile(0.3, interpolation='higher')
print(f"higher(大きい方を取る): {higher}")
nearest = data.quantile(0.3, interpolation='nearest')
print(f"nearest(最も近い値を取る): {nearest}")
midpoint = data.quantile(0.3, interpolation='midpoint')
print(f"midpoint(中間値を取る): {midpoint}")
# 6つの要素を含む Series を作成する
data = pd.Series([10, 20, 30, 40, 50, 60])
print("データ:", data.values)
print()
# 30%分位数を計算する(20と30の間にある)
# 位置 = (n-1) * q = 5 * 0.3 = 1.5
print("30%分位数、異なる補間方法を使用:")
linear = data.quantile(0.3, interpolation='linear')
print(f"linear(線形補間、デフォルト): {linear}")
lower = data.quantile(0.3, interpolation='lower')
print(f"lower(小さい方を取る): {lower}")
higher = data.quantile(0.3, interpolation='higher')
print(f"higher(大きい方を取る): {higher}")
nearest = data.quantile(0.3, interpolation='nearest')
print(f"nearest(最も近い値を取る): {nearest}")
midpoint = data.quantile(0.3, interpolation='midpoint')
print(f"midpoint(中間値を取る): {midpoint}")
実行結果:
数据:[10, 20, 30, 40, 50, 60] 位置计算:(n-1) * q = 5 * 0.3 = 1.5,表示在 20 和 30 之间 不同插值方法的结果: - linear(线性插值,默认):23.0 - lower(向下取整):20.0 - higher(向上取整):30.0 - nearest(最近邻):20.0 - midpoint(中间值):25.0
コードの解説:
interpolation='linear':2つの値の間で線形補間を行い、20 + (30-20)*0.5 = 23 となります。interpolation='lower':インデックスが小さい方の値、つまり20を取ります。interpolation='higher':インデックスが大きい方の値、つまり30を取ります。interpolation='nearest':分位数の位置に最も近い値を取ります。interpolation='midpoint':2つの値の中間値、つまり (20+30)/2 = 25 を取ります。
例5:分位数を使用して外れ値を識別する
四分位範囲(IQR)は、データ内の外れ値を識別するためによく使用されます。
実例
import pandas as pd
# 外れ値を含むデータを作成する
data = pd.Series([12, 15, 18, 20, 22, 25, 28, 30, 32, 150])
print("データ(外れ値を含む):")
print(data)
print()
# 四分位数を計算する
q1 = data.quantile(0.25)
q3 = data.quantile(0.75)
iqr = q3 - q1
# 外れ値の境界を計算する
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
print(f"Q1(25%):{q1}")
print(f"Q3(75%):{q3}")
print(f"IQR:{iqr}")
print()
print(f"正常値の下限:{lower_bound}")
print(f"正常値の上限:{upper_bound}")
print()
# 外れ値を識別する
outliers = data[(data upper_bound)]
print(f"外れ値:{outliers.values}")
print()
print("分析:150は明らかな外れ値であり、上限を超えています。")
# 外れ値を含むデータを作成する
data = pd.Series([12, 15, 18, 20, 22, 25, 28, 30, 32, 150])
print("データ(外れ値を含む):")
print(data)
print()
# 四分位数を計算する
q1 = data.quantile(0.25)
q3 = data.quantile(0.75)
iqr = q3 - q1
# 外れ値の境界を計算する
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
print(f"Q1(25%):{q1}")
print(f"Q3(75%):{q3}")
print(f"IQR:{iqr}")
print()
print(f"正常値の下限:{lower_bound}")
print(f"正常値の上限:{upper_bound}")
print()
# 外れ値を識別する
outliers = data[(data upper_bound)]
print(f"外れ値:{outliers.values}")
print()
print("分析:150は明らかな外れ値であり、上限を超えています。")
実行結果:
数据(含异常值): 3 150 4 22 5 25 6 28 7 30 8 32 9 150 dtype: int64 Q1(25%):18.75 Q3(75%):30.25 IQR = 11.5 正常值下界:1.5 正常值上界:47.5 异常值:150 分析:150 明显超出了正常范围,是一个异常值。
注意事項
- 分位数の値の範囲は0から1です。
- デフォルトでは線形補間(linear)メソッドを使用して分位数を計算します。
- q がリストの場合、戻り値は Series であり、単一の値ではありません。
- 分位数はデータ内の外れ値を識別するために使用でき、一般的な方法は IQR ルール(四分位範囲の1.5倍)です。
- 大量のデータに対して、分位数の計算効率は非常に高いです。
まとめ
Series.quantile()データ分布を分析するための重要な関数です。その主な特徴は次のとおりです。
- 任意の分位数(0から1の間)の計算をサポートします。
- 複数の分位数を一度に計算できます。
- 複数の補間方法を提供し、さまざまなニーズに対応します。
- 外れ値の識別に非常に役立ちます。
実際のデータ分析では、分位数はデータの分布形状を理解し、異なるデータセットを比較し、外れ値を識別するためによく使用されます。箱ひげ図と組み合わせると、データ分布をより直感的に表示できます。
その他の拡張
Pandas でよく使う関数