интерактивных элементов управления в ноутбуках Jupyter | by Will Koehrsen
(Источник)Как использовать интерактивные виджеты IPython для улучшения исследования и анализа данных
Мало что может быть менее эффективным в исследовании данных, чем повторный запуск одной и той же ячейки снова и снова, каждый раз немного меняя входные параметры. Несмотря на то, что я это знаю, я все еще ловлю себя на том, что неоднократно выполняю ячейки только для того, чтобы внести малейшее изменение, например, выбрать другое значение для функции, выбрать различные диапазоны дат для анализа или даже настроить тему графической визуализации. Это не только неэффективно, но и разочаровывает, нарушая ход исследовательского анализа данных.
Идеальным решением этой проблемы были бы интерактивные элементы управления для изменения входных данных без необходимости переписывать или перезапускать код. К счастью, как это часто бывает в Python, кто-то уже сталкивался с этой проблемой и разработал отличный инструмент для ее решения. В этой статье мы увидим, как начать работу с виджетами IPython ( ipywidgets
), интерактивными элементами управления, которые можно создать с помощью одной строки кода. Эта библиотека позволяет нам превратить Jupyter Notebooks из статических документов в интерактивные информационные панели, идеально подходящие для изучения и визуализации данных.
Вы можете просмотреть полностью интерактивный блокнот для бега с виджетами из этой статьи на mybinder, щелкнув изображение ниже.
Блокнот виджетов на mybinder.orgВиджеты IPython, к сожалению, не отображаются на GitHub или nbviewer, но вы все равно можете получить доступ к блокноту и запустить его локально.
Пример интерактивных виджетов для визуализации данных Первым шагом, как обычно, является установка библиотеки: pip install ipywidgets
. После этого вы можете активировать виджеты для Jupyter Notebook с помощью
jupyter nbextension enable-py widgetsnbextension
для использования с jupyterlab, run:
jupyter labextension install @jupyter-widgets/jupyterlab-manager
to importing apywidges natebook 9000-witelios . widgets
from ipywidgets importinteract,interact_manual
Однострочные интерактивные элементы управления
Допустим, у нас есть следующий фрейм данных со статистикой статьи Medium (это моя фактическая статистика, вы можете увидеть, как ее получить в этой статье):
Dataframe of Medium statsКак просмотреть все статьи с более чем 1000 прочтений? Вот один из способов:
df.loc[df['reads'] > 1000]
Но если мы хотим показать статьи с более чем 500 хлопками, мы должны написать еще одну строку кода:
df.loc [df['claps'] > 500]
Было бы неплохо, если бы мы могли просто быстро изменить эти параметры — как столбец, так и порог — без написания дополнительного кода? Попробуйте это:
@interactИнтерактивные элементы управления с использованием @interact
def show_articles_more_than(column='хлопки', x=5000):
return df.loc[df[column] > x]
С декоратором @interact
библиотека IPywidgets автоматически предоставляет нам текстовое поле и ползунок для выбора столбца и числа! Он просматривает входные данные для нашей функции и создает интерактивные элементы управления на основе типов. Теперь мы можем сегментировать данные с помощью элементов управления (виджетов) без написания кода.
Возможно, вы заметили некоторые проблемы с виджетами — x
могут быть отрицательными, и нам нужно было ввести правильные столбец
имя. Мы можем исправить это, предоставив определенные аргументы параметрам функции:
Теперь мы получаем раскрывающийся список для столбца (с параметрами в списке) и целочисленный ползунок, ограниченный диапазоном (формат (старт, стоп, шаг)
). Прочтите документацию, чтобы узнать все подробности о том, как параметры функций сопоставляются с виджетами.
Мы можем использовать тот же декоратор @interact
, чтобы быстро превратить любую обычную функцию в интерактивный виджет. Например, у нас может быть много изображений в каталоге, который мы хотим быстро просмотреть:
import osПример просмотра изображений с помощью виджетов IPython
from IPython.display import Image@interact
def show_images(file=os. listdir('images/')):
display(Image(fdir+file))
Сейчас мы можем быстро просмотреть все изображения без повторного запуска ячейки. На самом деле это может быть полезно, если вы строите сверточную нейронную сеть и хотите изучить изображения, которые ваша сеть неправильно классифицировала.
Использование виджетов для исследования данных безгранично. Другой простой пример — поиск корреляций между двумя столбцами:
Виджет для корреляции между двумя столбцами.На ipywidgets GitHub есть множество полезных примеров.
Виджеты для графиков
Интерактивные виджеты особенно полезны для выбора данных для построения. Мы можем использовать тот же декоратор @interact
с функциями, которые визуализируют наши данные:
Здесь мы используем удивительную комбинацию запонок + сюжет для создания интерактивного графика с интерактивным виджетом IPython управляет .
Возможно, вы заметили, что сюжет обновлялся немного медленно. Если это так, мы можем использовать @interact_manual
, для которого требуется кнопка для обновления.
Теперь график будет обновляться только при нажатии кнопки. Это полезно для функций, которым требуется некоторое время для возврата вывода.
Расширение возможностей интерактивного управления
Чтобы получить больше от библиотеки IPywidgets, мы можем сами создавать виджеты и использовать их в взаимодействуют с функцией
. Один из моих любимых виджетов — DatePicker
. Скажем, у нас есть функция stats_for_article_published_between
, которая принимает начальную и конечную даты и выводит статистику для всех статей, опубликованных между ними. Мы можем сделать это интерактивным, используя следующий код
Теперь мы получаем два интерактивных виджета выбора даты, и значения передаются в функцию (подробности см. в блокноте):
Интерактивные элементы управления выбором даты. Точно так же мы можем создать функцию, которая отображает совокупный итог столбца до даты, используя те же Интерактивный виджет DataPicker
.
Если мы хотим, чтобы параметры одного виджета зависели от значения другого, мы используем функцию наблюдения
. Здесь мы изменяем функцию браузера изображений, чтобы выбрать и каталог, и изображение. Список отображаемых изображений обновляется в зависимости от выбранного нами каталога.
Повторно используемые виджеты
Когда мы хотим повторно использовать виджеты в ячейках, нам просто нужно назначить их выходу функции взаимодействия
.
Теперь, чтобы повторно использовать виджет stats
, мы можем просто вызвать stats. widget
в ячейке.
Это позволяет нам повторно использовать наши виджеты в блокноте. Обратите внимание, что виджеты связаны друг с другом, что означает, что значение в одной ячейке будет автоматически обновлено до значения, выбранного вами для того же виджета в другой ячейке.
Нам не удалось охватить все возможности IPywidgets. Например, мы можем связывать значения вместе, создавать собственные виджеты, создавать кнопки, создавать анимации, создавать панель мониторинга с вкладками и так далее. Взгляните на документацию для дальнейшего использования. Надеюсь, вы увидите, как интерактивные элементы управления могут улучшить рабочий процесс записной книжки!
Простой виджет для выбора темы сюжета.Jupyter Notebook — отличная среда для исследования и анализа данных. Однако сам по себе он не предлагает лучшую функциональность. Использование таких инструментов, как расширения записных книжек и интерактивные виджеты, оживляет записную книжку и делает нашу работу специалистов по данным более эффективной. Кроме того, создавать виджеты и использовать их в блокноте просто весело! Написание большого количества кода для многократного выполнения одной и той же задачи не доставляет удовольствия, но использование интерактивных элементов управления создает более естественный поток для наших исследований и анализа данных.
Как всегда, буду рад обратной связи и конструктивной критике. Со мной можно связаться в Твиттере @koehrsen_will.
Как сделать так, чтобы мои изображения и видео отображались так, чтобы пользователю не приходилось запускать все ячейки? — Блокнот
ryeshurun
1
Для моего образовательного проекта меня вдохновила эта серия блокнотов: https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python
Когда я открываю эти блокноты в Binder, все ячейки выполняются, я вижу все графики.
Но в моем блокноте, где у меня есть ссылка на видео, например, видео появляется только тогда, когда я запускаю ячейку. Открывая блокноты, я вижу только код ячейки. Но я хочу, чтобы мои потенциальные ученики видели только встроенное видео.
из IPython.display импортировать YouTubeVideo YouTubeVideo('roqumrTB9g0')
Как сделать так, чтобы мои записные книжки вели себя как «калмановско-байесовские»?
Уплотнение
2
Запустите ячейку один раз и сохраните полученный блокнот. Выводы дисплея будут сохраняться в документе, и ядру не придется их пересчитывать. Для отображения только выходов есть несколько опций, но не все интерфейсы их поддерживают. например nbextensions, использующие эти ключевые слова метаданных
1 Нравится
2 июля 2020 г. , 8:48
3
Я вставляю сюда скриншот того, что я вижу, когда открываю блокнот в Binder. Я запустил ячейки, сохранил, зафиксировал, отправил в свой репозиторий, запустил из связующей ссылки. Простой вывод кода сохраняется, но не видео.
image719×848 15,3 КБ
Вывод пустой. Мне нужно снова запустить ячейку, чтобы увидеть кликабельную миниатюру видео.
У меня есть обходной путь, который заключается в отображении видео из уценки при нажатии на миниатюру изображения, но для этого мне нужно сохранить миниатюру видео
фомайтез
4
Пробовали ли вы просматривать записную книжку через nbviewer? (Я бы попытался, но не смог найти ваш репозиторий по вашему имени пользователя, а на снимке экрана не было информации.
Рассматривали ли вы возможность использования Voila через Binder, если вы хотите, чтобы учащиеся не запускали код для просмотра вывода? Он заново запускает код при запуске. Однако я не пробовал видео в Voila. Я вижу, что действительно есть виджет видео, см. здесь. Примеры страниц Voila, запускаемые из галереи Voila, также отображаются через MyBinder.
риешурун
5
Только что увидел этот ответ, спасибо, вы не пробовали эти вещи, так как я только сейчас понял, что мне нужен файл postBuild, и я могу поместить туда что-то вроде включения расширений, поэтому я добавил jupyter trust … и это сработало !!
Я не понимаю, как это работает, и почему 2*3 запускается без доверия, а отображение видео — нет, но я рад, что нашел более чистое решение, чем мой предыдущий ужасный хак уценки.
1 Нравится
фомайтез
6
Рад, что вы обнаружили, что доверие — это способ получить то, что вам нужно. (Интересно, работает ли это и для сюжетов Plotly? —> ОБНОВЛЕНИЕ: действительно работает, см. пример здесь.)
Просто чтобы прояснить кое-что…Он не перезапускается
2*3
, когда вы запускаете сеанс и открываете ранее сохраненную записную книжку через MyBinder. Просто отображение ранее сделанного вывода. Некоторые выходные данные не обрабатываются при повторном открытии. Я предполагаю, что что-то действительно было сохранено в ячейке вывода из исходного запуска, поскольку кажется, что это место для тех случаев, когда ему не доверяют, но вам нужно будет проверить, просмотрев вывод для этой ячейки при просмотре блокнота в блокноте. Текстовый редактор. Например, .png
изображений, отображаемых в выходной ячейке через из IPython.display import Изображение
сохраняется как код Base64 при сохранении блокнота Jupyter, и вы увидите изображение, отображаемое при повторном его открытии. Я не знаю, что из видео сохраняется как в выходной ячейке. психомедиа
7
Еще один удобный прием: расширение блокнота init_cell
выглядит так, как будто его можно использовать для автозапуска выбранных ячеек при загрузке блокнота.
1 Нравится
Печать