Сделай то, сделай это, сделай сам

067c870fcaa73e22d7bf6ff274bb6adf.png

Доброго времени суток Дамы и Господа! Многим приходилось сталкиваться с необходимостью анализа большого количества данных при помощи Python по запросам начальства или коллег. Однотипные запросы поступают с определенной периодичностью, и не составляет труда подставить новые данные в свой код и провести анализ. Но иногда из-за определенной нагрузки не всегда хочется заниматься таким анализом. Намного проще сделать скрипт с графическим интерфейсом, чтобы сам заказчик для анализа данных мог нажать пару кнопок и получить желаемый результат. Тем более, можно изначально вложить в интерфейс столько «хотелок» заказчика для анализа, сколько будет душе угодно.

Покажу вам, как достичь желаемого на примере библиотеки для Python PySimpleGUI.

На сайте разработчиков размещены примеры по функционалу библиотеки, а также простые скрипты.

Пример скрипта вывода окна для ознакомления с функционалом библиотеки:

import PySimpleGUI as sg

sg.theme('DarkAmber')   
# Устанавливаем цвет внутри окна 
layout = [  [sg.Text('Некоторый текст в строке №1')],
            [sg.Text('Введите «хоть что-нибудь» в строку №2'), sg.InputText()],
            [sg.Button('Ввод'), sg.Button('Отмена')] ]

# Создаем окно
window = sg.Window('Название окна', layout)
# Цикл для обработки "событий" и получения "значений" входных данных
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == 'Отмена': 
# если пользователь закрыл окно или нажал «Отмена»
        break
    print('Молодец, ты справился с вводом', values[0])

window.close()

Код понятен, легко можно адаптировать под свои задачи и вкусы. Мы можем менять в всплывающих окнах как цветовую схему окна, шрифта, так и цвет выделения текста (заднего фона текста). Поменяем настройки предыдущего окна:

Text('This is some text', font='Courier 12', text_color='blue', background_color='green')

И фраза «давай поиграем со шрифтами и цветом» звучит не так страшно.

3b3cbcc5d825711432423c745e76432e.png

Библиотека постоянно обновляется, так, в версии 4.6. количество тем было значительно увеличено и теперь их более 100.

Достаточно добавить в код theme('Название желаемой темы'), чтобы выбрать наиболее подходящую тему для задачи. Чтобы увидеть тему и список доступных тем библиотеки нужно вызвать функцию theme_previewer().

c959ac2e6d05a26903ee7be618402007.png

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

3392ceb700c8bdc96b96d3682508e9a8.png

У библиотеки достаточно широкие возможности, вплоть до использования в написании игр (шахматы и пинг-понг описаны на сайте разработчиков).

Перейдем к простой визуализации кода для анализа данных дата-сета.

Для анализа данных нам на помощь приходят библиотеки Pandas DataFrame, NumPy, Matplotlib, воспользуемся кодом для анализа данных от разработчиков.

Для примера возьмем данные из файла sp500.csv в котором находится моментальный снимок индекса S&P500. В первой строке файла содержатся имена столбцов, а остальные 500 строк содержат информацию о пятистам крупнейших компаний США. 

После запуска скрипта работа происходит только в оконном режиме.

Открываем необходимый нам файл для анализа.

edd623deb084e9241f67faabba0df87f.png

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

При ответе на вопрос «Данный файл содержит имена столбцов?» если указать «No» то согласно прописанному скрипту столбцам будут присвоены имена по типу 'Столбец0', 'Столбец1', и т.д. Далее выбираем необходимые параметры по имеющемуся датасету.

d37a8a43020ed4766ee489e2e8033f8f.png8d56cf1dac48980c4c61b1a5f2ce4be0.png4aac799206486ad45805309d0b4a540b.png

При просмотре загруженных данных мы видим данные в виде таблицы по нашему файлу.

dd4e7a8a05e15f2cb9e7d03d3e74c178.png3808d040a7b00d2575542e136562804d.png

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

50374b543577a4f61c8c1de24f8de92a.png

Окно со статистикой включает расчет метрик, прописанных нами в скрипте, в примере включены такие данные как квартили, средняя, минимум, количество и медиану.

fdced22e033ce1de7c0db1177c188fb9.png

Статистика в примере представлена по всем данным датасета.

Выбор анализа можно представить по-разному:

5e6d12e55d55f08fa3fcb5f2458279d9.png15f428dee1c93796af7e0b4df7d606d9.png

Библиотека также позволяет комбинировать различные элементы.

e59d65dd99460c3d7351d1f00d4eef43.png

Вариантов визуализации достаточно, чтобы угодить самым искушенным аналитикам, можно вставить анимированные GIF изображения (с помощью UpdateAnimation) или просто картинки.

После закрытия окна всплывает следующий вопрос — Хотим ли мы увидеть график по нашим данным.

c482f2d7fc90ff6bfdbccb3752217911.png

Ну и ответ на данный вопрос вполне очевиден.

ИМХО: анализ без визуализации — не анализ.

d6819521ca23fee911addb36a5b6f4f1.png

При визуализации сразу видно наиболее прибыльные акции. График строится на основе загруженной библиотеки Matplotlib.pyplot. Для визуализации можно построить любой график, который заложен в данной библиотеке, так же можно использовать любую другую.

Не во всех организациях приветствуется использование и создание exe-файлов, но если разрешено, то это намного проще для конечного пользователя, чем работать с файлом скрипта и «тетрадкой».

Для создания exe-файла для нашего скрипта анализа, нам нужно установить PyInstaller или cx_freeze и использовать инструмент PySimpleGUI EXE Maker, его можно найти на GitHub в учетной записи PySimpleGUI. Это простой интерфейс для pyinstaller,  ссылка с инструкцией по работы с инструментом.

В итоге у нас получится файл, который заказчик анализа может запускать самостоятельно и производить свой анализ без отвлечения вас от других задач. PySimpleGUI одинаково хорошо работает на Mac, Linux и Windows, также разработчики библиотеки отвечают на вопросы и проблемы на GitHub.

Успехов в решении задач!

© Habrahabr.ru