- Модель ML тестируется на различных наборах данных. Вы можете перетащить файлы CSV в модель и отрисовать кривую AUS/ROC. Здесь GUI проявит себя прекрасно, правда?
- Построить случайную переменную или статистическое распределение в заданном диапазоне и динамически управлять параметрами с помощью графического интерфейса.
- Быстро запустить некоторые задачи обработки или предварительной обработки данных в наборе с помощью GUI вместо того, чтобы писать кучу кода.
В этой статье мы покажем, как создать такой графический интерфейс, потратив минимум усилий на изучение библиотеки Python.
![](https://habrastorage.org/webt/db/fp/ln/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) — с очень незначительными изменениями.
![](https://habrastorage.org/webt/f5/fp/w8/f5fpw8rbytag4vplnj9omlydwei.png)
В принципе, можно начать создавать работающие (и полезные) приложения с GUI, имея базовые знания Python, и вы справитесь за день.
Примеры приложений
Установите библиотеку вот так:
pip install pysimplegui
. Чтобы запустить примеры, вам также понадобятся эти библиотеки:- Numpy.
- Pandas.
- Matplotlib.
- Scikit-learn.
- Seaborn.
Data Science «Hello World»
Простейшая программа в PySimpleGUI отобразит строку Hello World в маленьком окне. Но, в духе DS, давайте сделаем нашу вводную программу интереснее и полезнее! Вот скрипт. Назовём его
GenRandom.py
.![](https://habrastorage.org/webt/yx/tb/qk/yxtbqkwrb98p-nqum8tqchikh98.png)
Перейдите в каталог с этим скриптом, выполните команду
python GenRandom.py
. Вы увидите простое всплывающее окно, в котором можно нажать кнопку, чтобы вызвать функцию обновления (см. код выше), чтобы сгенерировать случайное число от 1 до 99. ![](https://habrastorage.org/webt/gx/4d/lw/gx4dlwyxldglmfvgf1btted11eq.gif)
Хотя это очень простой сценарий, в нём есть:
- макет (с аргументами стиля, например
size
иfont
) и окно; - элемент кнопки, который вызывает внешнюю функцию (событие);
- функция обновления текстового элемента в объекте окна.
По сути, чтобы создать мощные приложения для анализа данных, мы можем пойти по тому же пути и добавить больше слоёв макета, событий, логики и виджетов.
Другие виджеты
Вот еще один сценарий, иллюстрирующий другие виджеты. Просто запустите команду:
python FontUpdate.py
Вы увидите всплывающее окно, в котором сможете динамически обновлять шрифт текста. Вот демонстрационное видео:
![](https://habrastorage.org/webt/ph/xy/nl/phxynlwwntdtkltfy5rristejjm.gif)
Решатель уравнений
Запустите команду python QuadraticEquation.py и вы увидите всплывающее окно, в котором можно ввести коэффициенты квадратного уравнения, чтобы решить его (даже если корни окажутся комплексными числами!).
![](https://habrastorage.org/webt/yv/9w/_8/yv9w_8rjvfhusg1_wabqft0ef5y.png)
Анализатор Pandas DataFrame
В этом примере мы показываем, как легко создать GUI, который взаимодействует с широко используемым объектом, например с Pandas DataFrame. Как обычно, вы запускаете скрипт командой python SimpleDataFrame.py. Вначале он запросит у вас файл набора данных (CSV).
![](https://habrastorage.org/webt/jc/by/uz/jcbyuzy6ceqiuyxtbx4zhj_jfy0.png)
При нажатии на кнопку «Обзор» сначала появится диалоговое окно просмотра файлов. Убедитесь, что вы выбрали подходящий для этой демонстрации набор данных.
![](https://habrastorage.org/webt/as/e8/1v/ase81vxbs1sqwbd8t6xvudulvjo.png)
После выбора
cars.csv
появятся другие запросы: ![](https://habrastorage.org/webt/ro/uj/nr/roujnrd7g4abehgeq3hglwdtctc.png)
![](https://habrastorage.org/webt/x0/zg/_0/x0zg_0n6yhetzfs2vskdbvqq9aa.png)
![](https://habrastorage.org/webt/z6/vl/g4/z6vlg4myk5a1engbsg_gmzx4idw.png)
Если вы нажмёте Yes на последней подсказке, то увидите набор данных, который был прочитан в новом окне:
![](https://habrastorage.org/webt/8k/fr/bt/8kfrbtzwb0bhnutj-nw3vtqjxzk.png)
После закрытия этого окна появится новое всплывающее окно с вопросом о том, хотите ли вы посмотреть описательную статистику этого набора данных. Если вы нажмете Yes, то увидите нечто подобное:
![](https://habrastorage.org/webt/io/df/ih/iodfihmqylnkdt6wxdspjftkwwm.png)
После закрытия этого окна ещё одно всплывающее окно спросит о том, хотите ли вы увидеть пример графика. Если вы нажмете Yes, то увидите что-то вроде этого:
![](https://habrastorage.org/webt/x_/hx/7m/x_hx7m0waifcmnqi-lxjlpby3au.png)
Генератор случайных диаграмм рассеяния
Это приложение предназначено, чтобы продемонстрировать возможность создания динамического графика, который взаимодействует с пользователем. Скрипт лежит здесь. Когда вы запустите его, появится окно с простой кнопкой, которую вы можете нажимать столько раз, сколько хотите, каждый раз генерируя график случайного рассеяния. Под капотом, конечно, Numpy и Matplotlib.
![](https://habrastorage.org/webt/fb/bl/rq/fbblrqdvxcants-ewjye76d5zps.gif)
Приложение для подгонки кривой
Специалисты по DS и аналитики всегда подгоняют кривые или аналитические функции под некоторые данные. Легко создать простое приложение, где вы сможете продемонстрировать это с помощью PySimpleGUI.
Ядро — это скрипт. При запуске появляется окно с кнопками для генерации и установки полиномиальной функции 2-й степени. Более того, мы также установили небольшой ползунок, чтобы настроить уровень гауссовского шума, который добавляется к данным. Вкратце в этом примере показывается, как основные функции подбора данных интегрируются в легкий графический интерфейс:
![](https://habrastorage.org/webt/db/wt/dq/dbwtdqfetsm6vdv9hbgui3fdk_4.gif)
Пример обучения модели Scikit-learn
Наконец-то мы снисходим до примера настоящего ML. Мы покажем, как построить простое приложение, позволяющее загрузить набор данных Pima Indians diabetes и обучить модель Случайного леса на этих данных с помощью Scikit-learn в фоновом режиме. Скрипт лежит здесь. На рисунке ниже показывается работа этой программы с графическим интерфейсом. Обратите внимание, что она охватывает стандартные процессы, как ожидается от программы машинного обучения:
- загрузка набора данных;
- опции для сброса значений NaN и указания на то, есть ли в колонках заголовки;
- отображение набора данных;
- отображение описательной статистики;
- выбор выходного столбца из списка, который автоматически заполняется, когда загружается набор данных;
- простая проверка на ошибки для выходной колонки;
- запуск алгоритма классификации в фоновом режиме и отображение точности в графическом интерфейсе:
![](https://habrastorage.org/webt/vl/hv/bi/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](https://habrastorage.org/webt/io/qw/4m/ioqw4mpr6--zjzxym0zijkgkqu8.png)
- Профессия Data Scientist
- Профессия Data Analyst
- Курс по Machine Learning
- Курс «Математика и Machine Learning для Data Science»
- Профессия Frontend-разработчик
- Профессия Веб-разработчик
- Профессия Этичный хакер
- Профессия C++ разработчик
- Профессия Java-разработчик
- Профессия Разработчик игр на Unity
- Профессия iOS-разработчик с нуля
- Профессия Android-разработчик с нуля
КУРСЫ
- Курс по JavaScript
- Курс «Алгоритмы и структуры данных»
- Курс «Python для веб-разработки»
- Курс по аналитике данных
- Курс по DevOps
skymal4ik
Спасибо за информацию, полезно!
Иногда хочется не возиться с вебом, серверами и доступами, а в pdf не хватает интерактивности. Сейчас использую html с небольшим количеством js, но ваше решение выглядит интереснее, обязательно попробую.
PS хотелось бы код в статье текстом, на телефоне неудобно смотреть и читать.
QtRoS
Streamlit очень хорош, да нужен доступ по какому-то порту, но ноль проблем с html/js, выглядит красиво, и без проблем превращается в работающий без UI скрипт.