Las medidas de tendencia central resumen en un único valor representativo el centro de un conjunto de datos. Permiten entender rápidamente dónde se agrupan los valores. Las tres más importantes son:
Media (o promedio aritmético)
Es la medida más conocida. Se calcula sumando todos los valores del conjunto de datos y dividiendo el resultado por el número total de valores. Es el "centro de gravedad" de los datos.
Mediana
Es el valor que se encuentra exactamente en el medio del conjunto de datos, una vez que estos han sido ordenados de menor a mayor. Si hay un número par de datos, la mediana es el promedio de los dos valores centrales.
Moda
Es el valor que aparece con mayor frecuencia en el conjunto de datos. Un conjunto puede tener una moda (unimodal), dos (bimodal), varias (multimodal) o ninguna.
Fórmula: Media = (∑xi) / n
# Script 1: Media con NumPy y Pandas
import numpy as np
import pandas as pd
ingresos = [8200, 9100, 7500, 20000, 8300, 8700]
media_numpy = np.mean(ingresos)
media_pandas = pd.Series(ingresos).mean()
print(f"Media con NumPy: {media_numpy:.2f}")
print(f"Media con Pandas: {media_pandas:.2f}")
👉 Notar que el 20.000 sube mucho la media: es sensible a outliers.
La mediana divide al dataset en dos partes con igual número de observaciones.
# Script 2: Mediana con NumPy y Pandas
import numpy as np
import pandas as pd
ingresos = [8200, 9100, 7500, 20000, 8300, 8700]
mediana_numpy = np.median(ingresos)
mediana_pandas = pd.Series(ingresos).median()
print(f"Mediana con NumPy: {mediana_numpy}")
print(f"Mediana con Pandas: {mediana_pandas}")
👉 La mediana en este caso refleja mejor el “valor típico” porque ignora el efecto del outlier.
La moda es el valor que más se repite. En Python se puede calcular con SciPy o con Pandas.
# Script 3: Moda con SciPy y Pandas
import pandas as pd
from scipy import stats
datos = [5, 6, 6, 7, 7, 7, 8, 9, 9]
moda_scipy = stats.mode(datos, keepdims=True)
moda_pandas = pd.Series(datos).mode()
print(f"Moda con SciPy: {moda_scipy.mode[0]} (ocurre {moda_scipy.count[0]} veces)")
print(f"Moda con Pandas: {list(moda_pandas)}")
👉 Con Pandas puede haber múltiples modas (empates).
# Script 4: Comparación de media, mediana y moda
import numpy as np
import pandas as pd
ingresos = [8200, 9100, 7500, 8300, 8700, 8600, 20000] # con un outlier
serie = pd.Series(ingresos)
print("Media :", serie.mean())
print("Mediana:", serie.median())
print("Moda :", list(serie.mode()))
Interpretación:
# Script 5: Visualización de media, mediana y moda
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
ingresos = [8200, 9100, 7500, 8300, 8700, 8600, 20000]
serie = pd.Series(ingresos)
media = serie.mean()
mediana = serie.median()
moda = serie.mode().iloc[0]
sns.histplot(serie, bins=10, kde=True, color="skyblue")
plt.axvline(media, color="red", linestyle="--", label=f"Media: {media:.0f}")
plt.axvline(mediana, color="green", linestyle="-.", label=f"Mediana: {mediana:.0f}")
plt.axvline(moda, color="purple", linestyle=":", label=f"Moda: {moda}")
plt.title("Comparación: media, mediana y moda")
plt.legend()
plt.show()
👉 Se ve cómo la media se desplaza hacia la derecha por el outlier, mientras la mediana queda más centrada.