Ques/Help/Req Топ самых полезных магических команд для завсегдатаев Colab

XakeR

Member
Регистрация
13.05.2006
Сообщения
1 912
Реакции
0
Баллы
16
Местоположение
Ukraine
Если вы пользуетесь на повседневной основе в средами вроде Google Colab или Jupyter Notebook, то наверняка хотя бы раз сталкивались с «магическими» командами. В статье я не только перечислю самые полезные из них, но и покажу, как они работают на примерах, а также дополню фишечками.

%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 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.

Если вы хотите поиграться командами, то в я собрала их в отдельный ноутбук, не требующий дополнительной настройки.
 
198 157Темы
635 128Сообщения
3 618 411Пользователи
Semifistokl22Новый пользователь
Верх