
Руководство для начинающих о том, как сделать 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. Этой информации должно хватить на начальных этапах работы с оболочкой.
Специально для сайта ITWORLD.UZ. Новость взята с сайта NOP::Nuances of programming