Секрет оптимизации процесса написания кода на Python в Jupyter Notebook, который все знают, но мало кто использует

Время – самый ценный ресурс, а также невосполнимый. Чаще всего осознание этого приходит в момент, когда истекает крайний срок выполнения поставленной задачи. Тогда мы начинаем анализировать, на что было оно потрачено, насколько рационально и была ли возможность сделать быстрее. Если данную ситуацию рассматривать с позиции IT-специалиста, то, на мой взгляд, поставленную задачу можно поделить на три этапа:

  1. «План» – разработать алгоритм решения и определить необходимые ресурсы;
  2. «Кодинг» – написать скрипт или SQL-запрос в зависимости от поставленной задачи;
  3. «Результат» – получить и проанализировать результат, в случае ошибки или медленной работы, провести отладку или оптимизацию.

Для каждого этапа существуют методы и инструменты, с помощью которых можно сократить временные трудозатраты, но более подробно хочу остановиться на этапе кодинга. Ведь на скорость, кроме высокого уровня владения языком программирования и наличие опыта, влияет уровень знания инструмента, в котором пишется код. Поэтому, IT-специалисты, которые не изучают доступный функционал своих рабочих приложений, упускают возможность повысить свою производительность.

Далее хочу поделиться своим опытом оптимизации процесса написания кода на Python в Jupyter Notebook.

Начнем с самого простого, что не требует дополнительной настройки, а именно с горячих клавиш (комбинаций кнопок на клавиатуре, при нажатии которых выполняются команды без использования мыши).

Часто используемые команды:

«Alt» + «Enter» – Выполнение текущей ячейки и перевод фокуса на новую ячейку, созданную ниже

«Shift» + «Enter» – Выполнение текущей ячейки и перевод фокуса на следующую

«Ctrl» + «Enter» – Выполнение текущей ячейки и сохранение фокуса на текущей ячейке

«Esc» => Переход из режима редактирования (edit mode) в командный (command mode):

«Esc» => «A» – Добавление пустой ячейки сверху или «B» – Добавление пустой ячейки снизу

«Esc» => «C» – Копирование ячейки и «V» её вставка

«Esc» => «X» – Вырезание ячейки и «V» её вставка

«Esc» => «DD» – Удаления ячейки

«Esc» => «Z» – Отмена удаления ячейки

Для применения к нескольким ячейкам:

«Esc» => «Shift» + «K» или «Up» – Выделение ячеек выше текущей

«Esc» => «Shift» + «J» или «Down» – Выделение ячеек ниже текущей

Для максимального исключения использования мыши:

«Esc» => «Shift» + «M» – Объединение нескольких ячеек

«Ctrl» + «Shift» + «–» – Разделение на несколько ячеек (поставьте курсор перед линией, с которой должна начаться вторая ячейка)

«Esc» => «00» – Перезапуск блокнота

«Esc» => «F» – Поиск и замена информации в ячейках

«Esc» => «Space» – Прокрутка блокнота вниз

«Esc» => «Shift + Space» – Прокрутка блокнота вверх

«Esc» => «1, 2, 3, 4, 5, 6» – Определение заголовка в markdown

«Esc» => «Y, M, R» – Конвертация типов ячеек (Code, Markdown, Raw)

«Esc» => «O» – Включение/Выключение вывода результата в ячейке

«Esc» => «L» – Включение/Выключение номеров строк в ячейке

На случай, если забыли и необходимо подсмотреть:

«Esc» => «H» – Вызывает окно помощь со списком горячих клавиш

«Esc» => «Ctrl + Shift +P» – Вызывает командную панель со списком горячих клавиш

Это не все команды, но, на мой взгляд, необходимый минимум для начала оптимизации процесса написания скрипта. И если вы ранее, при работе в программе, особенно с часто повторяющимися действиями, не использовали горячие клавиши, начинайте, так как отпадет необходимость выцеливать команды на панели инструментов и увеличится скорость создания скрипта за счет сокращения количества взаимодействий с мышью.

Перейдем к более тонкой настройки Jupyter Notebook с помощью расширений «Nbextensions», они улучшат функционал и существенно модифицируют пользовательский интерфейс.

Для этого необходимо установить пакет «jupyter_contrib_nbextensions» с помощью двух команд:

Pip install jupyter_contrib_nbextensions Jupyter contrib nbextension install —user

После в Jupyter Notebook на стартовой странице появится вкладка «Nbextensions» с перечнем расширений.

Секрет оптимизации процесса написания кода на Python в Jupyter Notebook, который все знают, но мало кто использует

При выборе одного из них, ниже подгружается описание и поле для настройки доступных параметров.

Секрет оптимизации процесса написания кода на Python в Jupyter Notebook, который все знают, но мало кто использует

На текущий момент для себя выделил три расширения:

  1. Hinterland – для первого введенного символа выпадает меню автозаполнения кода, для функции выводится описание, что исключает необходимость нажатия клавиши «Tab»
Секрет оптимизации процесса написания кода на Python в Jupyter Notebook, который все знают, но мало кто использует

2. Autopep8 – преобразует код Python в соответствии со стилевым руководством PEP8. Перед активацией расширения, дополнительно из командной строки запустить

Pip install autopep8 --user

Для преобразования написанного кода на панели инструментов появиться иконка в виде молота.

Секрет оптимизации процесса написания кода на Python в Jupyter Notebook, который все знают, но мало кто использует

3. Code Folding – в код добавляются метки в виде треугольников для скрытия, удобно при объемных функциях

Секрет оптимизации процесса написания кода на Python в Jupyter Notebook, который все знают, но мало кто использует

Общего списка какие расширения необходимо ставить нет, так как задачи, решаемые в Jupyter Notebook, разнообразны и лучше всего на собственном опыте его определять.

В дополнении предлагаю подумать о будущих задачах и создать свою базу знаний с помощью магических команд (magics).

Для создания и наполнения информацией используем команду «%%writefile» указываем в параметрах «—a» для добавления в файл, иначе будет перезаписываться и указываем имя файла «C:\Users\ … \Documents\MyBase.py», включив в него полный путь места хранения, после вставляем код, который хотим записать.

Пример:

%%writefile -a C:\Users\ ... \Documents\MyBase.py >>>"""#Определяем список файлов для обработки import os #Путь к папке на ПК path_file = r'\Users\...\Documents\ '[:-1] #Собираем имена файлов для обработки list_file = [] for file in os.listdir(path_file): if file.endswith(('.csv')): list_file """

Если сохранять в том формате, который указан в примере, а именно после magics-команды пропустить строку и после «>>>»»»» прописать краткое пояснение, а со следующей строки вставить сохраняемый скрипт до ««»»», то при открытии файла в текстовом редакторе Notepad++ и выборе синтаксиса Python, вся сохраненная информация будет разбита на блоки.

MyBase.py открытый в Notepad++
MyBase.py открытый в Notepad++

Для вывода данных из созданной базы знаний используем команду «%pycat» и указываем имя файла «C:\Users\ … \Documents\MyBase.py», включив в него полный путь места хранения.

Пример:

%pycat C:\Users\ ... \Documents\MyBase.py
Секрет оптимизации процесса написания кода на Python в Jupyter Notebook, который все знают, но мало кто использует

Для того чтобы не набирать команды вручную, создадим функцию, которая будет создаваться при каждом запуске Jupyter Notebook и выводить краткую памятку о командах и месте расположения базы. В папке «~ \.ipython\profile_default\startup» создаем файл в формате «.py» с функцией:

def MyB(): """Функция вызывает краткую памятку""" #Путь где храниться база знаний path_file = r'C:\Users\...\Documents\MyBase.py '[:-1] #Печать памятки print(f"#Расположение MyBase.py\n{path_file}\n") print(f"#Записать содержимое ячейки в MyBase.py\n%%writefile -a {path_file}\n") print(f"#Показать содержимое MyBase.py\n%pycat {path_file}")

Результат выполнения функции «MyB()»

Секрет оптимизации процесса написания кода на Python в Jupyter Notebook, который все знают, но мало кто использует

Создание такой базы предоставляет возможность её наполнять и обращаться к ней в моменте написания скрипта, что в дальнейшем должно исключит временные затраты на повторный поиск уже ранее написанного кода.

Знаю, что кроме «горячих клавиш», «расширений» и «магических команд», есть и другие способы по упрощению работы в Jupyter Notebook. Поэтому предлагаю в комментариях собрать как можно больше вариантов, подходящих под эту тему. Всем спасибо, кто уделил свое время на прочтение и отдельное тем, кто поделится своим опытом.

1414
4 комментария

Если вы задумались о продуктивности своего времени на разработку, то лучший вариант - перейти на полноценную IDE (например Pycharm CE), которая умеет это из коробки + сэкономит много времени на отладке.
Есть ли причины оставаться в Jupyter? (Colab, может быть)

2
Ответить
Автор

Добрый день! Спасибо за проявленный интерес. На наш взгляд, если требуется анализ данных и нет необходимости в описании сложного инструмента с выходом в продакшн, то смысла в переходе с Jupyter нет.

Ответить

Комментарий недоступен

1
Ответить

Комментарий недоступен

Ответить