Gibt es eine bequeme Möglichkeit, Perzentile für eine Sequenz oder ein eindimensionales Numpy-Array zu berechnen?
Ich suche etwas Ähnliches wie die Perzentilfunktion von Excel.
Ich habe in NumPys Statistikreferenz nachgesehen und konnte dies nicht finden. Ich konnte nur den Median (50. Perzentil) finden, aber nichts Spezifischeres.
Antworten:
Das SciPy Stats- Paket könnte Sie interessieren . Es hat die Perzentilfunktion, nach der Sie suchen, und viele andere statistische Extras.
percentile()
ist auch in verfügbarnumpy
.Dieses Ticket lässt mich glauben, dass sie sich nicht so schnellpercentile()
in Numpy integrieren werden.quelle
df.groupby('key')[['value']].agg(lambda g: np.percentile(g, 10))
Übrigens gibt es eine reine Python-Implementierung der Perzentilfunktion , falls man sich nicht auf scipy verlassen möchte. Die Funktion wird unten kopiert:
quelle
percentile
, wofür man es verwenden sollN
? Es ist im Funktionsaufruf nicht angegeben.N
bevor Sie ein Perzentil berechnen. Angenommen, Sie haben tatsächlich eine Liste von TupelnN = [(1, 2), (3, 1), ..., (5, 1)]
und möchten das Perzentil des ersten Elements der Tupel erhalten, dann wählen Siekey=lambda x: x[0]
. Sie können auch einige (in der Reihenfolge ändernde) Transformationen auf die Listenelemente anwenden, bevor Sie ein Perzentil berechnen.quelle
Hier erfahren Sie, wie Sie dies ohne Numpy tun, indem Sie nur Python verwenden, um das Perzentil zu berechnen.
quelle
Die Definition des Perzentils, die ich normalerweise sehe, erwartet als Ergebnis den Wert aus der angegebenen Liste, unter dem P Prozent der Werte gefunden werden ... was bedeutet, dass das Ergebnis aus der Menge stammen muss, nicht aus einer Interpolation zwischen Mengenelementen. Um dies zu erreichen, können Sie eine einfachere Funktion verwenden.
Wenn Sie lieber den Wert aus der angegebenen Liste erhalten möchten, bei oder unter dem P Prozent der Werte gefunden werden, verwenden Sie diese einfache Änderung:
Oder mit der von @ijustlovemath vorgeschlagenen Vereinfachung:
quelle
PERCENTILE
zurückgibt Funktion folgende Perzentile für Ihre oberen Beispiele:3.7 = percentile(A, P=0.3)
,0.82 = percentile(A, P=0.8)
,20 = percentile(B, P=0.3)
,42 = percentile(B, P=0.8)
.n = int(...)
in einemax(int(...), 1)
Funktion zu wickelnAb
Python 3.8
dem Start enthält die Standardbibliothek die folgendequantiles
Funktionstatistics
:quantiles
gibt für eine gegebene Verteilungdist
eine Liste vonn - 1
Schnittpunkten zurück, die dien
Quantilintervalle trennen (Unterteilungdist
inn
kontinuierliche Intervalle mit gleicher Wahrscheinlichkeit):wo
n
in unserem Fall (percentiles
) ist100
.quelle
Überprüfen Sie das Modul scipy.stats:
quelle
Führen Sie Folgendes aus, um das Perzentil einer Reihe zu berechnen:
Beispielsweise:
quelle
Falls Sie die Antwort benötigen, um Mitglied des Eingabe-Numpy-Arrays zu sein:
Nur um hinzuzufügen, dass die Perzentilfunktion in numpy standardmäßig die Ausgabe als linear gewichteten Durchschnitt der beiden benachbarten Einträge im Eingabevektor berechnet. In einigen Fällen möchten Benutzer möglicherweise, dass das zurückgegebene Perzentil ein tatsächliches Element des Vektors ist. In diesem Fall können Sie ab Version 1.9.0 die Option "Interpolation" mit "niedriger", "höher" oder "am nächsten" verwenden.
Letzteres ist ein tatsächlicher Eintrag im Vektor, während Ersteres eine lineare Interpolation von zwei Vektoreinträgen ist, die an das Perzentil grenzen
quelle
für eine Reihe: verwendet beschreiben Funktionen
Angenommen, Sie haben df mit den folgenden Spalten sales und id. Wenn Sie Perzentile für Verkäufe berechnen möchten, funktioniert dies folgendermaßen:
quelle
Eine bequeme Methode zum Berechnen von Perzentilen für eine eindimensionale Numpy-Sequenz oder -Matrix ist die Verwendung von Numpy.percentile < https://docs.scipy.org/doc/numpy/reference/generated/numpy.percentile.html >. Beispiel:
Wenn Ihre Daten jedoch einen NaN-Wert enthalten, ist die obige Funktion nicht hilfreich. Die empfohlene Funktion in diesem Fall ist die Funktion numpy.nanpercentile < https://docs.scipy.org/doc/numpy/reference/generated/numpy.nanpercentile.html >:
In den beiden oben dargestellten Optionen können Sie weiterhin den Interpolationsmodus auswählen. Befolgen Sie zum besseren Verständnis die folgenden Beispiele.
Wenn Ihr Eingabearray nur aus ganzzahligen Werten besteht, könnte Sie die Perzentilantwort als Ganzzahl interessieren. Wenn ja, wählen Sie den Interpolationsmodus wie "niedriger", "höher" oder "am nächsten".
quelle