Советы и уловки
Как легко объединить несколько записных книжек 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.
В зависимости от вашего варианта использования вы можете пойти дальше и создать сценарии для внесения других необходимых вам изменений автоматически и с минимальными затратами времени.
Надеемся, эта статья оказалась для вас полезной. Спасибо, что зашли так далеко, будьте осторожны, увидимся в нашей следующей статье 😊!