https://habr.com/ru/company/skillfactory/blog/538324/- Блог компании SkillFactory
- Python
- Big Data
- Машинное обучение
- Искусственный интеллект
Работать с Data Science в Jupyter, конечно, очень приятно, но если вы хотите пойти дальше и развернуть свой проект или модель на облачном сервере, то здесь есть много отличных решений — с помощью Flask, Django или Streamlit. Хотя облачные решения по-прежнему самые популярные, часто хочется создать быстрое приложение с графическим интерфейсом. Например:
- Модель ML тестируется на различных наборах данных. Вы можете перетащить файлы CSV в модель и отрисовать кривую AUS/ROC. Здесь GUI проявит себя прекрасно, правда?
- Построить случайную переменную или статистическое распределение в заданном диапазоне и динамически управлять параметрами с помощью графического интерфейса.
- Быстро запустить некоторые задачи обработки или предварительной обработки данных в наборе с помощью GUI вместо того, чтобы писать кучу кода.
В этой статье мы покажем, как создать такой графический интерфейс, потратив минимум усилий на изучение библиотеки Python.
Что такое PySimpleGUI?
В экосистеме Python есть несколько очень популярных GUI-фреймворков, таких как Tkinter, PyQt и т. д. Но часто они несколько раздуты и трудны в изучении для специалистов по Data Science, которые могут захотеть написать простое приложение с минимумом кода, а не тратить время на разработку крупной программы с графическим интерфейсом на уровне энтерпрайза.
Обёртка, которую легко изучить
На сайте PySimpleGUI написано: «
Python GUI для людей —трансформирует Tkinter, Qt, Remi, WxPython в портативные Pythonic-интерфейсы, дружественные людям». По сути, этот GUI-фреймворк берёт все эти популярные и хорошо зарекомендовавшие себя GUI-фреймворки и обёртывает их в единую библиотеку, которую просто изучить и затем собирать приложения. Вам даже не нужно писать определение класса, чтобы создать GUI-приложение! Часто специалисты по Data Science не имеют достаточно опыта в разработке. Они могут извлечь огромную пользу из изучения и применения инструмента, который даёт возможность создавать небольшие целевые приложения с графическим интерфейсом для изучения данных, их анализа, экспериментов с моделями ML и т. д. Поэтому я создал репозиторий, чтобы заполнять его короткими, целенаправленными скриптами, которые при запуске создают настольные приложения.
Вот этот репозиторий. В сети уже есть несколько хороших туториалов о PySimpleGUI. В моём репозитории я уделяю особое внимание созданию простых демонстрационных программ, связанных с наукой о данных (простая аналитика, статистическое моделирование, визуализации и базовое машинное обучение), с использованием этого мощного инструмента построения графического интерфейса.
Преимущества обёртки
- Не нужно никаких обратных вызовов.
- Чтобы сократить объём кода, используются конструкции Python. Например, виджет настраивается прямо на месте, в котором он должен быть, а не на расстоянии нескольких строк кода от этого места.
- Зависит от одного пакета: обёртывает Tkinter и не требует установки других пакетов.
- Одна и та же программа с GUI может выполняться на нескольких платформах, включая веб-браузер, без изменения исходного кода, за исключением оператора импорта.
- Можно разрабатывать интерфейс для нескольких платформ ОС — Windows, Linux, Raspberry Pi и Android (PyDroid3) — с очень незначительными изменениями.
В принципе, можно начать создавать работающие (и полезные) приложения с GUI, имея базовые знания Python, и вы справитесь за день.
Примеры приложений
Установите библиотеку вот так:
pip install pysimplegui
. Чтобы запустить примеры, вам также понадобятся эти библиотеки:
- Numpy.
- Pandas.
- Matplotlib.
- Scikit-learn.
- Seaborn.
Data Science «Hello World»
Простейшая программа в PySimpleGUI отобразит строку
Hello World в маленьком окне. Но, в духе DS, давайте сделаем нашу вводную программу интереснее и полезнее! Вот
скрипт. Назовём его
GenRandom.py
.
Перейдите в каталог с этим скриптом, выполните команду
python GenRandom.py
. Вы увидите простое всплывающее окно, в котором можно нажать кнопку, чтобы вызвать функцию обновления (см. код выше), чтобы сгенерировать случайное число от 1 до 99.
Хотя это очень простой сценарий, в нём есть:
- макет (с аргументами стиля, например
size
и font
) и окно;
- элемент кнопки, который вызывает внешнюю функцию (событие);
- функция обновления текстового элемента в объекте окна.
По сути, чтобы создать мощные приложения для анализа данных, мы можем пойти по тому же пути и добавить больше слоёв макета, событий, логики и виджетов.
Другие виджеты
Вот еще один сценарий, иллюстрирующий другие виджеты. Просто запустите команду:
python FontUpdate.py
Вы увидите всплывающее окно, в котором сможете динамически обновлять шрифт текста. Вот демонстрационное видео:
Решатель уравнений
Запустите команду python QuadraticEquation.py и вы увидите всплывающее окно, в котором можно ввести коэффициенты квадратного уравнения, чтобы решить его (даже если корни окажутся комплексными числами!).
Анализатор Pandas DataFrame
В этом примере мы показываем, как легко создать GUI, который взаимодействует с широко используемым объектом, например с Pandas DataFrame. Как обычно, вы запускаете
скрипт командой python SimpleDataFrame.py. Вначале он запросит у вас файл набора данных (CSV).
При нажатии на кнопку «Обзор» сначала появится диалоговое окно просмотра файлов. Убедитесь, что вы выбрали подходящий для этой демонстрации набор данных.
После выбора
cars.csv
появятся другие запросы:
Если вы нажмёте Yes на последней подсказке, то увидите набор данных, который был прочитан в новом окне:
После закрытия этого окна появится новое всплывающее окно с вопросом о том, хотите ли вы посмотреть описательную статистику этого набора данных. Если вы нажмете Yes, то увидите нечто подобное:
После закрытия этого окна ещё одно всплывающее окно спросит о том, хотите ли вы увидеть пример графика. Если вы нажмете Yes, то увидите что-то вроде этого:
Генератор случайных диаграмм рассеяния
Это приложение предназначено, чтобы продемонстрировать возможность создания динамического графика, который взаимодействует с пользователем. Скрипт лежит
здесь. Когда вы запустите его, появится окно с простой кнопкой, которую вы можете нажимать столько раз, сколько хотите, каждый раз генерируя график случайного рассеяния. Под капотом, конечно, Numpy и Matplotlib.
Приложение для подгонки кривой
Специалисты по DS и аналитики всегда подгоняют кривые или аналитические функции под некоторые данные. Легко создать простое приложение, где вы сможете продемонстрировать это с помощью PySimpleGUI.
Ядро — это скрипт. При запуске появляется окно с кнопками для генерации и установки полиномиальной функции 2-й степени. Более того, мы также установили небольшой ползунок, чтобы настроить уровень гауссовского шума, который добавляется к данным. Вкратце в этом примере показывается, как основные функции подбора данных интегрируются в легкий графический интерфейс:
Пример обучения модели Scikit-learn
Наконец-то мы снисходим до примера настоящего ML. Мы покажем, как построить простое приложение, позволяющее загрузить набор данных
Pima Indians diabetes и обучить модель Случайного леса на этих данных с помощью Scikit-learn в фоновом режиме. Скрипт лежит
здесь. На рисунке ниже показывается работа этой программы с графическим интерфейсом. Обратите внимание, что она охватывает стандартные процессы, как ожидается от программы машинного обучения:
- загрузка набора данных;
- опции для сброса значений NaN и указания на то, есть ли в колонках заголовки;
- отображение набора данных;
- отображение описательной статистики;
- выбор выходного столбца из списка, который автоматически заполняется, когда загружается набор данных;
- простая проверка на ошибки для выходной колонки;
- запуск алгоритма классификации в фоновом режиме и отображение точности в графическом интерфейсе:
Резюме
Мы описали простую и мощную библиотеку Python для построения GUI программ и обсудили её преимущества по сравнению с более устоявшимися библиотеками. Уже написано много отличных учебников по программированию с использованием графического интерфейса на Python, но в этой статье мы показали
ориентированные примеры, связанные с наукой о данных и математическим программированием, с аспектом, которого не хватает в традиционных учебниках. Вот официальная «книга рецептов» библиотеки.
Cookbook — PySimpleGUI не так давно вернула в название слово Cookbook, поэтому использовалась устаревшая документация pysimplegui.readthedocs.io.
В этой статье мы показали примеры из списка ниже:
- различные виды виджетов для управления;
- ввод и вывод данных — чтение файлов и генерация графиков;
- традиционные библиотеки DS: Numpy, Pandas, Matplotlib, и Scikit-learn.
Очевидно, что на этих примерах можно построить гораздо больше интуитивно понятных GUI-приложений для работы с данными. Я планирую продолжать добавлять такие примеры в свой
репозиторий на Github, их вы можете форкнуть или отметить звёздочкой, если захотите. Посмотрите мои
репозитории, там есть не только код, но идеи и ресурсы по ML и Data Science.
А если хотите учиться ML и Data Science — приходите к нам, будет сложно но интересно. А промокод
HABR, добавляющий 10% к скидке на баннере, вам поможет.