np.percentile() în NumPy

Calculează percentile (q între 0 și 100) cu np.percentile sau cuantile (q între 0 și 1) cu np.quantile.

Sintaxă
np.percentile(a, q, axis=None, method='linear', keepdims=False)
np.quantile(a, q, axis=None, method='linear', keepdims=False)

Ce face np.percentile()

Percentila q este valoarea sub care se află q% din date. Percentila 50 este mediana, iar percentilele 25 și 75 sunt quartilele. np.percentile() primește q între 0 și 100, iar np.quantile() face același calcul cu q între 0 și 1 (de exemplu 0.25).

q poate fi un singur număr sau o listă; pentru o listă primești un tablou cu câte o valoare pentru fiecare q. Când percentila cade între două valori, implicit (method='linear') se face interpolare liniară între ele. Alte metode, ca 'lower', 'higher' sau 'nearest', returnează o valoare existentă din date.

np.quantile() a apărut în NumPy 1.15; np.percentile() există de mult mai demult. Parametrul method a înlocuit vechiul interpolation în NumPy 1.22.

Parametri

Parametru Descriere
a Datele.
q Percentila (0–100) la percentile sau cuantila (0–1) la quantile; un număr sau o listă.
axis Axa pe care se calculează; None = tot tabloul.
method Cum se alege valoarea între două puncte: 'linear' (implicit), 'lower', 'higher', 'nearest', 'midpoint' și altele.
keepdims Păstrează axa calculată cu lungimea 1.

Ce returnează

Un scalar sau un tablou; dacă q este o listă, prima axă a rezultatului corespunde valorilor din q.

Exemple

Exemplul 1: Quartilele timpilor de livrare

import numpy as np

minute = np.array([22, 35, 28, 40, 31, 25, 50, 33, 29, 27])
q1, mediana, q3 = np.percentile(minute, [25, 50, 75])
print("Q1:", q1, "Mediana:", mediana, "Q3:", q3)
print("90% dintre livrări sub", np.percentile(minute, 90), "minute")

Rezultat

Q1: 27.25 Mediana: 30.0 Q3: 34.5
90% dintre livrări sub 41.0 minute

Exemplul 2: quantile și percentile dau același rezultat

import numpy as np

note = np.array([4, 5, 6, 7, 7, 8, 9, 10])
print(np.percentile(note, 25))
print(np.quantile(note, 0.25))
print(np.quantile(note, 0.25, method="lower"))

Rezultat

5.75
5.75
5

Exemplul 3: Percentile pe fiecare rând

Rândurile sunt Iași și Cluj; mediana se calculează separat pentru fiecare oraș.

import numpy as np

chirii = np.array([
    [1800, 2100, 2500, 1900, 3000],   # Iași
    [2600, 2900, 3500, 2700, 4200],   # Cluj
])
print(np.percentile(chirii, 50, axis=1))
print(np.quantile(chirii, [0.25, 0.75], axis=1))

Rezultat

[2100. 2900.]
[[1900. 2700.]
 [2500. 3500.]]

Greșeli frecvente

  • Dai lui np.quantile() valori între 0 și 100 (de exemplu 25): primești ValueError, pentru că acolo q trebuie să fie între 0 și 1.
  • Te aștepți ca percentila să fie mereu o valoare din date. Cu metoda implicită 'linear' se face interpolare; pentru o valoare existentă folosește method='lower' sau 'nearest'.
  • Folosești vechiul parametru interpolation=: este depreciat din NumPy 1.22. Folosește method=.

Comenzi înrudite

  • np.mean(): Calculează media aritmetică (np.mean), mediana (np.median) și media ponderată (np.average cu weights).
  • np.std(): Calculează abaterea standard (np.std) și varianța (np.var); ddof=0 pentru populație, ddof=1 pentru eșantion.
  • np.sort(): Sortează elementele unui tablou: np.sort returnează o copie, a.sort() sortează pe loc; ordinea descrescătoare cu [::-1].
  • np.nan și funcțiile nan*: Lucrul cu valori lipsă: np.nan, np.isnan și funcțiile nansum, nanmean, nanmin, nanmax care ignoră NaN.