merge: quick/init-jupyter-immutable-rules — reglas inmutabilidad y funcional para notebooks
This commit is contained in:
@@ -281,29 +281,62 @@ Este repositorio está configurado para exploración de datos con Jupyter + Clau
|
||||
|
||||
## Reglas OBLIGATORIAS para Claude
|
||||
|
||||
### 1. SIEMPRE usar MCP jupyter para ejecutar código Python
|
||||
### 1. CÓDIGO INMUTABLE - NUNCA MODIFICAR CELDAS EXISTENTES
|
||||
- **PROHIBIDO** usar NotebookEdit para reemplazar celdas existentes
|
||||
- **PROHIBIDO** modificar o sobrescribir notebooks completos
|
||||
- **SIEMPRE** añadir celdas NUEVAS al final del notebook
|
||||
- Si hay un error en una celda → crear celda nueva con la corrección, NO editar la original
|
||||
- El historial de trabajo debe quedar intacto para trazabilidad
|
||||
|
||||
### 2. PROGRAMACIÓN FUNCIONAL OBLIGATORIA
|
||||
- **Funciones puras**: sin efectos secundarios, mismo input → mismo output
|
||||
- **Inmutabilidad**: nunca mutar datos, crear copias transformadas
|
||||
- **Composición**: funciones pequeñas que se combinan
|
||||
- **Sin estado global**: evitar variables globales mutables
|
||||
- Preferir: `map`, `filter`, `reduce`, list comprehensions
|
||||
- Evitar: loops con mutación, `global`, modificar argumentos in-place
|
||||
|
||||
Ejemplo CORRECTO:
|
||||
```python
|
||||
# Función pura, sin efectos secundarios
|
||||
def limpiar_columna(df, col):
|
||||
return df.assign(**{col: df[col].str.strip().str.lower()})
|
||||
|
||||
# Composición de transformaciones
|
||||
df_limpio = (df
|
||||
.pipe(limpiar_columna, "nombre")
|
||||
.pipe(limpiar_columna, "email"))
|
||||
```
|
||||
|
||||
Ejemplo INCORRECTO:
|
||||
```python
|
||||
# Mutación directa - PROHIBIDO
|
||||
df["nombre"] = df["nombre"].str.strip()
|
||||
```
|
||||
|
||||
### 3. SIEMPRE usar MCP jupyter para ejecutar código Python
|
||||
- Las ejecuciones se ven en tiempo real en Jupyter Lab del usuario
|
||||
- Compartimos variables y estado del kernel
|
||||
- **NUNCA usar bash para ejecutar Python en este repo**
|
||||
|
||||
### 2. Verificar Jupyter activo ANTES de ejecutar
|
||||
### 4. Verificar Jupyter activo ANTES de ejecutar
|
||||
```bash
|
||||
pgrep -af "jupyter" | grep "$(pwd)" || cat .jupyter-port 2>/dev/null
|
||||
```
|
||||
- Si no está activo → pedir al usuario: "Ejecuta `./run-jupyter-lab.sh` en otra terminal"
|
||||
|
||||
### 3. Gestión de notebooks
|
||||
### 5. Gestión de notebooks
|
||||
- **TODOS los notebooks van a la carpeta `notebooks/`** o subcarpetas dentro de ella
|
||||
- Si un notebook tiene >50 celdas → crear uno nuevo
|
||||
- Nombrar descriptivamente: `notebooks/01_exploracion.ipynb`, `notebooks/02_limpieza.ipynb`
|
||||
- Mantener notebooks enfocados en una tarea
|
||||
|
||||
### 4. Gestión de Python
|
||||
### 6. Gestión de Python
|
||||
- **SIEMPRE usar `uv` para gestionar Python** (entornos, dependencias, etc.)
|
||||
- Añadir paquetes con `uv add nombre_paquete`
|
||||
- Nunca usar pip directamente si uv está disponible
|
||||
|
||||
### 5. Antes de código pesado
|
||||
### 7. Antes de código pesado
|
||||
- Avisar al usuario
|
||||
- Usar `%%time` o `tqdm` para progreso
|
||||
|
||||
|
||||
Reference in New Issue
Block a user