Python でパーセンタイルを計算する

Azaz Farooq 2023年1月30日
  1. Python でパーセンタイルを計算する scipy パッケージを使用する
  2. Python で NumPy パッケージを用いてパーセンタイルを計算する
  3. Python で math パッケージを用いてパーセンタイルを計算する
  4. statistics パッケージを用いた Python でパーセンタイルを計算する
  5. NumPy の線形補間法を用いて Python でパーセンタイルを計算する
  6. NumPy の下部補間法を用いた Python でのパーセンタイルの計算
  7. NumPy の高次補間法を使って Python でパーセンタイルを計算する
  8. NumPy の中点補間メソッドを使って Python でパーセンタイルを計算する
Python でパーセンタイルを計算する

パーセンタイルは、特定の値を下回るスコアの割合を示しています。例えば、IQ が 120 の人はパーセンタイルが 91 で、彼の IQ が他の人の 91%よりも高いことを意味します。

この記事では、Python でパーセンタイルを計算する方法をいくつか紹介します。

Python でパーセンタイルを計算する scipy パッケージを使用する

本パッケージは、入力系列のスコアを指定されたパーセンタイルで計算します。関数 scoreatpercentile() の構文は以下の通りです。

scipy.stats.scoreatpercentile(
    a, per, limit=(), interpolation_method="fraction", axis=None
)

関数 scoreatpercentile() のパラメータ a は 1 次元配列を表し、per は 0 から 100 までの範囲のパーセンタイルを指定します。他の 2つのパラメータはオプションです。パーセンタイルを計算した数値を取得するには NumPy ライブラリを使用します。

完全なサンプルコードを以下に示します。

from scipy import stats
import numpy as np

array = np.arange(100)

percentile = stats.scoreatpercentile(array, 50)

print("The percentile is:", percentile)

出力:

The percentile is: 49.5

Python で NumPy パッケージを用いてパーセンタイルを計算する

本パッケージには、与えられた配列のパーセンタイルを計算する percentile() 関数があります。関数 percentile() の構文は以下の通りです。

numpy.percentile(
    a,
    q,
    axis=None,
    out=None,
    overwrite_input=False,
    interpolation="linear",
    keepdims=False,
)

パラメータ q はパーセンタイルの計算数を表します。a は配列を表し、他のパラメータは任意です。

完全なサンプルコードを以下に示します。

import numpy as np

arry = np.array([4, 6, 8, 10, 12])

percentile = np.percentile(arry, 50)

print("The percentile is:", percentile)

出力:

The percentile is: 8.0

Python で math パッケージを用いてパーセンタイルを計算する

基本的な関数 ceil を持つ math パッケージは、異なるパーセンタイルを計算するのに用いることができます。

完全なサンプルコードを以下に示します。

import math

arry = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


def calculate_percentile(arry, percentile):
    size = len(arry)
    return sorted(arry)[int(math.ceil((size * percentile) / 100)) - 1]


percentile_25 = calculate_percentile(arry, 25)
percentile_50 = calculate_percentile(arry, 50)
percentile_75 = calculate_percentile(arry, 75)

print("The 25th percentile is:", percentile_25)
print("The 50th percentile is:", percentile_50)
print("The 75th percentile is:", percentile_75)

math.ceil(x) は値を丸めて x 以上の最小の整数を返し、sorted は配列をソートします。

出力:

The 25th percentile is: 3
The 50th percentile is: 5
The 75th percentile is: 8

statistics パッケージを用いた Python でパーセンタイルを計算する

データを等確率に分解して n-1 の分布リストを返すには、statistics パッケージの quantiles() 関数を用います。この関数の構文を以下に示します。

statistics.quantiles(data, *, n=4, method='exclusive')

完全なサンプルコードを以下に示します。

from statistics import quantiles

data = [1, 2, 3, 4, 5]

percentle = quantiles(data, n=4)

print("The Percentile is:", percentle)

出力:

The Percentile is: [1.5, 3.0, 4.5]

NumPy の線形補間法を用いて Python でパーセンタイルを計算する

補間モードを用いて異なるパーセンタイルを計算することができます。補間モードには linearlowowerhighermidpointnearest があります。これらの補間モードは、パーセンタイルが 2つのデータ点 ij の間にある場合に使用されます。パーセンタイル値が i の場合は低い補間モード、j の場合は高い補間モード、i + (j - i) * fraction は線形モードを表し、fractionij で囲まれたインデックスを示します。

線形補間モードの完全なサンプルコードを以下に示します。

import numpy as np

arry = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

print("percentiles using interpolation = ", "linear")

percentile_10 = np.percentile(arry, 10, interpolation="linear")
percentile_50 = np.percentile(arry, 50, interpolation="linear")
percentile_75 = np.percentile(arry, 75, interpolation="linear")

print(
    "percentile_10 = ",
    percentile_10,
    ", median = ",
    percentile_50,
    " and percentile_75 = ",
    percentile_75,
)

関数 numpy.percentile() を用いて、パラメータ interpolation を追加しています。この補間では浮動小数点型の値を取得していることがわかります。

出力:

percentiles using interpolation =  linear
percentile_10 =  1.9 , median =  5.5  and percentile_75 =  7.75

NumPy の下部補間法を用いた Python でのパーセンタイルの計算

下位補間モードの完全なサンプルコードを以下に示します。

import numpy as np

arry = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

print("percentiles using interpolation = ", "lower")

percentile_10 = np.percentile(arry, 10, interpolation="lower")
percentile_50 = np.percentile(arry, 50, interpolation="lower")
percentile_75 = np.percentile(arry, 75, interpolation="lower")

print(
    "percentile_10 = ",
    percentile_10,
    ", median = ",
    percentile_50,
    " and percentile_75 = ",
    percentile_75,
)

出力:

percentiles using interpolation =  lower
percentile_10 =  1 , median =  5  and percentile_75 =  7

最終的なパーセンタイルが最も低い値にルーデッドオフされていることがわかります。

NumPy の高次補間法を使って Python でパーセンタイルを計算する

このメソッドは、与えられた配列のパーセンタイルを、最も高い丸め込み値に与えます。

より高い補間モードの完全なサンプルコードを以下に示します。

import numpy as np

arry = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

print("percentiles using interpolation = ", "higher")

percentile_10 = np.percentile(arry, 10, interpolation="higher")
percentile_50 = np.percentile(arry, 50, interpolation="higher")
percentile_75 = np.percentile(arry, 75, interpolation="higher")

print(
    "percentile_10 = ",
    percentile_10,
    ", median = ",
    percentile_50,
    " and percentile_75 = ",
    percentile_75,
)

出力:

percentiles using interpolation =  higher
percentile_10 =  2 , median =  6  and percentile_75 =  8

NumPy の中点補間メソッドを使って Python でパーセンタイルを計算する

このメソッドは、パーセンタイル値の中点を与えます。

中点補間モードの完全なサンプルコードを以下に示します。

import numpy as np

arry = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

print("percentiles using interpolation = ", "midpoint")

percentile_10 = np.percentile(arry, 10, interpolation="midpoint")
percentile_50 = np.percentile(arry, 50, interpolation="midpoint")
percentile_75 = np.percentile(arry, 75, interpolation="midpoint")

print(
    "percentile_10 = ",
    percentile_10,
    ", median = ",
    percentile_50,
    " and percentile_75 = ",
    percentile_75,
)

出力:

percentiles using interpolation =  midpoint
percentile_10 =  1.5 , median =  5.5  and percentile_75 =  7.5

関連記事 - Python Math

関連記事 - Python NumPy