Medidas de tendencia central (II)
Estadística descriptiva
Con Pandas podemos calcular las medidas de tendencia central (media, mediana y moda) sobre un DataFrame de forma rápida y directa. Estas funciones se integran de forma natural con la capacidad de la librería para manipular y filtrar conjuntos de datos.
Aunque en proyectos reales cargaremos los datos desde fuentes externas (como archivos CSV), para facilitar el aprendizaje aquí crearemos un DataFrame directamente a partir de un diccionario:
import pandas as pd
# Creamos un DataFrame de prueba
data = {
'Nombre': ['Ana', 'Luis', 'Carlos', 'Marta', 'Sofía', 'Pedro', 'Elena'],
'Edad': [25, 30, 25, 40, 30, 25, 35],
'Nota': [2.5, 3.1, 2.5, 4.2, 3.1, 2.1, 3.8]
}
df = pd.DataFrame(data)
A partir de este conjunto de datos, podemos aplicar los principales estadísticos descriptivos tanto a columnas individuales como a todo el conjunto de datos numéricos de forma simultánea:
#---------------------------------------------------------------
#Medidas de tendencia central
#----------------------------------------------------------------
# Promedio -----------------------------
# Media de una sola columna
nota_media = df['Nota'].mean()
print(f"Nota media: {nota_media:.2f}")
# Media de todas las columnas numéricas del DataFrame
media_total = df.mean(numeric_only=True)
print("\nMedia de las columnas numéricas:\n", media_total)
# Mediana-----------------------------
# Mediana de una sola columna
mediana_nota = df['Nota'].median()
print(f"Mediana de la nota: {mediana_nota}")
# Mediana de todas las columnas numéricas
mediana_total = df.median(numeric_only=True)
print("\nMediana de todas las columnas numéricas:\n", mediana_total)
# Moda---------------------------------------
# Moda de una columna específica (devuelve una Series)
moda_nota = df['Nota'].mode()[0] # Tomamos el primer elemento con [0]
print(f"Moda de la nota: {moda_nota}")
# Moda de todo el DataFrame
moda_total = df.mode()
print("\nModa de las columnas:\n", moda_total)
Calcular estos valores sobre todo el DataFrame a la vez refleja el verdadero potencial de Pandas para procesar colecciones de datos sin necesidad de iterar manualmente sobre ellas.
Además de los métodos individuales, disponemos del método describe(), que genera un resumen con los principales estadísticos descriptivos (incluyendo recuento, desviación estándar y percentiles):
resumen = df.describe()
print(resumen)
Si necesitamos un control más preciso sobre qué métricas aplicar a cada columna, podemos utilizar el método agg():
# Agregación personalizada con agg() sobre columnas existentes
def primera_moda(x):
m = x.mode()
return m.iloc[0] if not m.empty else None
estadisticos = df[['Edad', 'Nota']].agg(['mean', 'median', primera_moda])
estadisticos.rename(index={'primera_moda': 'mode'}, inplace=True)
print("\nAgregación personalizada (Edad y Nota):")
print(estadisticos)
En conclusión, Pandas ofrece diversas alternativas para obtener estadísticos descriptivos de manera eficiente, adaptándose tanto a análisis puntuales sobre una columna como a resúmenes globales sobre grandes volúmenes de datos.