Руководство для начинающих о том, как сделать Jupyter Notebook быстрее, мощнее и круче
Часть 1, Часть 2
Магические команды (Magic)
Magic — это отличные команды, упрощающие нашу жизнь при решении определенных задач. Часто похожи на команды Unix, но реализованы на Python. Магических команд в Python великое множество!
Существует 2 типа магических команд: строчные (применяются к одной строке) и ячеечные (применимы ко всей ячейке). Строчные команды начинаются с символа %
, а ячеечные — с двух %%
. Просмотреть все доступные команды можно через:
%lsmagic
Установка среды
Через%env
вы можете управлять переменными среды в блокноте без перезагрузки. Для вывода списка всех имеющихся переменных в среде достаточно выполнить эту команду без переменных.
Вставка кода
С помощью %load
можно добавлять код из внешнего скрипта (более подробно см. ниже). Например:
%load basic_imports.py
берет файл basic_imports.py
и загружает его в блокнот.
Экспорт содержимого ячейки
Это невероятно полезная опция. %%writefile
позволяет экспортировать содержимое ячейки в любое время и с минимальными усилиями. Например,
%%writefile thiscode.py
Здесь вы пишите какой-то код или функцию,
которые хотите экспортировать
и, возможно, использовать в дальнейшем!
Случалось ли вам в каждом документе импортировать одно и то же или добавлять те же самые функции? Теперь вы можете написать код один раз и пользоваться им всюду!
К примеру, можно создать файл basic_imports.py
, содержащий следующий код:
%writefile basic_imports.py
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
Так вы создадите .py файл, в котором будет перечислен основной импорт.
Загрузить его можно через:
%load basic_imports.py
Выполнение данной команды заменяет содержимое ячейки загруженным файлом.
# %load imports.py
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
Теперь можно еще раз запустить ячейку, чтобы импортировать все нужные модули и начать работу.
Сохранение и повторное использование кода через %macro
Вам, как и большинству людей, не раз приходилось прописывать одно и то же. Это могут быть и часто вычисляемые уравнения, и регулярно создаваемые строки кода. В Jupyter можно сохранять фрагменты кода в виде исполняемых макросов. Макрос — это просто код. Поэтому он может содержать переменные, которые необходимо определять до выполнения. Давайте попробуем!
Например:
name = ‘Kitten’
Для определения макроса нужен какой-то код. Мы можем сохранить почти что угодно: будь то строка, функция или что-то другое.
print(‘Hello, %s!’ % name)
Hello, Kitten!
Настраивать повторно используемые макросы мы будем через магические команды %load
и %macro
. Названия макросов принято начинать с двойного подчеркивания — так они отличаются от других переменных.
%macro -q __hello_you 32
Магическая команда %macro
принимает имя и номер ячейки (или номера). Для большей лаконичности кода мы передаем –q
. %store
позволяет сохранять любую переменную для использования в других сеансах. В примере выше передавалось имя созданного макроса. Таким образом, мы сможем пользоваться им в других блокнотах или при отключении ядра.
Для загрузки макроса достаточно выполнить следующую команду:
%load __hello_you
А для выполнения макроса можно просто запустить ячейку с именем макроса.
__hello_you Hello, Kitten!
Получилось!
Давайте изменим переменную, которая использовалась в макросе.
name = ‘Muffins’
Теперь при запуске макроса берется это измененное значение.
__hello_you Hello, Muffins!
Все работает, поскольку макросы выполняют сохраненный код в области ячейки. Если бы не было определено name
, то мы бы увидели ошибку.
Хотите пользоваться одинаковым макросом во всех блокнотах?
Магическая команда store
%store
позволяет хранить макрос и пользоваться им во всех блокнотах.
Попробуйте открыть новый блокнот и повторить пример с %store -r __hello_you
.
%store -r __hello_you name = ‘Rambo’ %load __hello_you Hello, Rambo!
Магическая команда run
Команда %run
выполняет код и отображает любой вывод, включая графики Matplotlib. С этой командой можно выполнять даже целые блокноты.
%run
способен выполнять Python-код из .py-файлов. А еще он подходит для выполнения других блокнотов Jupyter.
Магическая команда pycat
%pycat
покажет вам содержимое скрипта, если вдруг вы забыли, что в нем находится.
%pycat basic_imports.py
Автосохранение
Магическая команда %autosave
позволяет изменять частоту автосохранения блокнота в его файл контрольных точек.
%autosave 60
Команда выше реализует автосохранение каждые 60 секунд.
Отображение графиков
%matplotlib inline
Скорее всего, вы и так знаете, что %matplotlib inline
отображает графики Matplotlib в выводе ячейки. То есть вы можете добавлять графики и диаграммы Matplotlib напрямую в сами блокноты. Логичнее будет запустить эту команду в начале блокнота — в самой первой ячейке.
Управление временем
Существует две магические команды iPython для управления временем — %%time
и %timeit
. Они полезны тогда, когда код выполняется медленно, и вы пытаетесь отыскать причину. Обе команды имеют строковые и ячеечные режимы.
В отличие от %time
, %timeit
многократно запускает код и вычисляет среднее значение.
%%time
дает информацию о единичном запуске кода в ячейке.
%%timeit
использует Python-модуль timeit, который выполняет выражение несколько раз, а затем выдает среднее значение. Количество выполнений задается через –n
, а количество повторений — через -r
.
Выполнение кода из другого ядра
Вы можете выполнять ячейку на определенном языке. Существуют расширения для нескольких языков. Например:
%%bash
%%HTML
%%python
%%python2
%%python3
%%ruby
%%perl
%%capture
%%javascript
%%js
%%latex
%%markdown
%%pypy
Например, для рендеринга HTML в блокноте выполните следующее:
%%HTML
This is <em>really</em> neat!
Либо воспользуйтесь напрямую LaTeX через:
%%latex
This is an equation: $E = mc²$
Магическая команда who
Команда %who
без аргументов выдает перечень переменных, существующих в глобальной области видимости. При передаче параметра (например, str
) перечисляются переменные только этого типа. Так что если написать:
%who str
то вы увидите:
Магическая команда prun
%prun
показывает количество времени, которое программа тратит на каждую функцию. %prun statement_name
выводит упорядоченную таблицу с информацией о количестве вызовов каждой внутренней функции внутри оператора, времени каждого вызова, а также среднем времени всех запусков функции.
Магический отладчик в Python
В Jupyter есть собственный интерфейс для отладчика. С ним вы можете зайти в тело каждой функции и посмотреть, что там происходит. Активировать опцию можно через запуск %pdb
в начале ячейки.
Графики в высоком разрешении
Одна простая строка магической команды iPython способна вывести график в двойном расширении для дисплеев Retina. Однако на прочих экранах ничего не отобразится.
%config InlineBackend.figure_format =’retina’
Пропуск ячейки (без выполнения)
В начале ячейки добавьте %%script false
%%script false
Здесь может быть длинный
код, который вы пока
что не хотите выполнять
Уведомления
Это настоящий лайфхак для Python при запуске кода с длительным временем выполнения. Если вы не готовы провести весь день перед экраном компьютера, но хотите узнать о завершении выполнения кода, то можно настроить для этого звук-уведомление.
Для Linux (и Mac)
import os
duration = 1 # секунды
freq = 440 # Hz
os.system(‘play — no-show-progress — null — channels 1 synth %s sine %f’ % (duration, freq))
Для Windows
import winsound
duration = 1000 # миллисекунды
freq = 440 # Hz
winsound.Beep(freq, duration)
Для работы уведомления потребуется sox
. Установить sox
можно через:
brew install sox
…при условии, что у вас уже установлен менеджер пакетов Homebrew.
А теперь пора веселья!
Вы познакомились с набором полезных подсказок и советов по оптимизации Jupyter Notebook. Этой информации должно хватить на начальных этапах работы с оболочкой.
Читайте также:
- Как увеличить ваши шансы на получение должности разработчика
- Python. Пять уловок, которые нужно знать, уже сегодня
- Использование свойств lazy в Kotlin для связывания представлений Android
Перевод статьи Anne Bonner: Tips, Tricks, Hacks, and Magic: How to Effortlessly Optimize Your Jupyter Notebook