Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Programación orientada a datos con Python, Unidad 6 — Programación funcional aplicada a datos, 6.3 — Expresividad del código ·

Lectura de pipelines

Lectura de pipelines

Introducción

La programación funcional aplicada a datos no solo nos permite escribir código más limpio y mantenible, sino que también ofrece una forma poderosa para organizar nuestro trabajo con datos en formas de "pipelines". Un pipeline es simplemente un flujo de datos a través de una serie de transformaciones. En la programación funcional, las funciones son los bloques básicos del pipeline. La lectura clara y comprensible de estos pipelines es clave para asegurarnos de que nuestro código cumple con el propósito esperado sin complicaciones innecesarias.

Explicación principal

Un pipeline en programación funcional se construye a partir de funciones puras, cada una transformando los datos según las necesidades. En Python, podemos combinar estas funciones usando map, filter, y reduce para crear un flujo que procesa nuestros datos paso a paso.

Ejemplo

Imagina que tienes una lista de diccionarios con información sobre empleados en una empresa:

empleados = [
    {"nombre": "Ana", "edad": 30, "departamento": "Ventas"},
    {"nombre": "Carlos", "edad": 25, "departamento": "IT"},
    {"nombre": "Lucia", "edad": 40, "departamento": "Ventas"},
    # ...
]

Podrías crear un pipeline para obtener solo los empleados del departamento de ventas y mostrarlos con su edad:

from functools import reduce

# Definimos funciones puras para cada transformación
def filtro_depto(d): return d["departamento"] == "Ventas"
def extraer_edad(d): return d["edad"]

# Usamos map para aplicar las funciones a los elementos de la lista
pipeline = filter(filtro_depto, empleados) | map(extraer_edad)

# Convertimos el resultado a una lista
resultado = list(pipeline)
print(resultado)

Expresividad del código

En este ejemplo, cada función se encarga de un aspecto específico: filtro_depto filtra los empleados por departamento, y extraer_edad extrae solo la edad. Usando el operador |, podemos encadenar estas funciones en una forma que es fácil leer.

Errores típicos / trampas

  1. Efectos secundarios: Es vital asegurarse de que todas las funciones sean puras, es decir, no deben modificar datos fuera del scope. Si una función tiene efectos secundarios, como imprimir en consola o modificar variables globales, la lectura del pipeline se vuelve confusa y difícil de mantener.
  1. Operadores incompatibles: La combinación de operadores como map e iter puede llevar a errores difíciles de diagnosticar. Python es bastante permisivo con esto, pero asegúrate siempre de que los tipos son correctos en cada paso del pipeline.
  1. Manejo inadecuado de excepciones: Si no se manejan adecuadamente las excepciones en una función pura dentro del pipeline, el flujo puede interrumpirse antes de lo esperado. Esto es especialmente problemático si se están procesando grandes conjuntos de datos.

Checklist accionable

  1. Revisa la pureza: Asegúrate que cada función sea pura y no tenga efectos secundarios.
  2. Comprueba tipos: Verifica los tipos de entrada y salida en cada función para evitar errores de tipo.
  3. Mantén funciones simples: Las funciones dentro del pipeline deben ser lo más simples posible, enfocándose en una tarea bien definida.
  4. Documenta claramente: Cada paso del pipeline debe estar documentado con suficiente detalle para que otros desarrolladores entiendan su propósito.
  5. Maneja excepciones adecuadamente: Asegúrate de manejar cualquier posible error que pueda ocurrir en cada función.

Siguientes pasos

  • Aprender sobre reduce y acumuladores: Estas funciones son esenciales para combinar datos a través del pipeline. Familiarízate con ellas para poder manipular conjuntos de datos más complejos.
  • Optimizar el rendimiento: Asegúrate de que tu código sea eficiente, especialmente cuando trabajes con grandes volúmenes de datos.
  • Usa herramientas de depuración: Utiliza herramientas como pdb para depurar y entender mejor cómo se comportan tus pipelines en tiempo de ejecución.

La programación funcional aplicada a datos es una poderosa herramienta que, cuando se utiliza correctamente, puede hacer que el procesamiento de datos sea más claro y eficiente. Siguiendo estos consejos, podrás escribir código más limpio y fácil de mantener.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).