Советы и уловки

Как легко объединить несколько записных книжек Jupyter в один

Взломать свой путь через Jupyter

Авторы: Амаль Хасни и Дия Хмила

Блокноты Juypyter - очень важный инструмент для специалистов по данным. Они предлагают несколько практических вариантов интерактивных вычислений, поскольку они объединяют код, текст и визуализацию в одном документе.
Обычно для организационных целей в одном проекте используется несколько отдельных записных книжек. Проблема в том, что когда менеджер или клиент запрашивает быструю демонстрацию, и вам нужно быстро объединить ваши разные записные книжки, реорганизация ячеек может быть длинной утомительной последовательностью копирования и вставки.

Поскольку интерфейс Jupyter не упрощает задачу, мы подумали, что пора создать собственное решение. В этой статье мы покажем вам, как реорганизовать и объединить две записные книжки с минимальными затратами времени. То, что вы узнаете, позволит вам реорганизовать, отфильтровать и изменить ячейку записной книжки с помощью кода Python.

Table Of Contents:
· Getting to know Notebooks’s structure
· Concatenating Notebooks
· Going further with nbformat

Знакомство со структурой Notebooks

Не знаю, пробовали ли вы когда-нибудь открыть файл записной книжки Jupyter (с расширением .ipynb) с помощью текстового редактора. Если да, то вы либо видели странную тарабарщину, либо узнали формат JSON.

Если вы не знаете, что такое формат JSON, он обозначает нотацию объектов JavaScript и представляет собой способ хранения объектов / данных в удобочитаемом виде. Все довольно аккуратно и просто (подробнее об этом можно узнать здесь).

Как я уже сказал, файлы IPYNB хранятся в текстовом формате JSON, и если вы откроете один, он будет выглядеть так:

Как видите, это хорошо структурированный словарь, содержащий:

  • metadata: в основном, словарь, содержащий информацию об используемом ядре и языке (и многом другом).
  • nbformat и nbformat_minor: это просто версия формата записной книжки (здесь 4.0).
  • cells: Это то, что нас, скорее всего, будет интересовать, и оно содержит список ячеек записной книжки.

Каждая ячейка представлена ​​аналогичным словарем, содержащим разные пары ключ-значение:

На этом скриншоте видно, где расположено каждое поле:

Теперь вы знаете достаточно, чтобы начать играть с ячейками записной книжки. Но, если вы хотите вникнуть в подробности, вы можете ознакомиться с документацией по этой ссылке.

Объединение записных книжек

Итак, мы выбрали практический пример - объединение двух блокнотов вместе. Это довольно простой пример, но вы увидите, как читать, писать и настраивать записные книжки, и в зависимости от вашего варианта использования вы можете адаптировать код к своим потребностям.

При желании вы можете скачать примеры блокнотов и опробовать код по этой ссылке.

Итак, давайте начнем с реализации функции чтения файлов IPYNB. Мы будем использовать модуль the json, входящий в стандартную библиотеку python:

Теперь для чтения файлов требуется всего две строчки кода:

first_notebook = read_ipynb('first_notebook.ipynb')
second_notebook = read_ipynb('second_notebook.ipynb')

Хотя нам, вероятно, не обязательно копировать записную книжку в этом примере, это может пригодиться, если вы хотите поиграть с записными книжками. Здесь мы снова воспользуемся модулем copy стандартной библиотеки:

import copy
final_notebook = copy.deepcopy(first_notebook)

Итак, вот часть, где мы фактически объединяем ячейки:

final_notebook['cells'] = first_notebook['cells'] + second_notebook['cells']

И наконец, давайте напишем вспомогательную функцию для экспорта записной книжки в формат Jupyter Notebook и экспорта с ней final_notebook:

Идем дальше с nbformat

Команда разработчиков Jupyter предоставила нам пакет nbformat для выполнения аналогичных операций, таких как чтение ipynb файлов или создание новых ячеек кода с помощью nbformat.v4.new_code_cell.

В качестве примера давайте воспроизведем эквивалентный код для объединения двух записных книжек с помощью nbformat:

Если вам нужен более исчерпывающий список функций, предоставляемых nbformat, вы можете ознакомиться с их документацией по следующей ссылке.

Последние мысли

Более глубокий взгляд на структуру Jupyter Notebook дает необходимые знания для создания решений для манипулирования клетками. В этой статье подробно описаны два решения, которые дают вам обходной путь для утомительного копирования-вставки, которое обычно требуется при объединении двух записных книжек в один. Вы найдете весь код, использованный в этой статье, в этом репозитории Github.

В зависимости от вашего варианта использования вы можете пойти дальше и создать сценарии для внесения других необходимых вам изменений автоматически и с минимальными затратами времени.

Надеемся, эта статья оказалась для вас полезной. Спасибо, что зашли так далеко, будьте осторожны, увидимся в нашей следующей статье 😊!

Еще статьи для чтения