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| Categoria | Libreria | Uso | Performance |
|---|---|---|---|
| DataFrames | Pandas | Transformaciones hasta ~1GB | Moderado |
| DataFrames rapidos | Polars | Transformaciones hasta ~100GB | Muy rapido (Rust) |
| Big Data | PySpark | Procesamiento distribuido TB+ | Distribuido |
| Bases de datos | SQLAlchemy | ORM y conexiones DB | N/A |
| APIs | httpx | Extraccion de APIs REST | Async |
| Cloud | boto3 | AWS S3, Glue, Redshift | N/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()
)Este patron ETL separa claramente las responsabilidades. Cada funcion hace una sola cosa y es facilmente testeable.