Existe-t-il un moyen pratique de calculer les centiles pour une séquence ou un tableau numpy unidimensionnel?
Je recherche quelque chose de similaire à la fonction percentile d'Excel.
J'ai regardé dans la référence de statistiques de NumPy et je n'ai pas pu trouver cela. Tout ce que j'ai pu trouver, c'est la médiane (50e centile), mais pas quelque chose de plus spécifique.
Réponses:
Vous pourriez être intéressé par le package SciPy Stats . Il a la fonction percentile que vous recherchez et de nombreux autres atouts statistiques.
percentile()
est également disponible ennumpy
.Ce ticket me fait croire qu'ils ne s'intégreront paspercentile()
dans numpy de sitôt.la source
df.groupby('key')[['value']].agg(lambda g: np.percentile(g, 10))
Soit dit en passant, il existe une implémentation pure-Python de la fonction percentile , au cas où l'on ne voudrait pas dépendre de scipy. La fonction est copiée ci-dessous:
la source
percentile
sait quoi utiliserN
? Il n'est pas spécifié dans l'appel de fonction.N
avant de calculer un centile. Supposons que vous ayez réellement une liste de tuplesN = [(1, 2), (3, 1), ..., (5, 1)]
et que vous vouliez obtenir le centile du premier élément des tuples, alors vous choisissezkey=lambda x: x[0]
. Vous pouvez également appliquer une transformation (qui change l'ordre) aux éléments de la liste avant de calculer un centile.la source
Voici comment le faire sans numpy, en utilisant uniquement python pour calculer le centile.
la source
La définition du centile que je vois habituellement attend comme résultat la valeur de la liste fournie en dessous de laquelle P pourcentage des valeurs sont trouvées ... ce qui signifie que le résultat doit être de l'ensemble, pas une interpolation entre les éléments de l'ensemble. Pour l'obtenir, vous pouvez utiliser une fonction plus simple.
Si vous préférez obtenir la valeur de la liste fournie à laquelle ou en dessous de laquelle P% des valeurs sont trouvées, utilisez cette simple modification:
Ou avec la simplification suggérée par @ijustlovemath:
la source
PERCENTILE
fonction retourne les percentiles suivants pour vos exemples supérieurs: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(...)
dans unemax(int(...), 1)
fonctionAu départ
Python 3.8
, la bibliothèque standard est livrée avec laquantiles
fonction dans le cadre dustatistics
module:quantiles
renvoie pour une distribution donnéedist
une liste den - 1
points de coupure séparant lesn
intervalles quantiles (division dedist
enn
intervalles continus à probabilité égale):où
n
, dans notre cas (percentiles
) est100
.la source
vérifiez le module scipy.stats:
la source
Pour calculer le centile d'une série, exécutez:
Par exemple:
la source
Si vous avez besoin de la réponse pour être membre du tableau numpy d'entrée:
Juste pour ajouter que la fonction percentile dans numpy calcule par défaut la sortie en tant que moyenne pondérée linéaire des deux entrées voisines dans le vecteur d'entrée. Dans certains cas, les gens peuvent souhaiter que le centile renvoyé soit un élément réel du vecteur, dans ce cas, à partir de la version 1.9.0, vous pouvez utiliser l'option "interpolation", avec "inférieur", "supérieur" ou "le plus proche".
Ce dernier est une entrée réelle dans le vecteur, tandis que le premier est une interpolation linéaire de deux entrées de vecteur qui bordent le centile
la source
pour une série: utilisé décrire les fonctions
supposons que vous ayez df avec les colonnes suivantes sales et id. vous voulez calculer les centiles pour les ventes, alors cela fonctionne comme ceci,
la source
Un moyen pratique de calculer les centiles pour une séquence ou matrice numpy unidimensionnelle consiste à utiliser numpy.percentile < https://docs.scipy.org/doc/numpy/reference/generated/numpy.percentile.html >. Exemple:
Cependant, s'il existe une valeur NaN dans vos données, la fonction ci-dessus ne sera pas utile. La fonction recommandée à utiliser dans ce cas est la fonction numpy.nanpercentile < https://docs.scipy.org/doc/numpy/reference/generated/numpy.nanpercentile.html >:
Dans les deux options présentées ci-dessus, vous pouvez toujours choisir le mode d'interpolation. Suivez les exemples ci-dessous pour une meilleure compréhension.
Si votre tableau d'entrée se compose uniquement de valeurs entières, vous pourriez être intéressé par la réponse en pourcentage en tant qu'entier. Si c'est le cas, choisissez le mode d'interpolation tel que «inférieur», «supérieur» ou «le plus proche».
la source