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.