lunes, 28 de septiembre de 2026

NÚMEROS. Python

Medidas de posición (II)


Estadística descriptiva

En esta entrada hablaremos de los cuantiles y estadísticos relacionados (rango intercuartílico) según son tratados en Pandas. Completamos así el tratamiento de estos estadísticos vistos previamente desde la óptica de OOo Basic/Calc y desde la biblioteca Stadistics de Python.

Como vimos en una entrada precedente, Pandas dispone del método df.describe(), que permite obtener los cuantiles 0.25, 0.50 y 0.75, además del mínimo y el máximo de una distribución.

Pero tambien contamos con el método .quantile(), que permite calcular el valor límite para una probabilidad dada o un conjunto de probabilidades, y las funciones pd.cut() y pd.qcut(), que sirven para dividir los datos en intervalos.



import pandas as pd

df = pd.DataFrame({
    'edad': [18, 22, 25, 30, 35, 40, 48, 55, 60, 70]
})

# Cuantil 0.50 (Mediana)
mediana = df['edad'].quantile(0.5)

print (mediana)

# Múltiples cuantiles (Cuartiles: 25%, 50%, 75%)
cuartiles = df['edad'].quantile([0.25, 0.50, 0.75])

print(cuartiles)


Sobre una columan numética de un DataFrame, aplicamos el método .quantile()...

  • pasando como parámetro el valor mediana = df['edad'].quantile(0.5)
  • o los valores cuartiles = df['edad'].quantile([0.25, 0.50, 0.75]) deseados

Observa que en estos casos especificamos sobre qué componente del DataFrame queremos trabajar, pero podemos omitirlo; no obstante es conveniente explicitarlo cuando existen varias columnas numéricas, ya que así concretamos sobre qué columna estamos realizando los cálculos.

Como dije antes, las funciones pd.cut() y pd.qcut() dividen los datos en intervalos, pero lo hacen de forma diferentes.

Supongamos que tenemos las notas de una serie de alumnos



import pandas as pd

notas = pd.Series([3, 4, 5, 5, 6, 6, 7, 7, 8, 9, 9, 10])


... y queremos clasificar las notas en tres categorías según el rango de valores.



pd.cut(notas, bins=3)


Para ello empleamos la función pd.cut() especificando la columna sobre la que trabajamos y el número de categorías. También podemos utilizar etiquetas para identificar las categorías pd.cut(notas, bins=3, labels=["Baja", "Media", "Alta"])

Lo que obtenemos son tres intervalos de igual amplitud, pero el número de observaciones por intervalo puede ser muy diferente, como es el caso

  • Bajo (1-4) -> 9 observaciones
  • Medio (4-7) -> 1 observación
  • Alto (7-10 -> 2 observaciones

Pero si utilizamos la función pd.qcut()...


pd.qcut(
    notas,
    q=3,
    labels=["Bajo", "Medio", "Alto"]
)

Obtenemos tres intervalos de diferente amplitud pero igual número de observaciones, por lo que se evidencia que se utiliza la lógica de los cuantiles para determinar dónde colocar los puntos de corte.

  • Bajo (1-3) -> 4 observaciones
  • Medio (3-4) -> 4 observaciones
  • Alto(4-10) -> 4 observaciones

Para finalizar, el cálculo de rango intercuartílico no tiene una función específica en Pandas, pero su cálculo es muy sencillo, a partir del método quantile(): ric = quantile(0.75) - quantile(0.25) Un ejemplo



import pandas as pd

datos = pd.Series([10, 15, 20, 25, 30, 35, 40, 45, 50])

q1 = datos.quantile(0.25)
q3 = datos.quantile(0.75)

ric = q3 - q1

print(ric)


No hay comentarios:

Publicar un comentario

Comenta esta entrada