23 · Módulos útiles de la biblioteca estándar
Un recorrido enfocado por datetime, pathlib, json, collections, itertools, functools y random — los módulos de stdlib que todo practicante de ML usa antes de instalar cualquier cosa con pip.
La biblioteca estándar de Python viene con 'baterías incluidas' — `datetime`, `pathlib`, `json`, `itertools`, `functools` y `random` están todos integrados, sin instalación, y cubren la mayor parte de lo que un script de ML necesita antes de tocar NumPy o pandas.
Sin esto:
Sin la stdlib, incluso leer un archivo JSON de configuración, construir una ruta de archivo o inicializar un generador de números aleatorios requeriría una biblioteca de terceros. Conocer la stdlib te salva de sobre-ingeniería en tareas simples.
Python viene con una rica biblioteca estándar — no se necesita pip install. Esta lección recorre los módulos que más aparecen en el trabajo de ML y ciencia de datos: datetime para marcas de tiempo y nombrado de experimentos; pathlib para manejo moderno de rutas multiplataforma; json para serializar configs y resultados; collections para contenedores especializados (Counter, defaultdict, deque); itertools para iteración combinatoria eficiente en memoria; functools para memoización y aplicación parcial; y random para muestreo estocástico reproducible. Cada ejemplo es autocontenido y ejecutable en Pyodide.
Python (in browser)
`datetime.now().isoformat()` da una marca de tiempo inequívoca y ordenable. Elimina los dos puntos con `strftime` para usarla en rutas de archivo — `runs/exp-20240315_142207/` es válida en todos los sistemas operativos.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
El operador `/` en objetos `Path` une segmentos de ruta — mucho más legible que `os.path.join("data", "raw", "train.csv")`. Los objetos `Path` funcionan directamente con `open()`, `glob()`, `mkdir()` y la mayoría de las funciones de I/O de archivos.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`json.dumps` (string) y `json.dump` (archivo) serializan dicts, listas, strings, números y booleanos de Python. `indent=2` produce salida legible por humanos. JSON es el formato de configuración por defecto en la mayoría de las herramientas de ML — `config.json` de Hugging Face, `hparams.yaml` de PyTorch Lightning también pueden procesarse via JSON.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`itertools.product(*grids)` es cómo construyes una grilla de búsqueda de hiperparámetros sin bucles anidados. `combinations` genera todos los pares únicos de características para términos de interacción. Ambos son perezosos — nunca construyen la lista completa en memoria.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`partial(fn, **fixed_kwargs)` devuelve un nuevo callable con algunos argumentos pre-rellenados — perfecto para incluir parámetros de preprocesamiento fijos como media/std para que una función de transformación tenga la firma correcta para `map()`. `lru_cache` memoiza los resultados de una función por valor de argumento.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`random.seed(42)` hace que la secuencia sea reproducible entre ejecuciones — exactamente los mismos números cada vez. NumPy y PyTorch tienen sus propios estados RNG (`np.random.seed(42)`, `torch.manual_seed(42)`); normalmente necesitas sembrar los tres en un script de ML.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
¿Qué devuelve `Counter("mississippi").most_common(2)`?
- `datetime.now().isoformat()` — marcas de tiempo inequívocas para directorios de experimentos. `strftime("%Y%m%d_%H%M%S")` elimina los dos puntos para rutas de archivo seguras.
- `pathlib.Path` en lugar de `os.path` — usa `/` para unir, `.parent` / `.stem` / `.suffix` para inspeccionar, `.mkdir(parents=True, exist_ok=True)` para crear. Funciona directamente con `open()`.
- `itertools.product(*grids)` construye grillas de búsqueda de hiperparámetros perezosamente. `functools.partial` congela argumentos. `random.seed(n)` hace que el muestreo sea reproducible.
Directorios de experimentos con timestamp: `Path("runs") / f"exp-{datetime.now().strftime('%Y%m%d_%H%M%S')}"`. Archivos de configuración JSON leídos con `json.load(open("config.json"))`. `pathlib.Path.glob("data/**/*.csv")` en cargadores de datos. `random.seed(42)` junto con `np.random.seed(42)` y `torch.manual_seed(42)` para reproducibilidad completa. `itertools.product(lr_values, batch_sizes)` para búsqueda en grilla. `partial(normalize, mean=dataset_mean, std=dataset_std)` para incluir estadísticas de preprocesamiento en un callable de transformación reutilizable.
Si lo quitas: Sin estos módulos de stdlib, los scripts de ML necesitarían bibliotecas de terceros para la manipulación básica de rutas de archivo, serialización JSON y seeding aleatorio — o implementar los suyos propios. La estabilidad de la stdlib también significa que estas herramientas funcionan de forma idéntica en todas las versiones de Python y entornos, incluido Pyodide.