15 крутых трюков Jupyter, которые сэкономят время при работе с данными. Обработка и анализ данных python.
Как специалисты по анализу данных мы используем Jupyter Notebook практически каждый день – от загрузки данных до создания и развертывания моделей с его помощью.
Мне нравится Jupyter Notebook за её простой и удобный дизайн и при этом Jupyter незаменим для решения любых python-ориентированных задач. В частности, Jupyter поддерживает возможность запуска и тестирование скриптов с множеством датасетов.
Однако, при всей простоте этого инструмента, мы часто склонны совершать ошибки, которые приводят к потере времени и увеличению затрат мощности.
@data_analysis_ml – Обработка и анализ данных на python для Датасаентистов.
В этой статье мы расскажем о некоторых советах и хитростях, которые должен знать каждый специалист по работе с данными. Эти трюки помогут сэкономить время и увеличить продуктивность работы.
Начнём!
1. Магические команды
В Jupyter Notebook есть ” магические команды” – это специальные команды, которые не являются частью языка Python, но облегчают вам жизнь. Этим командам предшествует символ %.
Магические команды могут быть полезны, их можно встраивать непосредственно в код python и решать распространенные проблемы, например, перечислить все файлы в текущем каталоге или изменить текущий рабочий каталог.
Вот некоторые распространенные магические команды:
%run: Запустить скрипт Python в текущем ядре.
%load: Загрузить код из скрипта и запустить его в текущем ядре.
%who: Перечислить все переменные.
%timeit: Засечь время выполнения одной строки кода.
%debug: Запустить отладчик в точке исключения.
%matplotlib inline: Отображать графики в блокноте.
%load_ext: Загрузить расширение, например, расширение IPython.
%pwd: Вывести текущий рабочий каталог.
%ls: Показать все файлы в текущем каталоге.
Просмотр всех магических команд
Вы можете просмотреть список всех магических команд, запустив команда %lsmagic .
Чтобы узнать больше о конкретной магической команде можно использовать оператор ?, например %run?.
2. Выполнение другого файла Jupyter
Вы можете использовать магические команды чтобы делать всякие интересные вещи. Например, для выполнения кода python из файлов .py или jupyter notebook из файла .ipynb.
Команда %run выполнит jupyter notebook и покажет вывод – это не то же самое, что импортировать модуль python.
Мы можем запустить notebook для двух гистограмм и получить следующий результат
%run ./two-histograms.ipynb
3. Вызвать документацию по методам или магическим командам
Вы можете получить подробную информацию о каждой магической команде, выделив ее и нажав Shift + Tab.
4. Добавление нескольких курсоров
Вы когда-нибудь сталкивались с ситуацией, когда вам нужно переименовать переменную, записанную в нескольких местах?
В Jupyter notebook есть возможность использовать несколько курсоров для одновременного редактирования текста. Это может быть полезно, если вы хотите внести одно и то же изменение сразу в несколько строк кода.
Чтобы использовать несколько курсоров в Jupyter notebook можно удерживать клавишу Alt и щелкать в нужных местах. Это создаст курсор в каждом выбранном месте. Затем вы можете вносить правки как обычно, и изменения будут применены ко всем местам одновременно.
Windows: Удерживайте alt + щелчок левой кнопкой мыши и перетащите курсор.
Mac: Удерживайте option + щелчок левой кнопкой мыши и перетащите курсор.
Вы также можете использовать комбинацию клавиш Shift + Alt + стрелки вверх/вниз для выделения нескольких строк текста и создания курсора в начале каждой выделенной строки.
Помните, что использование нескольких курсоров может быть немного непривычным, поэтому перед использованием этой функции рекомендуется сохранить свой notebook на случай, если вы внесете какие-либо непреднамеренные изменения.
5. Вставка кода из другого внешнего скрипта python
Используя этот прием, вы можете заменить содержимое ячейки внешними python-скриптами. В качестве источника вы можете использовать любой файл python на вашем компьютере или URL.
# Before Running
%load ./hello_world.py
# After Running
# %load ./hello_world.py
if __name__ == "__main__":
print("Hello World!")
Output
Hello World!
6. Выполнение команд CMD/Shell
Вы приходится выходить из notebook чтобы поработать с командной строкой?
Вы можете запускать shell-команды в Jupyter notebook, используя префикс ! перед командой. Например, чтобы перечислить файлы в текущем каталоге, вы можете использовать команду ls:
!ls
Вы также можете передавать аргументы команде. Например, чтобы перечислить файлы в определенном каталоге, вы можете использовать опцию -l для отображения файлов те и указать путь к каталогу в качестве аргумента:
!ls -l /path/to/directory
Вы также можете присвоить вывод команды переменной и использовать ее в своем коде. Что открывает перед вами обширные возможности.
Например:
files = !ls
print(files)
Это присвоит список файлов в текущем каталоге переменной files и выведет его на печать.
Вы можете использовать эту технику для выполнения любой команды shell в Jupyter notebook, если эта команда доступна в системе, на которой запущен notebook.
7. Установка уведомления о завершении программы
Всегда полезно получить уведомление, когда ваша модель заканчивает обучение или если закончено выполнение какой-либо задачи.
Windows
Мы можем легко настроить его в windows 10 с помощью модуля win10toast.
pip install win10toast
Теперь вы можете показать завершение программы, используя этот код.
from win10toast import ToastNotifier
toaster = ToastNotifier()
#ваша программа
toaster.show_toast("Программа завершена",
"Ваши вычисления завершены",
duration=10)
Вы также можете настроить алерт на завершение программы.
import winsound
# поставить алерт 440HZ на 1 секунду (1000ms)
duration = 1000
freq = 440
winsound.Beep(freq, duration)
Mac и Linux
Чтобы установить сигнал о завершении программы в Jupyter notebook, вы можете использовать модуль os для воспроизведения звука с помощью команды afplay (на macOS) или команды aplay (на Linux).
Вот пример того, как это можно сделать:
import os
# запуск вашей программы
# сыграть звук по окончании программы
os.system("afplay /path/to/sound.mp3") # macOS
# os.system("aplay /path/to/sound.wav") # Linux
Вы можете заменить /path/to/sound.mp3 на путь к звуковому файлу, который вы хотите воспроизвести. Это может быть любой звуковой файл, который поддерживается командой afplay или aplay, например, MP3, WAV или AIFF.
Имейте в виду, что этот метод будет работать, только если команда afplay или aplay доступна на системе, где запущен Jupyter notebook.
В Mac вы также можете использовать встроенную команду say, чтобы сказать что-нибудь, когда ваша программа завершится.
import os
os.system('say "Ваша программа завершена"')
8. Измерить время выполнения функции
Чтобы измерить время выполнения функции в Jupyter notebook, можно использовать магическую команду %timeit. Эта команда выполнит функцию несколько раз и вернет среднее время выполнения. Это позволит засечь время выполнения функции sum и вернуть среднее время, затраченное на выполнение функции.
Вот пример использования %timeit:
%timeit sum(range(100))
Это засечет время выполнения функции sum и вернет среднее время, затраченное на выполнение функции.
%%timeit
total = 0
for i in range(1000):
total += i
Если вам нужна более подробная информация о времени выполнения, вы можете использовать модуль time в Python. Вот пример того, как его использовать:
import time
start_time = time.time()
# измеряемый код
sum(range(100))
end_time = time.time()
elapsed_time = end_time - start_time
print(f'Время запуска: {elapsed_time:.2f} секунд')
Примечание: эти методы измеряют только время выполнения кода в ячейке. Если ячейка зависит от других ячеек или внешних ресурсов, время выполнения не будет включать время, необходимое для выполнения зависимостей.
9. Передача переменных между notebooks
В Jupyter notebooks команда %store magic позволяет передавать переменные между notebooks.
Вот пример того, как ее использовать:
# В первом notebook
var1 = 10
%store var1
# Во втором notebook
%store -r var1
print(var1)
# Теперь вы можете использовать переменную ‘var1’ во втором notebook, как если бы она была определена во втором notebook
Магическая команда %store имеет несколько вариантов:
- %store var1: сохраняет переменную var1
- %store -r var1: извлекает сохраненную переменную var1 и присваивает ее переменной с тем же именем в текущем notebook
- %store -d var1: удаляет сохраненную переменную var1
- %store -z: удаляет все сохраненные переменные.
Вы также можете сохранить несколько значений с помощью одной команды %store.
%store var1 var2
Обратите внимание, что команда %store magic работает только в рамках одного сеанса Jupyter, поэтому вам нужно будет открыть noteboooks в том же сеансе, чтобы переменные были доступны.
Вы также можете использовать команду store magic для уникального решения. Если вы хотите сохранить значение переменной даже после перезапуска ядра по какой-либо причине.
10. Список всех комбинаций клавиш
Изучение комбинации клавиш сделает вас опытным пользователем и сэкономит массу времени. Список горяцих клавиш огромен и запомнить их можно только со временем, по ходу рабочего процесса. Вы можете легко проверить их в меню вверху: Help > Keyboard Shortcuts, или нажав клавишу H в командном режиме.
Ниже приведен список некоторых часто используемых сочетаний клавиш в Jupyter notebooks:
Enter: войти в режим редактирования для текущей ячейки
Esc: войти в командный режим для текущей ячейки
Shift + Enter: запуск текущей ячейки и переход к следующей ячейке
Ctrl + Enter: запустить текущую ячейку
Alt + Enter: запустить текущую ячейку и вставить новую ячейку ниже
Shift + Tab: показать документацию для текущей функции или объекта
Ctrl + S: сохранить текущий notebook
A: вставить новую ячейку выше текущей ячейки (в командном режиме)
B: вставить новую ячейку под текущей ячейкой (в командном режиме)
M: изменить текущую ячейку на ячейку Markdown (в командном режиме)
Y: изменить текущую ячейку на ячейку кода (в командном режиме)
D + D: удалить текущую ячейку (в командном режиме)
Z: отмена последнего удаления ячейки (в командном режиме)
X: вырезать выбранную ячейку (в командном режиме)
C: копирование выделенной ячейки (в командном режиме)
V: вставить выделенную ячейку (в командном режиме)
Ctrl + Shift + -: Разделит текущую ячейку на две, начиная с того места, где находится ваш курсор. (в командном режиме)
Esc + F: Поиск и замена кода, но не вывода. (в командном режиме)
Esc + O: Переключение вывода ячеек (в командном режиме).
Выделить несколько ячеек:
Shift + Вниз выделяет следующую ячейку в направлении вниз.
Shift + Вверх выбирает следующую ячейку в направлении вверх. (в командном режиме)
Shift + M: объединение нескольких выделенных ячеек. (в командном режиме)
Вы также можете получить список всех комбинаций клавиш, перейдя в меню Help и выбрав пункт Keyboard Shortcuts. В результате откроется диалоговое окно со списком всех доступных комбинаций клавиш.
Чтобы просмотреть список комбинаций клавиш в блокноте Jupyter, вы можете перейти в меню Help и выбрать пункт Keyboard Shortcuts. Откроется диалоговое окно со списком всех доступных комбинаций клавиш.
Также можно использовать магическую команду %shortcuts для просмотра списка сочетаний клавиш в области вывода текущей ячейки:
%shortcuts
Эта команда выведет полный лист комбинаций и привязанные к ним действия.
11. Скрыть ненужный вывод
Когда вы создаете отчет из Jupyter Notebook, ненужные объекты в памяти или id объектов могут раздражать. Чтобы скрыть этот ненужный вывод в ячейке notebook, вы можете использовать символ ; в конце строки кода, тогда данная ячейка не будет выведена в отчет.
Например, рассмотрим следующий код:
Если вы не хотите вывод строки matplotlib, вы можете использовать символ ; в конце оператора plotting:
plt.plot(x,y);
12. Написание функций на других языках, кроме python
Если вы часто имеете дело с большим количеством обширных datasetов и скорости numpy недостаточно, то вы можете писать части кода на C и Fortran непосредственно внутри вашего кода на python.
Принцип заключается в том, что когда вы пишете функцию на cpython или fortain, ее можно скомпилировать в динамическую библиотеку и использовать как обёртку для python.
Написание программы на языке c в python
Если вы хотите начали писать свои функции на языке C, то вам понадобится библиотека cython. Вы можете легко установить ее с помощью новой ячейки,
pip install Cython
Написание программы Fortran в Python
Для написания Fortran-функции нам понадобится другая библиотека под названием fortrain-magic. Вы можете легко установить ее с помощью новой ячейки,
!pip install fortran-magic
%load_ext fortranmagic
%%fortran subroutine compute_fortran(x, y, z)
real, intent(in) :: x(:), y(:)
real, intent(out) :: z(size(x, 1))
z = sin(x + y)
end subroutine compute_fortran
compute_fortran([1, 2, 3], [4, 5, 6])
13. Расширение количества столбцов и строк, отображаемых в выводе pandas
По умолчанию датафрейм panda может показывать только ограниченное количество строк и столбцов. Но мы можем изменить значение по умолчанию.
Существует несколько способов расширить количество строк и столбцов, отображаемых в датафрейме pandas в Jupyter notebook.
Вариант 1:
можно использовать параметры pd.options.display.max_rows и pd.options.display.max_columns.
Например, чтобы отобразить до 100 строк и 50 столбцов, вы можете использовать следующий код:
import pandas as pd
pd.options.display.max_rows = 100
pd.options.display.max_columns = 50
Вариант 2:
Вы также можете использовать функцию pd.set_option для установки этих опций. Например:
pd.set_option("display.max_rows", 100)
pd.set_option("display.max_columns", 50)
Эти параметры будут применяться ко всем датафреймам pandas, отображаемым в Jupyter Notebook.
Или вы можете использовать методы head и tail для отображения первых или последних нескольких строк датафрейма. Например:
df.head(20)
df.tail(10)
Вариант 3:
Можно использовать функцию display из модуля IPython.display для вывода датафрейма. Например:
from IPython.display import display
display(df, max_rows=100, max_columns=50)
Эта команда выведет DataFrame до 100 строк и 50 столбцов.
14. Извлечения ввода и вывода данных из ячеек
Как часто вам доводилось бывать в ситуации, когда вы запускали ячейку и после ее завершения поняли, что забыли присвоить переменную?
У меня такое случалось сотни раз.
Когда мы выполняем ячейку в jupyter notebook, она присваивает номер строки как ln:
ln сохраняет и содержит все выполненные функции. Мы можем легко получить к нему доступ, передав номер выполнения в качестве индекса.
Сходным образом мы получаем нечто называемое Out когда ячейка завершает выполнение.
Out – это словарь python, в котором хранятся все выводы ячеек. Мы можем получить доступ к выводам, используя номер выполнения в качестве ключа.
15. Экспортировать содержиме ячейки/Вывести содержимое внешнего скрипта
Наверняка вы сталкивались с ситуацией, когда вам нужно создать файл python из ячейки jupyter. Мы можем создать .py файл и скопипастить код. Но есть решение получше.
%%writefile – это магическая команда Jupyter Notebook, которая позволяет сохранить содержимое ячейки в виде файла Python. Например, если в ячейке находится следующий код:
%%writefile example.py
def add(a, b):
return a + b
print(add(3, 4))
Затем вы можете запустить ячейку, и она создаст файл с именем example.py в том же каталоге, что и Jupyter Notebook, с содержимым ячейки, записанным в этот файл.
%pycat – это магическая команда Jupyter Notebook, которая отображает содержимое файла Python в ячейке notebook. Например, если в ячейке находится следующий код:
%pycat example.py
Команда отобразит содержимое файла example.py в ячейке. Это может быть полезно для быстрого просмотра содержимого файла Python без необходимости переключения на отдельный текстовый редактор или окно терминала.
Заключение Вот и все, на этом мы подошли к концу этого посты. Надеюсь, вы нашли для себя что-то интересное и новое. Пишите комментарии, про какую тему вам бы хотелось почитать. @ai_machinelearning_big_data - больше о машинном обучении и анализе данных