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