Если вы пользуетесь на повседневной основе в средами вроде Google Colab или Jupyter Notebook, то наверняка хотя бы раз сталкивались с «магическими» командами. В статье я не только перечислю самые полезные из них, но и покажу, как они работают на примерах, а также дополню фишечками.
Чтобы не тратить драгоценный умственный ресурс, запомните всего одну директиву – вывести список всех команд. Запустив %lsmagic, получаем вот такой интересный список:
Available line magics: %alias %alias_magic %autoawait %autocall %automagic %autosave %bookmark %cat %cd %clear %colors %conda %config %connect_info %cp %debug %dhist %dirs %doctest_mode %ed %edit %env %gui %hist %history %killbgscripts %ldir %less %lf %lk %ll %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %ls %lsmagic %lx %macro %magic %man %matplotlib %mkdir %more %mv %notebook %page %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %pip %popd %pprint %precision %prun %psearch %psource %pushd %pwd %pycat %pylab %qtconsole %quickref %recall %rehashx %reload_ext %rep %rerun %reset %reset_selective %rm %rmdir %run %save %sc %set_env %shell %store %sx %system %tb %tensorflow_version %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode Available cell magics: %%! %%HTML %%SVG %%bash %%bigquery %%capture %%debug %%file %%html %%javascript %%js %%latex %%markdown %%perl %%prun %%pypy %%python %%python2 %%python3 %%ruby %%script %%sh %%shell %%svg %%sx %%system %%time %%timeit %%writefile Automagic is ON, % prefix IS NOT needed for line magics.
Magic Commands – это часть IPython, интерактивной оболочки с дополнительными командами, подсветкой кода и автодополнением. Команды выполняют разнообразные вспомогательные операции. Те, что начинаются с одного символа «%», применяются к одной строке, другие — ко всей ячейке. Давайте разберем самые полезные “колабисту” мэджики.
Измеряет время выполнения ячейки. Это незаменимая утилита при оценке качества рефакторинга. Допустим, вы узнали, что цикл for замедляет код и переписали некоторый участок на перечисление (enumeration). Используя %%time, вы сможете с легкостью оценить прирост в общей скорости исполнения кода. Покажу на примере.
Объявим наш итерируемый список:
lst = [‘lorem’, ‘ipsum’, ‘dolor’, ‘sit’, ‘amen’]
Замерим скорость итерации списка циклом while:
%%time i = 0 while i < len(lst): print(lst) i += 1
Ячейка выведет, помимо самих элементов списка, еще и время, затраченное на исполнение сниппета – 99 µs (миллионной доли секунды):
lorem ipsum dolor sit amen CPU times: user 83 µs, sys: 16 µs, total: 99 µs Wall time: 103 µs
Перепишем код на функцию enumerate():
%%time for index, value in enumerate(lst): print(value) lorem ipsum dolor sit amen CPU times: user 112 µs, sys: 11 µs, total: 123 µs Wall time: 127 µs
Получается, что на маленьких списках while даже выигрывает у enumerate (99 микросекунд против 123).
Cкрывает выходные данные ячейки. Это полезно в разделе, где вы устанавливаете необходимые библиотеки: сводка процесса установки занимает много места и часто не является важной информацией, так что ее можно скрыть.
%%capture !pip install trio
Позволяет использовать параллельные процессы. Ультраполезная фича, когда речь заходит о предварительной обработке данных, где на одном конвейере предстоит обработать разные столбцы крупного датафрейма:
import trio from types import CoroutineType def trio_runner(coro:CoroutineType): print(‘running asynchronous code’) async def corowrap(coro): return await coro return trio.run(corowrap, coro)
В следующей ячейке запускаем магическую команду:
%autoawait trio_runner async def async_hello(name): await trio.sleep(1) print(f’Hello {name} world!’) await trio.sleep(1) await async_hello(‘async’)
На выходе получаем параллельно исполненные ячейки:
>>> running asynchronous code Hello async world!
Активируeт интерактивный отладчик.
Эта команда поддерживает два способа активации: перед выполнением кода (точка останова) и post-mortem («посмертно»). Второй режим вы можете активировать, запустив %debug без каких-либо аргументов. Если только что произошло исключение, это позволит в интерактивном режиме проверить путь ошибки:
from IPython.core.debugger import set_trace def my_function(): x = 5 set_trace() print(5) my_function()
Ячейка не выведет цифру пять, хоть последняя часть функции этого и требует. Строка с print() будет исполнена, если прервать отладку, нажав на кнопку стоп:
—KeyboardInterrupt— KeyboardInterrupt: Interrupted by user 5
Множество сторонних библиотек подключается к проекту именно этой командой.
Тестировщик АО «Гринатом», , можно удалённо, По итогам собеседования tproger.ru Вакансии на tproger.ru
Вот интересная фишка: помимо установки модуля по названию:
!pip install fbprophet
вы можете устанавливать некоторые инструменты с помощью ссылки на репозиторий.
В последнее время для одной из библиотек, которую использую при предварительном анализе данных – pandas_profiling, наблюдалась проблема установки стандартным способом. А вот с инсталляцией по ссылке все работает:
!pip install
Указывает число знаков после запятой (decimal number) для числовых объектов.
from math import pi %precision 3 pi 3.142
Перезапускает предыдущую ячейку. В моей практике это полезно, чтобы пересобрать, к примеру, эмоциональную окраску (позитивная / негативная) реплики пользователя на базе библиотеки dostoevsky. Но пример приведу чуть проще:
print(‘Привет’) >>> Привет %rerun >>> === Executing: === print(‘Привет’) === Output: === Привет
Отрендерит ячейку как код HTML. Таким же образом исполнит код на Javascript, Perl или Ruby! Вот это действительно удивительное дополнение. Только используйте с осторожностью!
Более того, для учебы нередко пригождается верстка формул на специальном стандарте LaTeX, или справочной информации на Markdown. Для самых креативных предусмотрели даже рендеринг из .svg.
%%html <html> <ul> <li>Element 1</li> <li>Element 2</li> </ul> </html>
Помню, на учебе пару раз выполнила некоторые из магических команд. И забыла до тех пор, пока случайно не наткнулась снова и не влюбилась окончательно.
Со временем стало ясно, почему команды назвали магическими. Они очень полезны для выполнения различных системных операций прямо из ячеек ноутбука, а также для оптимизации вашего кода и анализа производительности.
Попробуйте во время работы в ноутбуке подыскать какую-нибудь специфическую потребность, и вы убедитесь – многие из таких решаются силами IPython.
Если вы хотите поиграться командами, то в я собрала их в отдельный ноутбук, не требующий дополнительной настройки.
%lsmagic
Чтобы не тратить драгоценный умственный ресурс, запомните всего одну директиву – вывести список всех команд. Запустив %lsmagic, получаем вот такой интересный список:
Available line magics: %alias %alias_magic %autoawait %autocall %automagic %autosave %bookmark %cat %cd %clear %colors %conda %config %connect_info %cp %debug %dhist %dirs %doctest_mode %ed %edit %env %gui %hist %history %killbgscripts %ldir %less %lf %lk %ll %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %ls %lsmagic %lx %macro %magic %man %matplotlib %mkdir %more %mv %notebook %page %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %pip %popd %pprint %precision %prun %psearch %psource %pushd %pwd %pycat %pylab %qtconsole %quickref %recall %rehashx %reload_ext %rep %rerun %reset %reset_selective %rm %rmdir %run %save %sc %set_env %shell %store %sx %system %tb %tensorflow_version %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode Available cell magics: %%! %%HTML %%SVG %%bash %%bigquery %%capture %%debug %%file %%html %%javascript %%js %%latex %%markdown %%perl %%prun %%pypy %%python %%python2 %%python3 %%ruby %%script %%sh %%shell %%svg %%sx %%system %%time %%timeit %%writefile Automagic is ON, % prefix IS NOT needed for line magics.
Magic Commands – это часть IPython, интерактивной оболочки с дополнительными командами, подсветкой кода и автодополнением. Команды выполняют разнообразные вспомогательные операции. Те, что начинаются с одного символа «%», применяются к одной строке, другие — ко всей ячейке. Давайте разберем самые полезные “колабисту” мэджики.
%%time
Измеряет время выполнения ячейки. Это незаменимая утилита при оценке качества рефакторинга. Допустим, вы узнали, что цикл for замедляет код и переписали некоторый участок на перечисление (enumeration). Используя %%time, вы сможете с легкостью оценить прирост в общей скорости исполнения кода. Покажу на примере.
Объявим наш итерируемый список:
lst = [‘lorem’, ‘ipsum’, ‘dolor’, ‘sit’, ‘amen’]
Замерим скорость итерации списка циклом while:
%%time i = 0 while i < len(lst): print(lst) i += 1
Ячейка выведет, помимо самих элементов списка, еще и время, затраченное на исполнение сниппета – 99 µs (миллионной доли секунды):
lorem ipsum dolor sit amen CPU times: user 83 µs, sys: 16 µs, total: 99 µs Wall time: 103 µs
Перепишем код на функцию enumerate():
%%time for index, value in enumerate(lst): print(value) lorem ipsum dolor sit amen CPU times: user 112 µs, sys: 11 µs, total: 123 µs Wall time: 127 µs
Получается, что на маленьких списках while даже выигрывает у enumerate (99 микросекунд против 123).
%%capture
Cкрывает выходные данные ячейки. Это полезно в разделе, где вы устанавливаете необходимые библиотеки: сводка процесса установки занимает много места и часто не является важной информацией, так что ее можно скрыть.
%%capture !pip install trio
%autoawait
Позволяет использовать параллельные процессы. Ультраполезная фича, когда речь заходит о предварительной обработке данных, где на одном конвейере предстоит обработать разные столбцы крупного датафрейма:
import trio from types import CoroutineType def trio_runner(coro:CoroutineType): print(‘running asynchronous code’) async def corowrap(coro): return await coro return trio.run(corowrap, coro)
В следующей ячейке запускаем магическую команду:
%autoawait trio_runner async def async_hello(name): await trio.sleep(1) print(f’Hello {name} world!’) await trio.sleep(1) await async_hello(‘async’)
На выходе получаем параллельно исполненные ячейки:
>>> running asynchronous code Hello async world!
%debug
Активируeт интерактивный отладчик.
Эта команда поддерживает два способа активации: перед выполнением кода (точка останова) и post-mortem («посмертно»). Второй режим вы можете активировать, запустив %debug без каких-либо аргументов. Если только что произошло исключение, это позволит в интерактивном режиме проверить путь ошибки:
from IPython.core.debugger import set_trace def my_function(): x = 5 set_trace() print(5) my_function()
Ячейка не выведет цифру пять, хоть последняя часть функции этого и требует. Строка с print() будет исполнена, если прервать отладку, нажав на кнопку стоп:
—KeyboardInterrupt— KeyboardInterrupt: Interrupted by user 5
%pip
Множество сторонних библиотек подключается к проекту именно этой командой.
Тестировщик АО «Гринатом», , можно удалённо, По итогам собеседования tproger.ru Вакансии на tproger.ru
Вот интересная фишка: помимо установки модуля по названию:
!pip install fbprophet
вы можете устанавливать некоторые инструменты с помощью ссылки на репозиторий.
В последнее время для одной из библиотек, которую использую при предварительном анализе данных – pandas_profiling, наблюдалась проблема установки стандартным способом. А вот с инсталляцией по ссылке все работает:
!pip install
You do not have permission to view link please Вход or Регистрация
from pandas_profiling import ProfileReport%precision
Указывает число знаков после запятой (decimal number) для числовых объектов.
from math import pi %precision 3 pi 3.142
%rerun
Перезапускает предыдущую ячейку. В моей практике это полезно, чтобы пересобрать, к примеру, эмоциональную окраску (позитивная / негативная) реплики пользователя на базе библиотеки dostoevsky. Но пример приведу чуть проще:
print(‘Привет’) >>> Привет %rerun >>> === Executing: === print(‘Привет’) === Output: === Привет
%%html
Отрендерит ячейку как код HTML. Таким же образом исполнит код на Javascript, Perl или Ruby! Вот это действительно удивительное дополнение. Только используйте с осторожностью!
Более того, для учебы нередко пригождается верстка формул на специальном стандарте LaTeX, или справочной информации на Markdown. Для самых креативных предусмотрели даже рендеринг из .svg.
%%html <html> <ul> <li>Element 1</li> <li>Element 2</li> </ul> </html>
Заключение
Помню, на учебе пару раз выполнила некоторые из магических команд. И забыла до тех пор, пока случайно не наткнулась снова и не влюбилась окончательно.
Со временем стало ясно, почему команды назвали магическими. Они очень полезны для выполнения различных системных операций прямо из ячеек ноутбука, а также для оптимизации вашего кода и анализа производительности.
Попробуйте во время работы в ноутбуке подыскать какую-нибудь специфическую потребность, и вы убедитесь – многие из таких решаются силами IPython.
Если вы хотите поиграться командами, то в я собрала их в отдельный ноутбук, не требующий дополнительной настройки.