quantileとは?分位点・四分位数の求め方をpandas・NumPyで解説

Pythonでデータ分析をしていると、「quantile」という関数やメソッドを見かけることがあります。
quantileは、データを小さい順に並べたとき、指定した割合の位置にある値(分位点)を求めるための機能です。
統計分析では、平均値だけでは分かりにくいデータのばらつきや分布を把握するために利用されます。特に、中央値や四分位数、外れ値の分析などで重要です。
この記事では、Pythonにおけるquantileについて、以下の内容を初心者向けに解説します。
-
quantileとは何か
-
Pythonで分位点を求める方法
-
NumPyの
quantile() -
pandasの
quantile() -
四分位数・中央値の求め方
-
複数の分位点を一度に求める方法
-
DataFrameでquantileを使う方法
-
外れ値の判定方法
-
実務での活用例
quantileとは?
quantile(クォンタイル)とは、日本語で「分位点」と呼ばれる統計量です。
データを小さい順に並べたとき、全体の何%の位置に相当する値なのかを表します。
例えば、次のデータがあるとします。
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
quantile(0.5)を求めると、データの50%地点、つまり中央値に相当する値を取得できます。
0% 50% 100%
|---------|---------|
10 55 100
Pythonでは、分位点を0~1の範囲で指定するのが一般的です。
| 指定値 | 意味 |
|---|---|
| 0 | 最小値 |
| 0.25 | 第1四分位数 |
| 0.5 | 中央値 |
| 0.75 | 第3四分位数 |
| 1 | 最大値 |
Pythonでquantileを使う方法
Pythonで分位点を求める場合、代表的なのが以下の2つです。
-
NumPyの
numpy.quantile() -
pandasの
Series.quantile()/DataFrame.quantile()
データ分析では、pandasを利用する機会が多いため、pandasのquantile()は特に重要です。
NumPyのquantile()とは?
NumPyでは、numpy.quantile()を使って分位点を計算できます。
基本構文は以下のとおりです。
numpy.quantile(a, q)
aには対象となるデータ、qには求めたい分位点を指定します。
基本的な使い方
import numpy as np
data = [10, 20, 30, 40, 50]
result = np.quantile(data, 0.5)
print(result)
実行結果:
30.0
0.5を指定しているため、中央値を求めています。
25%点を求める
25%地点の分位点を求めるには、0.25を指定します。
import numpy as np
data = [10, 20, 30, 40, 50]
result = np.quantile(data, 0.25)
print(result)
結果:
20.0
この値は第1四分位数(Q1)と呼ばれます。
75%点を求める
75%地点は0.75です。
import numpy as np
data = [10, 20, 30, 40, 50]
result = np.quantile(data, 0.75)
print(result)
結果:
40.0
これは第3四分位数(Q3)です。
NumPyで複数のquantileを求める
qにリストを指定すると、複数の分位点を一度に計算できます。
import numpy as np
data = [10, 20, 30, 40, 50]
result = np.quantile(data, [0.25, 0.5, 0.75])
print(result)
結果:
[20. 30. 40.]
これによって、
-
Q1 = 20
-
Q2 = 30
-
Q3 = 40
を一度に取得できます。
pandasのquantile()とは?
pandasでは、SeriesやDataFrameに対してquantile()を使用できます。
例えば、次のようなSeriesを作ります。
import pandas as pd
data = pd.Series([10, 20, 30, 40, 50])
print(data.quantile(0.5))
結果:
30.0
pandasでは、
Series.quantile()
という形で利用します。
pandasで中央値を求める
quantile(0.5)は中央値を求める処理として利用できます。
import pandas as pd
data = pd.Series([10, 20, 30, 40, 50])
median = data.quantile(0.5)
print(median)
結果:
30.0
なお、中央値だけであれば、pandasにはmedian()もあります。
median = data.median()
そのため、中央値を求めるだけならmedian()のほうが意図が分かりやすい場合があります。
四分位数を求める
quantileで特に重要なのが四分位数です。
データを4つのグループに分けるための境界値を四分位数と呼びます。
主に以下の3つを使用します。
-
第1四分位数(Q1)
-
第2四分位数(Q2)
-
第3四分位数(Q3)
Pythonでは次のように求められます。
import pandas as pd
data = pd.Series([10, 20, 30, 40, 50, 60, 70, 80])
q1 = data.quantile(0.25)
q2 = data.quantile(0.50)
q3 = data.quantile(0.75)
print("Q1:", q1)
print("Q2:", q2)
print("Q3:", q3)
まとめて四分位数を求める
以下のように書くと、Q1~Q3をまとめて取得できます。
quartiles = data.quantile([0.25, 0.5, 0.75])
print(quartiles)
出力例:
0.25 27.5
0.50 45.0
0.75 62.5
dtype: float64
データ分析では、この方法が非常に便利です。
DataFrameでquantileを使う
quantile()はDataFrameにも使用できます。
例えば、次のようなデータを作ります。
import pandas as pd
df = pd.DataFrame({
"数学": [60, 70, 80, 90, 100],
"英語": [50, 65, 75, 85, 95],
"国語": [55, 70, 80, 85, 90]
})
print(df.quantile(0.5))
結果は、各列について中央値が計算されます。
数学 80.0
英語 75.0
国語 80.0
つまり、DataFrameのquantile()では、列ごとの分位点を計算することができます。
DataFrameで四分位数をまとめて取得する
result = df.quantile([0.25, 0.5, 0.75])
print(result)
結果は次のような形式になります。
数学 英語 国語
0.25 70.0 65.0 70.0
0.50 80.0 75.0 80.0
0.75 90.0 85.0 85.0
行の0.25、0.5、0.75が、それぞれQ1、中央値、Q3を表します。
quantileとpercentileの違い
quantileと似た機能にpercentile(パーセンタイル)があります。
大きな違いは、指定する値の範囲です。
quantile
通常、0~1で指定します。
np.quantile(data, 0.25)
percentile
0~100で指定します。
np.percentile(data, 25)
つまり、
np.quantile(data, 0.25)
と
np.percentile(data, 25)
は、同じ25%地点を求める処理です。
quantileとmedianの違い
中央値を求めるだけなら、次の2つは同じ結果になります。
data.quantile(0.5)
data.median()
ただし、用途には違いがあります。
| メソッド | 用途 |
|---|---|
quantile(0.25) |
第1四分位数 |
quantile(0.5) |
中央値 |
quantile(0.75) |
第3四分位数 |
median() |
中央値 |
複数の分位点を分析したい場合はquantile()が便利です。
quantileを使った外れ値の判定
quantileは外れ値の検出にも利用できます。
代表的な方法が、四分位範囲(IQR)を使った方法です。
IQRは以下の式で求めます。
IQR = Q3 - Q1
Pythonでは次のように書けます。
q1 = df["数学"].quantile(0.25)
q3 = df["数学"].quantile(0.75)
iqr = q3 - q1
print(iqr)
さらに、一般的なルールでは以下の範囲を外れ値判定に利用します。
下限 = Q1 - 1.5 × IQR
上限 = Q3 + 1.5 × IQR
Pythonでは次のように実装できます。
q1 = df["数学"].quantile(0.25)
q3 = df["数学"].quantile(0.75)
iqr = q3 - q1
lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr
print("下限:", lower)
print("上限:", upper)
quantileで外れ値を抽出する
例えば、次のデータがあるとします。
import pandas as pd
df = pd.DataFrame({
"売上": [100, 120, 130, 140, 150, 160, 170, 1000]
})
1000が他の値と比較してかなり大きいため、外れ値の可能性があります。
四分位数を使って判定してみましょう。
q1 = df["売上"].quantile(0.25)
q3 = df["売上"].quantile(0.75)
iqr = q3 - q1
lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr
outliers = df[
(df["売上"] < lower) |
(df["売上"] > upper)
]
print(outliers)
このように、quantileはデータクレンジングにも活用できます。
quantileで上位10%・下位10%を調べる
quantileは「上位何%か」を分析するときにも便利です。
例えば、上位10%に入る境界値を求める場合は、
threshold = data.quantile(0.9)
print(threshold)
とします。
この値以上のデータを抽出すれば、上位10%程度のデータを調べられます。
top_10 = data[data >= data.quantile(0.9)]
print(top_10)
マーケティングデータや売上データなどで、上位顧客を分析するときにも利用できます。
quantileで欠損値がある場合
pandasのquantile()では、欠損値NaNを含むデータを扱うケースがあります。
例えば、
import pandas as pd
data = pd.Series([10, 20, 30, None, 50])
print(data.quantile(0.5))
このようなデータでも、通常は欠損値を除外して分位点が計算されます。
ただし、実際のデータ分析では、欠損値をどのように扱うかを事前に確認することが重要です。
quantileの補間方法
分位点を計算するとき、指定した位置がデータとデータの間になることがあります。
例えば、データ数が少ない場合などです。
NumPyやpandasでは、補間方法を指定できます。
NumPyではmethodを指定できます。
np.quantile(
data,
0.25,
method="linear"
)
データ分析で計算結果が想定と違う場合は、どの補間方法が採用されているかを確認するとよいでしょう。
quantileを使うときの注意点
1. quantileの指定値は0~1
quantile()では、基本的に次のように指定します。
data.quantile(0.25)
25%なので、
data.quantile(25)
としないように注意してください。
25%点を求めるなら0.25です。
2. percentileとは指定方法が異なる
percentileでは、
np.percentile(data, 25)
のように25を指定します。
一方、quantileでは、
np.quantile(data, 0.25)
です。
quantileは0~1、percentileは0~100と覚えておくと分かりやすいでしょう。
3. データの意味を確認する
quantileは単純に値を計算するだけでなく、「その分位点が何を意味するのか」を理解することが重要です。
例えば売上データの場合、
df["売上"].quantile(0.5)
は「売上の中央値」を意味します。
一方、
df["売上"].quantile(0.9)
は「売上データの90%地点の値」です。
NumPyとpandasのquantileの使い分け
NumPyとpandasのどちらでもquantileを計算できます。
| 項目 | NumPy | pandas |
|---|---|---|
| 関数 | np.quantile() |
Series.quantile() |
| DataFrame対応 | △ | ○ |
| 配列計算 | ○ | ○ |
| データ分析 | ○ | ◎ |
| 欠損値を含む表形式データ | △ | ◎ |
単純なNumPy配列の計算ならnp.quantile()、表形式のデータ分析ならpandasのquantile()が使いやすいでしょう。
quantileの実践例:売上データを分析する
最後に、実務を想定して売上データを分析してみましょう。
import pandas as pd
sales = pd.Series([
120000,
150000,
180000,
200000,
210000,
250000,
280000,
300000,
350000,
500000
])
print("25%:", sales.quantile(0.25))
print("50%:", sales.quantile(0.50))
print("75%:", sales.quantile(0.75))
print("90%:", sales.quantile(0.90))
このようにすると、売上データの分布を複数の視点から確認できます。
平均値だけを見るよりも、
-
下位25%の境界
-
中央値
-
上位25%の境界
-
上位10%の境界
などを確認できるため、データの特徴を把握しやすくなります。
Pythonのquantileまとめ
Pythonのquantileは、データの分布を把握するために重要な統計処理です。
特にpandasでは、
df["列名"].quantile(0.25)
のように簡単に第1四分位数を求められます。
代表的な指定値は以下のとおりです。
0 # 最小値
0.25 # 第1四分位数
0.5 # 中央値
0.75 # 第3四分位数
1 # 最大値
また、複数の分位点をまとめて取得することもできます。
df["売上"].quantile([0.25, 0.5, 0.75])
さらに、quantileは四分位範囲(IQR)を利用した外れ値検出や、上位10%・下位10%のデータ分析などにも応用できます。
Pythonでデータ分析や機械学習を行うのであれば、quantile()はぜひ覚えておきたいpandas・NumPyの基本機能の一つです。
pandas|集計・グループ化の関連記事
groupbyや各種集計関数で、データを要約する操作の記事です。
- Pandas & SciPyでトリム平均を算出!外れ値に強い統計量を使いこなす
- stack(), unstack(), pivot()で縦横無尽にデータを変換
- pandas transformとは?使い方をわかりやすく解説
- Pythonでデータを正規化・標準化!リスト、NumPy、Pandasでの実装を徹底解説
- cumsum(), cumprod(), cummax(), cummin()で系列データの変化を追跡
- DataFrame・Seriesを「順位付け」するrank()メソッドでランキングを生成
pandas全体の使い方は「pandasの使い方を初心者向けに解説」でまとめています。






