Volver al curso

Data Engineering con Python: Pipelines y Big Data

leccion
2 / 12
advanced
32 horas
Fundamentos de Data Engineering y Python

Python para Data Engineering: Librerias y Patrones Esenciales

Lectura
50 min~2 min lectura

Python: El Lenguaje Universal de los Datos

Python se ha consolidado como el lenguaje dominante en ingenieria de datos por su versatilidad, legibilidad y el ecosistema mas rico de librerias para procesamiento de datos. Permite trabajar en todas las capas del stack: desde scripts de extraccion hasta pipelines distribuidos con PySpark.

Configuracion del Entorno

# Instalar pyenv para gestionar versiones
curl https://pyenv.run | bash
pyenv install 3.11.7
pyenv global 3.11.7

# Crear proyecto con Poetry
pip install poetry
mkdir mi-pipeline && cd mi-pipeline
poetry init
poetry add pandas polars sqlalchemy psycopg2-binary apache-airflow dbt-core boto3
CategoriaLibreriaUsoPerformance
DataFramesPandasTransformaciones hasta ~1GBModerado
DataFrames rapidosPolarsTransformaciones hasta ~100GBMuy rapido (Rust)
Big DataPySparkProcesamiento distribuido TB+Distribuido
Bases de datosSQLAlchemyORM y conexiones DBN/A
APIshttpxExtraccion de APIs RESTAsync
Cloudboto3AWS S3, Glue, RedshiftN/A

🚀 Herramienta Recomendada

Si trabajas con datasets de mas de 500MB, Polars puede ser hasta 10x mas rapido que Pandas. Usa lazy evaluation: df.lazy().filter().group_by().collect(). Empresas como Mercado Libre ya migraron sus pipelines internos a Polars.

import polars as pl
import logging

logger = logging.getLogger(__name__)

def extract_csv(path: str) -> pl.DataFrame:
    logger.info(f'Extrayendo datos de {path}')
    df = pl.read_csv(path)
    logger.info(f'Filas extraidas: {len(df)}')
    return df

def transform_ventas(df: pl.DataFrame) -> pl.DataFrame:
    return (
        df.lazy()
        .filter(pl.col('monto') > 0)
        .with_columns([
            pl.col('fecha').str.to_date('%Y-%m-%d'),
            (pl.col('monto') * pl.col('cantidad')).alias('total'),
            pl.col('pais').str.to_uppercase().alias('pais_norm')
        ])
        .group_by(['fecha', 'pais_norm', 'categoria'])
        .agg([
            pl.col('total').sum().alias('revenue'),
            pl.col('total').count().alias('transacciones')
        ])
        .collect()
    )
Codigo Python

Este patron ETL separa claramente las responsabilidades. Cada funcion hace una sola cosa y es facilmente testeable.