Подробно рассказываем об инструментах семейства Jupyter – эффективных средствах разработки для задач Data Science и смежных областей.
Краткий обзор
В конце февраля был выпущен релиз JupyterLab – гибкой, интегрируемой и легко расширяемой среды, поддерживающей одновременную работу с несколькими блокнотами Jupyter, текстовыми файлами, датасетами, терминалами и другими компонентами. Аналогично классическим IDE в JupyterLab можно упорядочивать документы в рабочей области в удобном порядке при помощи вкладок и разделителей.
JupyterLab поддерживает отображение и редактирование множества форматов данных: изображений, CSV, JSON, Markdown, PDF, Vega, Vega-Lite и так далее. Для быстрой навигации по документам в JupyterLab есть настраиваемые горячие клавиши, а также возможность использования стандартных сочетаний из vim, emacs и Sublime Text.
JupyterLab может быть дополнен при помощи расширений, позволяющих настроить под себя различные части JupyterLab, включая темы, редакторы файлов и дополнительные компоненты.
Если вы уже знакомы с Jupyter Notebook, то вы очень быстро освоитесь с JupyterLab, которая в существенной мере обогащает возможности классического блокнота Jupyter. Не устанавливая JupyterLab, вы можете ознакомиться с демо-примером на странице Binder – инструменты Jupyter поддерживают запуск на сторонних серверах.
Для этой статьи мы взяли за основу ключевые моменты из документации JupyterLab, а также рассмотрели особенности лежащего в основе этой среды типа данных Jupyter Notebook, чтобы те, кто еще не использовали блокноты Jupyter, оценили их преимущества.
Установка
Среда JupyterLab может быть установлена при помощи conda, pip или pipenv:
conda
conda install -c conda-forge jupyterlab
pip
pip install jupyterlab
Если вы устанавливаете JupyterLab при помощи pip install --user, вам необходимо добавить директорию bin в вашу переменную окружения PATH, чтобы использовать краткий способ запуска JupyterLab.
pipenv
pipenv install jupyterlab pipenv shell
или из репозитория git:
pipenv install git+git://github.com/jupyterlab/jupyterlab.git#egg=jupyterlab pipenv shell
При использовании pipenv для запуска при помощи jupyter lab вам необходимо предварительно активировать виртуальное окружение проекта.
Запуск
Запуск сервера JupyterLab из терминала производится следующей простой командой:
jupyter lab
При этом интерфейс JupyterLab автоматически открывается в используемом вами браузере. Также вы можете получить доступ к запущенному серверу, введя в адресную строку браузера соответствующую ссылку (по умолчанию это http://localhost:8888). Вы можете открыть классический интерфейс блокнота Jupyter, выбрав “Launch Classic Notebook” из меню Help, или переключаться между интерфейсами, заменяя окончание строки: /lab для интерфейса JupyterLab или /tree для классического интерфейса.
Интерфейс
JupyterLab обеспечивает гибкий интерфейс с возможностью перемещения блоков и расположения в удобном для вас порядке. В JupyterLab реализовано множество возможностей, к которым вы уже могли привыкнуть при использовании традиционных сред разработки, но с акцентом на интерактивности производимых вычислений.
Интерфейс JupyterLab состоит из основной рабочей области, содержащей вкладки документов и инструментов, скрываемой левой боковой панели и меню.
Меню
Меню по умолчанию выглядит следующим образом:
- File: действия, касающиеся файлов и директорий
- Edit: действия, касающиеся редактирования документов и инструментов
- View: действия, изменяющие внешний вид JupyterLab
- Run: действия по запуску кода в различных инструментах
- Kernel: действия над отдельными процессами запущенного кода
- Tabs: список открытых документов и инструментов с возможностью переключения
- Settings: общие настройки и редактор продвинутых настроек
- Help: список ссылок на справочные документы по JupyterLab и ядру
Расширения JupyterLab позволяют создавать дополнительные вкладки в панели меню.
Боковая панель
Боковая панель содержит браузер файлов (Files), список запущенных инструментов (Running), палитру команд (Commands), инспектор инструментов ячеек блокнота (Cells) и списка вкладок (Tabs).
Процесс «схлопывания» боковой панели происходит по клику на открытой вкладке, как это проиллюстрировано в коротком видео ниже.
Использование расширений JupyterLab также позволяет добавлять в боковую панель дополнительные вкладки.
Основная рабочая область
Основная рабочая область позволяет группировать документы (блокноты, текстовые файлы и пр.) и другие инструменты (терминалы, консоли и т. д.) в виде панелей с вкладками, размер и расположение которых можно изменить перетаскиванием.
Вкладки и режим работы с отдельным документом
Вкладка Tabs в боковой панели показывает список открытых документов и инструментов в рабочей области:
Эта же информация доступна на вкладке Tabs в menu:
Часто полезно сфокусироваться на отдельном документе и инструменте без того, чтобы закрывать все остальные вкладки в рабочей области. Для этого в JupyterLab есть режим работы с отдельным документом. Его можно запустить из панели View ("Single-Document Mode") или воспользоваться сочетанием горячих клавиш (по умолчанию Ctrl+Shift+Enter).
Контекстные меню
Многие составляющие JupyterLab, такие как блокноты, текстовые файлы, консоли и вкладки, имеют собственные контекстные меню.
Для использования оригинального контекстного меню браузера при вызове контекстного меню зажимайте Shift.
Горячие клавиши
Аналогично классическому Jupyter Notebook, вы можете использовать для навигации и запуска инструментов горячие клавиши, которые можно настроить при помощи Advanced Settings Editor в меню в панели Settings.
Вы также можете настроить текстовый редактор так, чтобы использовать сочетания горячих клавиш из vim, emacs или Sublime Text. Для этого в меню в панели Settings выберите строку Text Editor Key Map.
Работа с файлами
Браузер файлов и меню File позволяют открывать, создавать, удалять, переименовывать, скачивать, копировать и делиться файлами и директориями. Файлы открываются стандартно – двойными кликом в браузере файлов из боковой панели.
Также вы можете перетащить файл в рабочую область, создав таким образом дополнительную вкладку сразу в нужном вам месте.
Для некоторых типов файлов поддерживаются множественные представления. Например, вы можете открыть файл Markdown в текстовом редакторе или в форме HTML-страницы. Расширения JupyterLab позволяют использовать дополнительные методы просмотра/редактирования различных файлов, добавляя в контекстное меню новые строки "Open With...".
Удобная особенность JupyterLab заключается в том, что разные представления файла синхронизируются между собой. То есть, работая, например, с тем же файлом Markdown в редакторе, вы сразу же видите как он отрисовывается в HTML.
Создавать новые файлы и инструменты можно кликнув на плюс в браузере файлов. Это вызывает новую вкладку с лаунчером в рабочей области, позволяющим выбрать используемый инструмент.
Того же результата можно добиться на вкладке New в меню File.
В качестве текущей рабочей директории используется открытая в браузере файлов, за исключением терминала, для которого всегда открывается домашний каталог.
Новый файл создается с именем по умолчанию. Переименовывается файл из контекстного меню браузера файлов или вкладки, на которой открыт файл.
Файлы также могут быть загружены в текущую директорию переносом их в панель браузера файлов или при помощи кнопки "Upload files" в верхней части браузера файлов.
Текстовый редактор
Текстовый редактор JupyterLab имеет инструмент подсветки синтаксиса, настройки отступов (табы/пробелы) и сочетаний горячих клавиш.
Все редакторы Jupyter поддерживают множественный курсор, аналогично, например, Sublime Text. Таким образом, можно существенно быстрее править однотипные части текста и кода.
Jupyter Notebook
Блокноты Jupyter (также часто в российском сообществе называемые ноутбуками) представляют собой документы, комбинирующие блоки запускаемого кода с текстом в Markdown-разметке, формулами (LaTeX), изображениями, интерактивными визуализациями и другими форматами выходных данных.
Остановимся подробнее на основной особенностях блокнотов Jupyter, сделавших их такими популярными.
Блокноты Jupyter позволяют интерактивно работать с кодом непосредственно в браузере. Блокнот Jupyter состоит из независимо запускаемых ячеек с кодом, которые в результате запуска выполняют содержащийся в ячейке программный код и добавляют в пространство имен соответствующие имена переменных, функций, классов и т. д. Ячейки с кодом можно перемежать ячейками с Markdown-разметкой и, как будет показано далее, ячейками с кодом на различных языках программирования и разметки. Код можно запускать как отдельно для каждой ячейки, так и последовательно от первой ячейки к последней. Вы можете попробовать работу с блокнотами Jupyter на одном из языков Python, Julia или R так же на Binder, независимо от Jupyter Lab и без установки.
Магические функции
Одна из крайне удобных составляющих Jupyter Notebook – это специальные магические функции, облегчающие задачи при добавлении их в начало соответствующих ячеек. Так, например, вставка %matplotlib inline приводит к автоматическому выводу изображений matplotlib непосредственно в вывод ячейки. Примеры других команд представлены ниже, с полным списком магических функций вы можете ознакомиться здесь.
Тайминг
- %time – определяет время выполнения команды
- %timeit – определяет среднее время выполнения команды, многократно повторяя ее
- %%time – определяет время выполнения ячейки
- %%timeit – определяет среднее время выполнения ячейки
Профилирование
- %prun – показывает как много времени подпрограмма тратит в каждой из функций
- %mprun – трэкинг использования памяти
Логирование
- %logstart, %logstop – начало и завершение логирования соответственно
- %logoff, %logon – временная остановка и рестарт логирования
- %logstate – статус логирования
- %history – выводит список введенных команд в хронологическом порядке
Дебаггинг
- %debug – собственный интерфейс для ipdb
- %pdb – управление автоматическим вызовом pdb
Общие методы магических функций
- %lsmagic – список доступных магических функций
- %automagic – включает/выключает возможность вызова магических функций без начального знака процента
- %magic – выводит информацию о магических функциях системы
Работа с директориями
- %pwd – вывод текущей рабочей директории
- %cd – изменить текущую рабочую директорию
- %bookmark – создание закладок к какой-либо директории (по умолчанию – к текущей)
- %dhist – вывод истории посещенных директорий
- %dirs – возвращает текущий стек директорий
Псевдонимы и замены стандартного использования
- %alias alias_name cmd – определяет псевдоним alias_name для системной команды cmd
- %alias_magic – создает псевдоним для магической функции, например, %alias_magic t timeit
- %autocall – делает возможным вызов функций без использования скобок
- %unalias – удаление псевдонима
- %macro – позволяет задать имя для последующего перезапуска или сохранения нескольких ячеек
Импорт и экспорт кода
- %run – выполнение кода из файлов Python и блокнотов Jupyter
- %load – загрузка кода напрямую в ячейку с использованием локального или сетевого файла
- %pastebin – загрузка кода ячейки на Github Gist
- %pfile – печать файла в ячейке
- %psource – вывод программного кода объекта
- %save – запись набора строк или macro в файл с заданным именем
- %%writefile [-a] filename – запись содержимого ячейки в файл filename (опционально -a при добавлении текста в конец файла вместо перезаписи)
Переменные среды и пространство имен
- %env – управление переменными среды без перезапуска сервера
- %reset – очистка пространства имен
- %who – анализ доступных переменных глобального пространства имен
- %who_ls – вывод отсортированного списка доступных переменных
Вывод документации и поиск информации
- %pdoc – печать строки документации объекта
- %pinfo – детализированная информация об объекте (аналог ?object или object?)
- %pinfo2 – еще более развернутая информация об объекте (аналог ??object или object??)
- %psearch – поиск объекта в пространстве имен, в том числе по нестрогим правилам
Другие
- %pprint – включение/выключение pprint
- %precision – задание точности и способа отображения чисел
- %pylab – загрузка numpy и matplotlib для интерактивной работы
Выполнение shell-команд
Блокноты позволяют вызвать любую shell-команду прямо из ячейки. Например, так можно быстро установить недостающую библиотеку:
!pip install numpy
Запись формул в LaTeX
Markdown ячейки поддерживают отрисовку LaTeX, записываемого стандартным образом при помощи знаков $$.
Использование разных языков
В одном блокноте можно использовать сразу несколько языков программирования. Обозначив это при помощи двух знаков процента в начале ячейки, например, %%python2, %%python3, %%R, %%bash и т. д. Идентичным образом можно получать отрисовку ячеек с кодом в LaTeX, поставив в начале ячейки %%latex. Аналогично служат команды %%html, %%javascript (или %%js), %%markdown, %%ruby, %%sh.
Блокноты (ноутбуки) в JupyterLab
Блокноты Jupyter (.ipynb файлы) полностью поддерживаются в JupyterLab. Формат документов идентичен классическому Jupyter Notebook. Имеющиеся у вас блокноты будут аналогичным образом отображаться в JupyterLab.
Кроме того, вы можете использовать множественные отображения одного ноутбука для удобной работы с различными местами большого документа.
Для удобства работы вы можете временно скрывать и отображать большие куски вывода данных при помощи соответствующей кнопки слева от каждой ячейки.
Альтернативный вариант просмотра – использование скроллинга или вывода результатов ячейки в отдельную вкладку.
Автодополнения по клавише Tab в сравнении с Jupyter Notebook включают дополнительную информацию о типах соответствующих объектов.
Подсказки, активируемые при помощи Shift Tab содержат дополнительную информацию об объектах.
Вы также можете подключить консоль, чтобы вести лог сделанных вычислений в том порядке, в каком они были сделаны в блокноте. Консоль можно использовать как место для интерактивной проверки различных небольших идей без изменения блокнота. Для этого из консольного меню блокнота выберите "Create Console for Notebook".
Терминалы
Терминалы JupyterLab обеспечивают полную поддержку для системных оболочек (bash, tcsh и т. д.) на Mac/Linux и PowerShell на Windows. Через терминал вы можете запустить практически любую программу, включая vim или emacs.
Управление ядрами и терминалами
Вкладка Running в боковой панели показывает список всех ядер и терминалов, запущенных в данный момент.
Как и в классическом Jupyter Notebook, когда вы закрываете вкладку документа, консоли или терминала, соответствующее ядро или терминал продолжают работу на сервере, и у вас остается возможность подключиться к ним позже. Вкладка Running позволяет вам заново открыть соответствующий инструмент или выключить его.
Палитра команд
Все пользовательские действия в JupyterLab обрабатываются при помощи централизованной командной системы. Эти команды являются общими и используются совместно во всех элементах JupyterLab. Палитра команд в боковой панели предоставляет способ для их быстрого поиска и запуска.
Перенаправление кода консоли
В архитектуре Jupyter ядра представляют собой отдельные процессы, запускаемые сервером, которые работают с определенным кодом при помощи соответствующего языка и окружения. JupyterLab позволяет запускать код из любого открытого текстового документа, вызвав из контекстного меню команду "Create Console for Editor". Наиболее частым примером такой необходимости служат вкрапления кода, включенные в Markdown-разметку, которые можно запустить в консоли еще более просто по горячей клавише Shift Enter.
Файлы различных форматов
В архитектуре JupyterLab существенное внимание уделено отображению и редактированию данных в самых разных форматах – и загружаемым в качестве входных данных, и выгружаемым на выходе. Формат файлов автоматически определяется по расширению файла или его имени при отсутствии расширения. Как было упомянуто выше, файлы могут открываться в нескольких представлениях, например, в редакторе и средстве просмотра.
Для того, чтобы использовать эти различные форматы данных в качестве выходных данных в блокноте или консоли вы можете использовать соответствующий API для отображения, например, запуск следующего кода
from IPython.display import display, HTML display(HTML('<h1>Hello World</h1>'))
приведет к отображению соответствующего HTML-коду блока.
Кратко опишем какие еще форматы в текущий момент поддерживаются (соответствующие видеоиллюстрации можно посмотреть на странице документации):
-
- Markdown. При этом работает в том же духе, что и внутри ячеек, то есть, в частности отображаются формулы, записанные в LaTeX.
- Изображения. Поддерживаемые форматы: .bmp, .gif, .jpeg, .jpg, .png, .svg. Можно использовать плюс и минус, чтобы производить зум изображения, [ и ] для поворота изображения, H и V для горизонтального и вертикального отражения, I – для инвертирования цветов. Для svg изображений есть также соответствующий редактор.
- Файлы с разделением столбцов разделителями. То есть .csv файлы (и .tsv при изменении расширения). Также имеется и средство просмотра с возможностью выбора разделителя, и редактора. JupyterLab в зависимости от ограничения используемого браузера умеет открывать работать через эти интерфейсы с довольно большими файлами, для Chrome это порядка 730 Мб.
- JSON-файлы. Отображает данные в виде соответствующей древовидной структуры, также есть возможность редактирования.
- HTML, LaTeX, PDF, Vega/Vega-Lite, Virtual DOM.
Расширения
Архитектура JupyterLab построена с возможностью дальнейшего расширения среды. Расширения позволяют добавлять новые темы, средства просмотра других файлов или отрисовки других форматов внутри блокнотов, добавляют дополнительные вкладки в меню и команды в Command Pallete, создают возможности дополнительной настройки системы.
Расширения JupyterLab представляют собой npm-пакеты (стандартные пакеты для JavaScript-разработки). Многие из них разработаны самим сообществом на GitHub, соответственно вы можете найти их в этом топике. Также вам могут быть интересны старые решения для расширения магических функций.
Основной способ для включения расширений выглядит следующим образом:
jupyter labextension install my-extension
где my-extension – имя того расширения, что вы хотите установить. Можно использовать как расширения, находящиеся среди пакетов в npm, так и созданные вами. Дополнительно об этом читайте на странице документации.
Среди интересных расширений стоит обратить внимание, в частности, на расширение RISE, позволяющее показывать блокнот Jupyter в виде презентации (интересный пример).
Серверы и совместная работа
Сервис mybinder предоставляют доступ к Jupiter Notebook и JupyterLab со всеми установленными библиотеками, так что пользователь может изучать и запускать созданный вами проект, имея под рукой только браузер.
Вы также можете создать свою собственную систему с помощью JupyterHub, который, в частности, позволяет совместно работать нескольким пользователям с одним и тем же блокнотом, аналогично Google-документам, то есть один пользователь видит в процессе, какие изменения вносятся остальными.
В качестве примера использования JupyterHub как преднастроенной среды для совместной работы множества пользователей посмотрите видео о применении этого инструмента в аналитике Яндекса.
Другие статьи по теме:
- От новичка до профи в машинном обучении за 3 месяца
- 11 must-have алгоритмов машинного обучения для Data Scientist
- Вопросы для собеседования на позицию Data Scientist в топовых компаниях
- Стартап в сфере искусственного интеллекта в 2018
- Большая подборка материалов по машинному обучению: книги, видеокурсы, онлайн-курсы
Комментарии