statistics.median_grouped(data, interval = 1)
La función statistics.median_grouped calcula la mediana de los elementos de data agrupados en bloques de tamaño interval (parámetro que, por defecto, toma el valor 1). Más información en este enlace.
El código de esta función (simplificado) es el siguiente:
data = sorted(data)
n = len(data) # Número de puntos
x = data[n//2] # Valor central (centro del intervalo)
L = x - interval / 2 # Valor inferior del intervalo de la mediana
l1 = _find_lteq(data, x) # Posición de la primera aparición de x en data
l2 = _find_rteq(data, x) # Posición de la última aparición de x en data
cf = l1 # Número de puntos menores que x
f = l2 - l1 + 1 # Número de ocurrencias de x
return L + interval * (n / 2 - cf) / f # Interpolation
Como puede apreciarse, tras ordenar los datos y obtener el número de elementos (variable n), se calcula el valor que ocupa la posición central (variable x). Este valor coincide con el resultado devuelto por la función statistics.median_high.
Una vez obtenida la mediana de los datos se calculan los límites del intervalo al que pertenece. En realidad solo interesa el límite inferior de este intervalo, lo que se almacena en la variable L:
A continuación se obtiene la posición más baja y más alta de la mediana en data (variables l1 y l2). A partir de estos valores se calcula el número de apariciones de la mediana en data:
La funciones _find_lteq y _find_rteq pueden implementarse de forma sencilla (aunque poco eficiente) con el siguiente código:
return data.index(x)
data.reverse()
return len(data) - data.index(x) - 1
Por último, se interpola el valor a devolver en función del tamaño del intervalo:
- data: Secuencia o iterable a partir de cuyos datos deseamos calcular la mediana agrupada.
- interval: Argumento opcional. Tamaño del intervalo a considerar.
La función statistics.median_grouped devuelve un número real.
Supongamos que partimos del siguiente iterable de cinco elementos:
...y que el tamaño del intervalo es 2:
La mediana de nuestra lista es 5, por lo que el intervalo al que pertenece es [4, 6) (intervalo cerrado por la izquierda y abierto por la derecha) y este valor aparece dos veces en la lista. Es decir:
L = 4 (límite inferior del intervalo al que pertenece la mediana)
n = 5 (número de elementos en el iterable)
cf = 2 (número de valores inferiores a la mediana)
f = 2 (número de ocurrencias de la mediana)
Si aplicamos estos valores a la expresión
...obtenemos:
...valor que coincide con el devuelto por la función: