Revista Informática

Dividir un archivo de Jupyter Notebook en varios

Publicado el 07 noviembre 2022 por Daniel Rodríguez @analyticslane
Dividir un archivo de Jupyter Notebook en varios

Al trabajar con Jupyter Notebooks nos podemos encontrar que después de trabajar en un archivo este es demasiado grande y es mejor dividirlo en varios para trabajar mejor con ellos. Dado que puede haber cientos de celdas, copiar una a una puede ser una tarea tediosa. Afortunadamente existe una herramienta con la que se puede hacer justamente esto, dividir un archivo de Jupyter Notebook en varios.

Instalación de las herramientas

Para dividir los archivos de Jupyter Notebook se puede usar una herramienta de Python llamada nbmanips. Como la mayoría de los paquetes de Python se puede instalar fácilmente mediante pip. Por lo es necesario abrir una terminal y ejecutar el siguiente comando.

pip install nbmanips

Si todo ha ido correctamente, ahora debería ser posible llamar desde la línea de comandos al nb para dividir los Notebooks. Se puede comprobar la versión instalada con el comando

nb --version

Lo que deberá devolver la versión instalada de nbmanips.

Dividir en base a los indices de la celda

La forma más sencilla de dividir un archivo de Jupyter Notebook es indicando los índices de las celdas. Para ello solamente se tiene que ejecutar el comando np split seguido del nombre del archivo y separado por comas los índices de las celdas con los que se desea separar el contenido. Así para separar un Notebook llamado modelos.ipynb a partir de la celda 7 y 14 se puede usar:

nb split modelos.ipynb 7,14

Lo que creará tres archivos llamados modelos-0.ipynb, modelos-1.ipynb y modelos-2.ipynb conteniendo respectivamente las celdas 1 a 7, 8 a 14 y de 15 en adelante.

Consultar la posición de los contenidos

En un Notebook grande contar el número de celdas posiblemente no sea algo eficiente. Para solucionar este problema existe una función de nbmanips que nos puede generar una tabla de contenidos. Para ellos solo es necesario ejecutar el comando nb toc seguido del nombre del archivo. Para el ejemplo anterior sería la siguiente línea.

nb toc modelos.ipynb

produciendo como resultado una salida similar a la siguiente

1 Importación de los datos   [0]
2 Preprocesado de los datos  [4]
  2.1 Eliminación de nulos   [7]
3 Creación de los modelos    [11]
  3.1 Regresión logística    [13]
  3.2 Árboles de decisión    [17]
  3.3 SVM                    [21]
4 Validación de los modelos  [25]

Ahora este comando nos buscará títulos en celdas de Markdown, indicando la posición de cada uno de ellos. Por lo que si en el ejemplo se desea separa por capítulos se debería ejecutar

nb split modelos.ipynb 4,11,25

Dividir un archivo de Jupyter Notebook en base a etiquetas

Forzar la división en base a etiquetas es otra opción. Proceso que tiene dos fases, en primer lugar, identificar la posición de las etiquetas y posteriormente realizar la división. Para ello se puede ejecutar el siguiente código

select has_html_tag h1 | nb split -s modelos.ipynb

En este lo primero que se hace es buscar las celdas en las que hay un título ('h1'), por lo tanto, comienza una sección. Para los subtítulos sería h2 y así en adelante. Posteriormente la salida del comando se envía a la función split dividiendo el Notebook original en varios.

Conclusiones

Hoy se han visto algunas funciones del paquete nbmanips con el que se puede manejar los archivos Jupyter Notebook. En concreto se ha visto cómo se puede dividir un archivo de Jupyter Notebook en varios.

Imagen de tongariro en Pixabay


Volver a la Portada de Logo Paperblog