JupyterLab и Jupyter Notebook — мощные инструменты Data Science
Подробно рассказываем об инструментах семейства 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).
Процесс «схлопывания» боковой панели происходит по клику на открытой вкладке, как это проиллюстрировано в коротком видео ниже.
https://www.youtube.com/watch?v=PlJGecfetek
Использование расширений JupyterLab также позволяет добавлять в боковую панель дополнительные вкладки.
Основная рабочая область
Основная рабочая область позволяет группировать документы (блокноты, текстовые файлы и пр.) и другие инструменты (терминалы, консоли и т. д.) в виде панелей с вкладками, размер и расположение которых можно изменить перетаскиванием.
https://www.youtube.com/watch?v=Ka8qS7CO1XQ
Вкладки и режим работы с отдельным документом
Вкладка Tabs в боковой панели показывает список открытых документов и инструментов в рабочей области:
Эта же информация доступна на вкладке Tabs в menu:
Часто полезно сфокусироваться на отдельном документе и инструменте без того, чтобы закрывать все остальные вкладки в рабочей области. Для этого в JupyterLab есть режим работы с отдельным документом. Его можно запустить из панели View ("Single-Document Mode") или воспользоваться сочетанием горячих клавиш (по умолчанию Ctrl+Shift+Enter).
https://www.youtube.com/watch?v=DO7NOenMQC0
Контекстные меню
Многие составляющие JupyterLab, такие как блокноты, текстовые файлы, консоли и вкладки, имеют собственные контекстные меню.
https://www.youtube.com/watch?v=y30fs6kg6fc
Для использования оригинального контекстного меню браузера при вызове контекстного меню зажимайте Shift.
Горячие клавиши
Аналогично классическому Jupyter Notebook, вы можете использовать для навигации и запуска инструментов горячие клавиши, которые можно настроить при помощи Advanced Settings Editor в меню в панели Settings.
https://www.youtube.com/watch?v=rhW3kAExCik
Вы также можете настроить текстовый редактор так, чтобы использовать сочетания горячих клавиш из vim, emacs или Sublime Text. Для этого в меню в панели Settings выберите строку Text Editor Key Map.
https://www.youtube.com/watch?v=COheO7sA4-U
Работа с файлами
Браузер файлов и меню File позволяют открывать, создавать, удалять, переименовывать, скачивать, копировать и делиться файлами и директориями. Файлы открываются стандартно – двойными кликом в браузере файлов из боковой панели.
https://www.youtube.com/watch?v=Rh-vwjTwBTI
Также вы можете перетащить файл в рабочую область, создав таким образом дополнительную вкладку сразу в нужном вам месте.
https://www.youtube.com/watch?v=uwMmHeDmRxk
Для некоторых типов файлов поддерживаются множественные представления. Например, вы можете открыть файл Markdown в текстовом редакторе или в форме HTML-страницы. Расширения JupyterLab позволяют использовать дополнительные методы просмотра/редактирования различных файлов, добавляя в контекстное меню новые строки "Open With...".
https://www.youtube.com/watch?v=1kEgUqAeYo0
Удобная особенность JupyterLab заключается в том, что разные представления файла синхронизируются между собой. То есть, работая, например, с тем же файлом Markdown в редакторе, вы сразу же видите как он отрисовывается в HTML.
https://www.youtube.com/watch?v=87ALbxm1Y3I
Создавать новые файлы и инструменты можно кликнув на плюс в браузере файлов. Это вызывает новую вкладку с лаунчером в рабочей области, позволяющим выбрать используемый инструмент.
https://www.youtube.com/watch?v=QL0IxDAOEc0
Того же результата можно добиться на вкладке New в меню File.
В качестве текущей рабочей директории используется открытая в браузере файлов, за исключением терминала, для которого всегда открывается домашний каталог.
https://www.youtube.com/watch?v=OfISSOTiGTY
Новый файл создается с именем по умолчанию. Переименовывается файл из контекстного меню браузера файлов или вкладки, на которой открыт файл.
https://www.youtube.com/watch?v=y3xzXelypjs
Файлы также могут быть загружены в текущую директорию переносом их в панель браузера файлов или при помощи кнопки "Upload files" в верхней части браузера файлов.
https://www.youtube.com/watch?v=1bd2QHqQSH4
Текстовый редактор
Текстовый редактор JupyterLab имеет инструмент подсветки синтаксиса, настройки отступов (табы/пробелы) и сочетаний горячих клавиш.
https://www.youtube.com/watch?v=IuqmxkHsS7o
Все редакторы 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.
https://www.youtube.com/watch?v=J9xoTGdqWIo
Кроме того, вы можете использовать множественные отображения одного ноутбука для удобной работы с различными местами большого документа.
https://www.youtube.com/watch?v=SQn9aRc050w
Для удобства работы вы можете временно скрывать и отображать большие куски вывода данных при помощи соответствующей кнопки слева от каждой ячейки.
https://www.youtube.com/watch?v=WgiX3ZRaTiY
Альтернативный вариант просмотра – использование скроллинга или вывода результатов ячейки в отдельную вкладку.
https://www.youtube.com/watch?v=U4usAUZCv_c
https://www.youtube.com/watch?v=Asa_ML45HP8
Автодополнения по клавише Tab в сравнении с Jupyter Notebook включают дополнительную информацию о типах соответствующих объектов.
https://youtu.be/MuNr0i8LgpM
Подсказки, активируемые при помощи Shift Tab содержат дополнительную информацию об объектах.
https://www.youtube.com/watch?v=TgqMK1SG7XI
Вы также можете подключить консоль, чтобы вести лог сделанных вычислений в том порядке, в каком они были сделаны в блокноте. Консоль можно использовать как место для интерактивной проверки различных небольших идей без изменения блокнота. Для этого из консольного меню блокнота выберите "Create Console for Notebook".
https://www.youtube.com/watch?v=eq1l7DBngQQ
Терминалы
Терминалы JupyterLab обеспечивают полную поддержку для системных оболочек (bash, tcsh и т. д.) на Mac/Linux и PowerShell на Windows. Через терминал вы можете запустить практически любую программу, включая vim или emacs.
Управление ядрами и терминалами
Вкладка Running в боковой панели показывает список всех ядер и терминалов, запущенных в данный момент.
Как и в классическом Jupyter Notebook, когда вы закрываете вкладку документа, консоли или терминала, соответствующее ядро или терминал продолжают работу на сервере, и у вас остается возможность подключиться к ним позже. Вкладка Running позволяет вам заново открыть соответствующий инструмент или выключить его.
https://youtu.be/gDM5lwU6Dmo
https://youtu.be/PBDN9AJWBlw
Палитра команд
Все пользовательские действия в JupyterLab обрабатываются при помощи централизованной командной системы. Эти команды являются общими и используются совместно во всех элементах JupyterLab. Палитра команд в боковой панели предоставляет способ для их быстрого поиска и запуска.
https://www.youtube.com/watch?v=lPuj57UkxYs
Перенаправление кода консоли
В архитектуре Jupyter ядра представляют собой отдельные процессы, запускаемые сервером, которые работают с определенным кодом при помощи соответствующего языка и окружения. JupyterLab позволяет запускать код из любого открытого текстового документа, вызвав из контекстного меню команду "Create Console for Editor". Наиболее частым примером такой необходимости служат вкрапления кода, включенные в Markdown-разметку, которые можно запустить в консоли еще более просто по горячей клавише Shift Enter.
https://www.youtube.com/watch?v=Kz3e7SgqTnI
Файлы различных форматов
В архитектуре 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
- Большая подборка материалов по машинному обучению: книги, видеокурсы, онлайн-курсы
Комментарии 0