Tutorial reproduciblePython + pandasDatos INE 2024

Tu primer análisis con Python: salarios en España

Aprenderás a pasar de una tabla oficial a una conclusión defendible: cargar, validar, comparar y explicar sin confundir media, mediana o brecha salarial.

Qué se corrigió

La versión anterior usaba un dataset que terminaba en 2017 y presentaba sus cifras como si describieran la España actual. Esta edición utiliza resultados definitivos de 2024 publicados por el INE el 28 de mayo de 2026.

Objetivo

Cuatro preguntas antes de escribir una línea de código.

Un análisis correcto empieza por comprender qué mide la fuente, la unidad, el periodo y las limitaciones.

01Fuente

Encuesta Anual de Estructura Salarial.

02Unidad

Ganancia bruta anual por trabajador.

03Periodo

Año 2024, datos definitivos.

04Límite

Las diferencias no explican por sí solas sus causas.

Explorador

Mira la distribución, no solo el promedio.

Selecciona una vista. Las barras usan la misma escala dentro de cada panel para facilitar la comparación.

Fuente y cobertura

INE, EAES 2024. La brecha mostrada es una diferencia no ajustada: mezcla efectos de jornada, ocupación, sector, antigüedad y otras variables. No mide “mismo puesto, distinto salario”.

Paso 1

Carga y revisa antes de calcular.

Descarga la tabla del INE en CSV o prepara un archivo con las columnas `indicador`, `grupo` y `euros`.

Python · validación inicial
import pandas as pd

df = pd.read_csv("salarios_ine_2024.csv")

print(df.head())
print(df.info())
print(df.isna().sum())
print(df.duplicated().sum())
Comprueba: tipos numéricos, unidades en euros, etiquetas consistentes, valores nulos y duplicados.
Regla práctica

No corrijas automáticamente un valor extraño. Primero verifica si es error, valor válido o consecuencia de cómo se construyó la estadística.

Paso 2

Compara medidas que responden preguntas distintas.

La media sirve para resumir el total, pero sube cuando hay salarios altos. La mediana describe mejor el centro de una distribución asimétrica.

Python · seleccionar indicadores
resumen = (
    df[df["grupo"] == "Total"]
      .set_index("indicador")["euros"]
)

media = resumen["Salario medio"]
mediana = resumen["Salario mediano"]
moda = resumen["Salario modal"]

print(f"Media:   {media:,.2f} €")
print(f"Mediana: {mediana:,.2f} €")
print(f"Moda:    {moda:,.2f} €")
Media: 29.540,26 € · Mediana: 24.497,17 € · Moda: 16.520,18 €
Paso 3

Explica lo que sabes y lo que todavía no.

Conclusiones válidas

  • La media anual fue superior a la mediana.
  • La distribución salarial está concentrada en valores inferiores a la media.
  • País Vasco tuvo la media autonómica más alta y Extremadura la más baja.
  • La media de mujeres fue inferior a la de hombres.

Conclusiones que requieren más análisis

  • Por qué existe la diferencia entre hombres y mujeres.
  • Qué parte se explica por jornada, ocupación o sector.
  • Qué salario corresponde a un Data Analyst.
  • Cómo cambia el poder adquisitivo por coste de vida.
Entorno

Dos formas sencillas de ejecutar Python.

Google Colab, sin instalación

Colab permite abrir un notebook en el navegador, ejecutar celdas y subir un archivo. Es adecuado para este primer análisis porque evita configurar Python y paquetes. La sesión es temporal: guarda el notebook y no dependas de archivos que solo existan durante esa sesión.

Entorno local

Si quieres conservar datos y proyectos en tu ordenador, instala una versión actual de Python y crea un entorno virtual por proyecto. Instala pandas, openpyxl y matplotlib. El entorno evita que una actualización de otro proyecto rompa este análisis.

terminal
python -m venv .venv
.venv\Scripts\activate
python -m pip install pandas openpyxl matplotlib

En macOS o Linux la activación suele ser source .venv/bin/activate. Si tu organización gestiona el equipo, sigue su procedimiento.

Conserva el contexto del dato

Descarga la tabla oficial, guarda una copia sin modificar y registra nombre, fecha, unidad, población y notas metodológicas. Crea carpetas para datos_originales, notebooks y salidas. Nunca sobrescribas el archivo de origen.

Tutorial

De archivo descargado a conclusión defendible.

1. Carga e inspecciona

Mira dimensiones, nombres, tipos y ausentes. No calcules una media hasta comprobar si la columna representa euros anuales, mensuales, brutos o netos, y si cada fila es una persona, una comunidad o una agregación publicada.

python
import pandas as pd
df = pd.read_excel("datos_originales/tabla_ine.xlsx")
print(df.shape)
print(df.columns.tolist())
print(df.head())
print(df.dtypes)
print(df.isna().sum())

2. Limpia sin ocultar decisiones

Normaliza columnas, convierte textos numéricos y filtra solo con una razón. No sustituyas automáticamente un ausente por cero: cero es un dato; ausente significa que no se observó o no se publicó.

3. Describe la distribución

La media se desplaza con salarios altos; la mediana identifica el punto central. Calcula también percentiles, rango y observaciones. Si la tabla del INE ya ofrece agregados, no recalcules como si tuvieras microdatos.

4. Compara grupos con cuidado

La diferencia entre hombres y mujeres es una brecha no ajustada. No demuestra cuánto se paga por el mismo puesto, jornada o experiencia. Las diferencias territoriales también reflejan composición sectorial y ocupacional. Preséntalas como descripción, no como causalidad.

5. Visualiza para comprobar

Un histograma muestra la forma; un boxplot, dispersión y extremos; barras ordenadas comparan territorios. Incluye unidad, periodo y fuente. Si el eje no comienza en cero, indícalo y evita exagerar diferencias.

6. Redacta con límite

Una conclusión completa dice qué se observó, en qué población y periodo, por qué importa y qué no puede inferirse. Ese último elemento separa análisis de publicidad.

FAQ

Errores normales del primer notebook.

¿Por qué aparece FileNotFoundError?

Python no encuentra la ruta. Comprueba la carpeta de trabajo, el nombre y la extensión real.

¿Y si los números aparecen como texto?

Revisa separadores, símbolos y espacios. Convierte con pd.to_numeric y examina lo que se convirtió en ausente.

¿Este análisis demuestra discriminación?

No por sí solo. Describe diferencias agregadas. Analizar mecanismos requiere variables comparables y un método específico.

Reproducibilidad

Convierte el notebook en un pequeño proyecto.

Guarda entorno y decisiones

Exporta dependencias con python -m pip freeze > requirements.txt, registra la versión del archivo y añade un README con instrucciones. Mantén una celda de configuración al principio y reinicia el entorno para ejecutar todo de principio a fin. Un notebook que solo funciona después de ejecutar celdas en un orden accidental no es reproducible.

Exporta resultados

Guarda tablas finales en CSV y gráficos en PNG o SVG con nombres estables. No copies cifras manualmente a una presentación: genera una tabla de salida y úsala como fuente. Si corriges la limpieza, todas las piezas deben actualizarse.

Ejercicios siguientes

Compara media y mediana por comunidad; calcula diferencias absolutas y relativas; crea una función que formatee tablas; reproduce un gráfico desde cero; y escribe una conclusión de cien palabras con cobertura y límite. Después pide a otra persona que ejecute el notebook sin tu ayuda.

Qué aprender después

Practica uniones, agrupaciones, fechas y visualización; después SQL. La estadística descriptiva y el diseño de preguntas son más importantes al principio que un modelo complejo. Avanza cuando puedas explicar cada transformación.

Analizar es hacer una afirmación que puedas defender.

El código calcula. Tu trabajo consiste en decidir qué cálculo responde la pregunta y cómo comunicar sus límites.