[Перевод] Как сделать Data Science приложение для Windows (и не только) с графическим интерфейсом с помощью PySimpleGUI

Работать с Data Science в Jupyter, конечно, очень приятно, но если вы хотите пойти дальше и развернуть свой проект или модель на облачном сервере, то здесь есть много отличных решений — с помощью Flask, Django или Streamlit. Хотя облачные решения по-прежнему самые популярные, часто хочется создать быстрое приложение с графическим интерфейсом. Например:
  • Модель ML тестируется на различных наборах данных. Вы можете перетащить файлы CSV в модель и отрисовать кривую AUS/ROC. Здесь GUI проявит себя прекрасно, правда?
  • Построить случайную переменную или статистическое распределение в заданном диапазоне и динамически управлять параметрами с помощью графического интерфейса.
  • Быстро запустить некоторые задачи обработки или предварительной обработки данных в наборе с помощью GUI вместо того, чтобы писать кучу кода.

В этой статье мы покажем, как создать такой графический интерфейс, потратив минимум усилий на изучение библиотеки Python.
dbfplnloyfkyh__ebcdom4mgbow.jpeg


Что такое 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) — с очень незначительными изменениями.

f5fpw8rbytag4vplnj9omlydwei.png

В принципе, можно начать создавать работающие (и полезные) приложения с GUI, имея базовые знания Python, и вы справитесь за день.

Примеры приложений


Установите библиотеку вот так: pip install pysimplegui. Чтобы запустить примеры, вам также понадобятся эти библиотеки:
  • Numpy.
  • Pandas.
  • Matplotlib.
  • Scikit-learn.
  • Seaborn.

Data Science «Hello World»


Простейшая программа в PySimpleGUI отобразит строку Hello World в маленьком окне. Но, в духе DS, давайте сделаем нашу вводную программу интереснее и полезнее! Вот скрипт. Назовём его GenRandom.py.
yxtbqkwrb98p-nqum8tqchikh98.png

 
Перейдите в каталог с этим скриптом, выполните команду python GenRandom.py. Вы увидите простое всплывающее окно, в котором можно нажать кнопку, чтобы вызвать функцию обновления (см. код выше), чтобы сгенерировать случайное число от 1 до 99. 
gx4dlwyxldglmfvgf1btted11eq.gif

Хотя это очень простой сценарий, в нём есть:

  • макет (с аргументами стиля, например size и font) и окно;
  • элемент кнопки, который вызывает внешнюю функцию (событие);
  • функция обновления текстового элемента в объекте окна.

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

Другие виджеты


Вот еще один сценарий, иллюстрирующий другие виджеты. Просто запустите команду:  
python FontUpdate.py

Вы увидите всплывающее окно, в котором сможете динамически обновлять шрифт текста. Вот демонстрационное видео:
phxynlwwntdtkltfy5rristejjm.gif

Решатель уравнений


Запустите команду python QuadraticEquation.py и вы увидите всплывающее окно, в котором можно ввести коэффициенты квадратного уравнения, чтобы решить его (даже если корни окажутся комплексными числами!). 
yv9w_8rjvfhusg1_wabqft0ef5y.png

Анализатор Pandas DataFrame


В этом примере мы показываем, как легко создать GUI, который взаимодействует с широко используемым объектом, например с Pandas DataFrame. Как обычно, вы запускаете скрипт командой python SimpleDataFrame.py. Вначале он запросит у вас файл набора данных (CSV). 
jcbyuzy6ceqiuyxtbx4zhj_jfy0.png

 
При нажатии на кнопку «Обзор» сначала появится диалоговое окно просмотра файлов. Убедитесь, что вы выбрали подходящий для этой демонстрации набор данных.
ase81vxbs1sqwbd8t6xvudulvjo.png

После выбора cars.csv появятся другие запросы:  

roujnrd7g4abehgeq3hglwdtctc.png
x0zg_0n6yhetzfs2vskdbvqq9aa.png
z6vlg4myk5a1engbsg_gmzx4idw.png

Если вы нажмёте Yes на последней подсказке, то увидите набор данных, который был прочитан в новом окне:  

8kfrbtzwb0bhnutj-nw3vtqjxzk.png

После закрытия этого окна появится новое всплывающее окно с вопросом о том, хотите ли вы посмотреть описательную статистику этого набора данных. Если вы нажмете Yes, то увидите нечто подобное:  

iodfihmqylnkdt6wxdspjftkwwm.png

После закрытия этого окна ещё одно всплывающее окно спросит о том, хотите ли вы увидеть пример графика. Если вы нажмете Yes, то увидите что-то вроде этого:

x_hx7m0waifcmnqi-lxjlpby3au.png

Генератор случайных диаграмм рассеяния


Это приложение предназначено, чтобы продемонстрировать возможность создания динамического графика, который взаимодействует с пользователем. Скрипт лежит здесь. Когда вы запустите его, появится окно с простой кнопкой, которую вы можете нажимать столько раз, сколько хотите, каждый раз генерируя график случайного рассеяния. Под капотом, конечно, Numpy и Matplotlib.
 
fbblrqdvxcants-ewjye76d5zps.gif

Приложение для подгонки кривой


Специалисты по DS и аналитики всегда подгоняют кривые или аналитические функции под некоторые данные. Легко создать простое приложение, где вы сможете продемонстрировать это с помощью PySimpleGUI. 

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

dbwtdqfetsm6vdv9hbgui3fdk_4.gif

Пример обучения модели Scikit-learn


Наконец-то мы снисходим до примера настоящего ML. Мы покажем, как построить простое приложение, позволяющее загрузить набор данных Pima Indians diabetes и обучить модель Случайного леса на этих данных с помощью Scikit-learn в фоновом режиме. Скрипт лежит здесь. На рисунке ниже показывается работа этой программы с графическим интерфейсом. Обратите внимание, что она охватывает стандартные процессы, как ожидается от программы машинного обучения:
  • загрузка набора данных;
  • опции для сброса значений NaN и указания на то, есть ли в колонках заголовки;
  • отображение набора данных;
  • отображение описательной статистики;
  • выбор выходного столбца из списка, который автоматически заполняется, когда загружается набор данных;
  • простая проверка на ошибки для выходной колонки;
  • запуск алгоритма классификации в фоновом режиме и отображение точности в графическом интерфейсе:

vlhvbiwnveaa9ap2eyy5_hi37ng.gif

Резюме


Мы описали простую и мощную библиотеку 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% к скидке на баннере, вам поможет.


image

Другие профессии и курсы
ПРОФЕССИИ

КУРСЫ

© Habrahabr.ru