Saltar al contenido

¿Cómo calculo los percentiles con python/numpy?

Revisamos cada artículo de nuestro sitio web con la meta de mostrarte siempre la información con la mayor veracidad y actualizada.

Puede que le interese el paquete SciPy Stats. Tiene la función de percentil que está buscando y muchas otras ventajas estadísticas.

percentile() está disponible en numpy también.

import numpy as np
a = np.array([1,2,3,4,5])
p = np.percentile(a, 50) # return 50th percentile, e.g median.
print p
3.0

Este boleto me hace creer que no se integrarán percentile() en numpy en cualquier momento pronto.

Por cierto, hay una implementación de Python puro de la función de percentil, en caso de que uno no quiera depender de scipy. La función se copia a continuación:

##  http://code.activestate.com/recipes/511478/ (r1)
import math
import functools

def percentile(N, percent, key=lambda x:x):
    """
    Find the percentile of a list of values.

    @parameter N - is a list of values. Note N MUST BE already sorted.
    @parameter percent - a float value from 0.0 to 1.0.
    @parameter key - optional key function to compute value from each element of N.

    @return - the percentile of the values
    """
    if not N:
        return None
    k = (len(N)-1) * percent
    f = math.floor(k)
    c = math.ceil(k)
    if f == c:
        return key(N[int(k)])
    d0 = key(N[int(f)]) * (c-k)
    d1 = key(N[int(c)]) * (k-f)
    return d0+d1

# median is 50th percentile.
median = functools.partial(percentile, percent=0.5)
## end of http://code.activestate.com/recipes/511478/ 

import numpy as np
a = [154, 400, 1124, 82, 94, 108]
print np.percentile(a,95) # gives the 95th percentile

Si te ha resultado provechoso nuestro artículo, sería de mucha ayuda si lo compartieras con más programadores así contrubuyes a difundir nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *