Light-electric.com

IT Журнал
42 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Визуальное программирование python

Python GUI: создаём простое приложение с PyQt и Qt Designer

  • Переводы, 30 марта 2018 в 9:48
  • Никита Прияцелюк

Эта статья предназначена для тех, кто только начинает своё знакомство с созданием приложений с графическим интерфейсом (GUI) на Python. В ней мы рассмотрим основы использования PyQt в связке с Qt Designer. Шаг за шагом мы создадим простое Python GUI приложение, которое будет отображать содержимое выбранной директории.

Что нам потребуется

Нам понадобятся PyQt и Qt Designer, ну и Python, само собой.

В этой статье используется PyQt5 с Python 3, но особых различий между PyQt и PySide или их версиями для Python 2 нет.

Windows: PyQt можно скачать здесь. В комплекте с ним идёт Qt Designer.

macOS: Вы можете установить PyQt с помощью Homebrew:

$ brew install pyqt5

Скачать пакет с большинством компонентов и инструментов Qt, который содержит Qt Designer, можно по этой ссылке.

Linux: Всё нужное, вероятно, есть в репозиториях вашего дистрибутива. Qt Designer можно установить из Центра Приложений, но PyQt придётся устанавливать через терминал. Установить всё, что нам понадобится, одной командой можно, например, так:

После того как вы закончили с приготовлениями, откройте командную строку/терминал и убедитесь, что вы можете использовать команду pyuic5 . Вы должны увидеть следующее:

Если вы видите сообщение, что такой команды нет или что-то в таком роде, попробуйте загуглить решение проблемы для вашей операционной системы и версии PyQt.

Если вы используете Windows, то, скорее всего, путь C:Python36Scripts (измените 36 на вашу версию Python) не прописан в вашем PATH . Загляните в этот тред на Stack Overflow, чтобы узнать, как решить проблему.

Дизайн

Основы

Теперь, когда у нас всё готово к работе, давайте начнём с простого дизайна.

Spectrum, Екатеринбург, от 65 000 до 100 000 ₽

Откройте Qt Designer, где вы увидите диалог новой формы, выберите Main Window и нажмите Create.

После этого у вас должна появиться форма — шаблон для окна, размер которого можно менять и куда можно вставлять объекты из окна виджетов и т.д. Ознакомьтесь с интерфейсом, он довольно простой.

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

Все элементы формы и их иерархия по умолчанию отображаются в правой части окна Qt Designer под названием Object Inspector. Вы с лёгкостью можете удалять объекты, кликая по ним правой кнопкой мыши в этом окне. Или же вы можете выбрать их в основной форме и нажать клавишу DEL на клавиатуре.

В итоге мы имеем почти пустую форму. Единственный оставшийся объект — centralwidget , но он нам понадобится, поэтому с ним мы ничего не будем делать.

Теперь перетащите куда-нибудь в основную форму List Widget (не List View) и Push Button из Widget Box.

Макеты

Вместо использования фиксированных позиций и размеров элементов в приложении лучше использовать макеты. Фиксированные позиции и размеры у вас будут выглядеть хорошо (пока вы не измените размер окна), но вы никогда не можете быть уверены, что всё будет точно так же на других машинах и/или операционных системах.

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

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

Теперь в меню Qt Designer нажмите Form, затем выберите Preview и увидите что-то похожее на скриншот выше. Выглядит хорошо, не так ли? Но вот что случится, когда мы изменим размер окна:

Наши объекты остались на тех же местах и сохранили свои размеры, несмотря на то что размер основного окна изменился и кнопку почти не видно. Вот поэтому в большинстве случаев стоит использовать макеты. Конечно, бывают случаи, когда вам, например, нужна фиксированная или минимальная/максимальная ширина объекта. Но вообще при разработке приложения лучше использовать макеты.

Основное окно уже поддерживает макеты, поэтому нам ничего не нужно добавлять в нашу форму. Просто кликните правой кнопкой мыши по Main Window в Object Inspector и выберите Lay outLay out vertically. Также вы можете кликнуть правой кнопкой по пустой области в форме и выбрать те же опции:

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

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

Если у вас не получается переместить элемент в главном окне, вы можете сделать это в окне Object Inspector.

Последние штрихи

Теперь, благодаря вертикальному размещению, наши элементы выровнены правильно. Единственное, что осталось сделать (но не обязательно), — изменить имя элементов и их текст.

В простом приложении вроде этого с одним лишь списком и кнопкой изменение имён не обязательно, так как им в любом случае просто пользоваться. Тем не менее правильное именование элементов — то, к чему стоит привыкать с самого начала.

Свойства элементов можно изменить в разделе Property Editor.

Подсказка: вы можете менять размер, передвигать или добавлять часто используемые элементы в интерфейс Qt Designer для ускорения рабочего процесса. Вы можете добавлять скрытые/закрытые части интерфейса через пункт меню View.

Нажмите на кнопку, которую вы добавили в форму. Теперь в Property Editor вы должны видеть все свойства этого элемента. В данный момент нас интересуют objectName и text в разделе QAbstractButton . Вы можете сворачивать разделы в Property Editor нажатием по названию раздела.

Измените значение objectName на btnBrowse и text на Выберите папку.

Должно получиться так:

Именем объекта списка является listWidget , что вполне подходит в данном случае.

Сохраните дизайн как design.ui в папке проекта.

Превращаем дизайн в код

Конечно, можно использовать .ui -файлы напрямую из Python-кода, однако есть и другой путь, который может показаться легче. Можно конвертировать код .ui -файла в Python-файл, который мы потом сможем импортировать и использовать. Для этого мы используем команду pyuic5 из терминала/командной строки.

Чтобы конвертировать .ui -файл в Python-файл с названием design.py , используйте следующую команду:

Пишем код

Теперь у нас есть файл design.py с нужной частью дизайна нашего приложения и мы начинать работу над созданием его логики.

Создайте файл main.py в папке, где находится design.py .

Используем дизайн

Для Python GUI приложения понадобятся следующие модули:

Также нам нужен код дизайна, который мы создали ранее, поэтому его мы тоже импортируем:

Так как файл с дизайном будет полностью перезаписываться каждый раз при изменении дизайна, мы не будем изменять его. Вместо этого мы создадим новый класс ExampleApp , который объединим с кодом дизайна для использования всех его функций:

В этом классе мы будем взаимодействовать с элементами интерфейса, добавлять соединения и всё остальное, что нам потребуется. Но для начала нам нужно инициализировать класс при запуске кода. С этим мы разберёмся в функции main() :

И чтобы выполнить эту функцию, мы воспользуемся привычной конструкцией:

В итоге main.py выглядит таким образом:

Если запустить этот код: $ python3 main.py , то наше приложение запустится!

Но нажатие на кнопку ничего не даёт, поэтому нам придётся с этим разобраться.

Добавляем функциональность в наше Python GUI приложение

Примечание Весь дальнейший код пишется внутри класса ExampleApp .

Начнём с кнопки Выберите папку. Привязать к функции событие вроде нажатия на кнопку можно следующим образом:

Добавьте эту строку в метод __init__ класса ExampleApp , чтобы выполнить привязку при запуске приложения. А теперь взглянем на неё поближе:

  • self.btnBrowse : здесь btnBrowse — имя объекта, который мы определили в Qt Designer. self говорит само за себя и означает принадлежность к текущему классу;
  • clicked — событие, которое мы хотим привязать. У разных элементов разные события, например, у виджетов списка есть itemSelectionChanged и т.д.;
  • connect() — метод, который привязывает событие к вызову переданной функции;
  • self.browse_folder — просто функция (метод), которую мы описали в классе ExampleApp .

Для открытия диалога выбора папки мы можем использовать встроенный метод QtWidgets.QFileDialog.getExistingDirectory :

Если пользователь выберет директорию, переменной directory присвоится абсолютный путь к выбранной директории, в противном случае она будет равна None . Чтобы не выполнять код дальше, если пользователь закроет диалог, мы используем команду if directory: .

Для отображения содержимого директории нам нужно импортировать os :

И получить список содержимого следующим образом:

Для добавления элементов в listWidget мы используем метод addItem() , а для удаления всех элементов у нас есть self.listWidget.clear() .

В итоге функция browse_folder должна выглядеть так:

Теперь, если запустить приложение, нажать на кнопку и выбрать директорию, мы увидим:

Так выглядит весь код нашего Python GUI приложения:

Это были основы использования Qt Designer и PyQt для разработки Python GUI приложения. Теперь вы можете спокойно изменять дизайн приложения и использовать команду pyuic5 без страха потерять написанный код.

GUI (графический интерфейс пользователя)

Обзор библиотек для создания графического интерфейса пользователя (GUI).

Игра Тетрис на PyQt5

Игра Тетрис – одна из самых популярных компьютерных игр. Оригинальная игра была разработана и запрограммирована русским программистом Алексеем Пажитновым в 1985 году. С тех пор, Тетрис доступен на почти каждой компьютерной платформе в множестве вариаций.

Создание простой компьютерной игры на PyQt5 – отличный способ повышения навыков программирования.

Создание собственного виджета в PyQt5

PyQt5 имеет богатый набор готовых виджетов. Тем не менее, нет в мире инструментария, способного предоставить все виджеты, в которых программисты могут нуждаться для своих приложений. Библиотеки обычно предоставляют только самые распространенные виджеты, такие как кнопки, текстовые виджеты или ползунки. Если есть необходимость в более специализированных виджетах, мы должны создать их сами.

Рисование в PyQt5

Система рисования PyQt5 способна обрабатывать векторную графику, изображения и шрифты. Рисование необходимо в приложениях, когда мы хотим изменить или улучшить существующий виджет, или мы создаём пользовательский виджет с нуля. Чтобы сделать рисунок, мы используем API рисования, предоставленное инструментарием PyQt5.

Перетаскивание (drag & drop) в PyQt5

В этой части руководства по PyQt5, мы поговорим об операциях drag & drop. В графических интерфейсах, drag & drop – это действие клика на виртуальный объект и перетаскивания его в другое положение или в другой виртуальный объект.

Виджеты в PyQt5 (часть 2)

Мы продолжим знакомство с виджетами PyQt5.

Мы обсудим QPixmap, QLineEdit, QSplitter и QComboBox.

Виджеты в PyQt5

Виджеты – это основные строительные кирпичики приложения. PyQt5 имеет множество разнообразных виджетов, включая кнопки, чекбоксы, ползунки и списки. В этой части руководства, мы опишем несколько полезных виджетов: QCheckBox, ToggleButton, QSlider, QProgressBar и QCalendarWidget.

Диалоговые окна в PyQt5

Диалоговые окна (диалоги) являются неотъемлемой частью большинства современных графических приложений. Диалог в обычной жизни — это беседа между двумя и более людьми. В компьютерном приложении, диалог – это окно, которое используется, чтобы «беседовать» с приложением. Диалоги используются для ввода и изменения данных, изменения настроек приложения, и так далее.

События и сигналы в PyQt5

В этой части учебника PyQt5, мы изучим события и сигналы, встречающиеся в приложениях.

Управление макетом в PyQt5

Значимая сторона в программировании графических приложений – управление макетом, то есть расположение виджетов в окне приложения. Управление макетом можно осуществлять двумя основными способами: с помощью абсолютного позиционирования или специальных классов.

Меню и тулбары в PyQt5

В этой части учебника PyQt5, мы создадим меню и тулбар (панель инструментов). Меню представляет собой группу команд, расположенных в менюбаре. Панель инструментов содержит кнопки с некоторыми общими командами в приложении.

5 простых способов визуализации данных на Python. С кодом

Визуализация данных — это большая часть работы специалистов в области data science. На ранних стадиях развития проекта часто необходимо выполнять разведочный анализ данных (РАД, Exploratory data analysis (EDA)), чтобы выявить закономерности, которые обнаруживают данные. Визуализация данных помогает представить большие и сложные наборы данных в простом и наглядном виде. На этапе окончания проекта важно суметь отчитаться о его результатах так, чтобы даже непрофессионалам, не обладающим техническими знаниями, всё стало ясно и понятно.

Matplotlib — это популярная библиотека для визуализации данных, написанная на языке Python. Хоть пользоваться ей очень просто, настройка данных, параметров, графиков и отрисовки для каждого нового проекта — занятие нудное и утомительное. В этом посте мы разберем 6 способов визуализации данных и напишем быстрые и простые функции для их реализации с помощью питоновской библиотеки Matplotlib. А пока взгляните на прекрасный график, который поможет вам выбрать правильный тип визуализации данных!

Алгоритм выбора техники визуализации в зависимости от задачи

Диаграммы рассеяния (Scatter Plots)

Используйте их, если хотите показать связь между двумя переменными, так как они позволяют отображать грубое распределение данных. На нем также можно показать соотношение между различными группами данных за счет окрашивания их разными цветами. Нужно показать взаимосвязь между тремя переменным? Ноу проблем! Просто добавьте дополнительные параметры, такие как размер точек, чтобы закодировать эту третью переменную, как это сделано на втором графике снизу.

Теперь что касается кода. Сначала мы импортируем в Python библиотеку Matplotlib, а точнее её модуль pyplot, для краткости используя аббревиатуру «plt». Чтобы создать новый график, мы вызываем функцию plt.subplots() . Затем передаем данные оси x и оси y в функцию, а затем уже всё вместе передаем функции ax.scatter() для построения диаграммы рассеяния. Мы также можем установить размер точки, цвет точки и альфа-прозрачность. Можно даже использовать логарифмическую шкалу для оси y. Затем задаем заголовок и метки для осей. Это простая в использовании функция позволяет с нуля создать и отрисовать диаграмму рассеяния!

Графики

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

Ниже представлен код для создания линейного графика. Он похож на код для программирования диаграммы рассеяния, рассмотренной выше, с некоторыми незначительными вариациями в переменных.

Гистограммы (Histograms)

Гистограммы полезны для представления (или даже выявления) распределения данных. Посмотрите на пример ниже, где мы построили гистограмму частоты vs IQ. Мы легко можем заметить концентрацию ближе к центру, а также отчетливо прослеживается медиана значений. Мы также видим, что оно подчиняется гауссовскому распределению. Использование столбцов (а не точек рассеивания, например) действительно дает нам четкую визуализацию относительной разницы между частотой каждого интервала. Использование полос (интервалов = дискретизация) действительно помогает нам увидеть «целостную картину». Если эти же данные представить в виде отдельных точек, без выделения интервалов, то на диаграмме появится слишком много шума, что затруднит понимание тенденции, которая иллюстрируется с помощью этих данных.

Ниже приведен код гистограммы в Matplotlib. Обратите внимание на два параметра. Во-первых, параметры n_bins определяют, сколько отдельных интервалов нам необходимо поместить на нашей гистограмме. Большее число интервалов даст нам более точную информацию, но может также ввести информационный шум и отвлечь нас от понимания целостной картины; с другой стороны, меньшее число интервалов обеспечивает нам вид с высоты птичьего полёта и целостную картину того, что происходит, при этом не перегружая её мельчайшими деталями. Во-вторых, параметр cumulative является булевым (то есть 1 или 0), что позволяет нам выбрать, является ли наша гистограмма кумулятивной или нет. Другими словами, мы задаем либо плотность вероятности ( Probability Density Function (PDF)) либо функцию интегрального распределения ( Cumulative Density Function (CDF)).

Теперь представьте себе, что мы хотим сравнить распределение двух переменных в наших данных. Первая мысль, которая приходит в голову — это сделать две отдельные гистограммы и расположить их рядом, для наглядности. Но на самом деле есть способ лучше: мы можем накладывать гистограммы с различной прозрачностью. Посмотрите на рисунок, представленный ниже. Равномерное распределение имеет прозрачность 0,5, чтобы мы могли видеть, что расположено за ним. Это позволяет одновременно отобразить два распределения на одном рисунке.

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

Столбчатые диаграммы (Bar Plots)

Столбчатые диаграммы наиболее эффективны тогда, когда вам необходимо визуализировать данные в виде категорий, если их число не превышает 10. Если у нас слишком много категорий, то столбцы будут сильно загромождать график, и его трудно будет понять. Они хороши для данных, разделенных по категориям, потому что вы можете легко увидеть разницу между категориями в зависимости от размера столбца (например, величины); категории также легко можно сформировать и выделить цветом. Есть три разных типа столбчатых диаграмм, которые мы будем рассматривать далее: обычные, сгруппированные и составные. Каждый из этих типов мы рассмотрим по порядку.

Обычная столбчатая диаграмма находится на первом рисунке снизу. В функции barplot() x_data задает метки на оси x, а y_data задает высоту столбца по оси y. Строка ошибки представляет собой дополнительную линию, расположенную в центре каждого столбца, которая может быть использована для отображения стандартного отклонения.

Сгруппированные столбчатые диаграммы позволяют сравнивать несколько переменных. Посмотрите на второй график снизу. Первой переменной, которую мы сравниваем, задается то, как оценки варьируются от группы к группе (группы G1, G2, … и так далее). Мы также сравниваем между собой распределение полов, что закодировано цветом. Теперь взгляните на код — вы заметите, что переменная y_data_list теперь фактически представляет собой список списков, где каждый вложенный список обозначает другую группу. Затем мы проходимся циклом по каждой группе, и для каждой группы рисуем столбец для каждого метки по оси x; все группы также дополнительно окрашиваются.

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

Прямоугольные диаграммы (Box Plots)

Ранее мы рассмотрели гистограммы, которые великолепно подходят для визуализации распределения переменных. Но что, если этого нам недостаточно и нужно отобразить больше информации? Может быть, нам необходимо более наглядное представление стандартного отклонения? Возможно, медиана сильно отличается от среднего значения, и, следовательно, у нас много отклонений? Что, если имеются скосы, и многие из значений сосредоточены на одной стороне?

Вот здесь и вступают в игру прямоугольные диаграммы. Именно они помогают нам дополнительно разместить выше указанную информацию. Нижняя и верхняя части ящика, составленного сплошной линией, всегда являются первым и третьим квартилями (т.е. 25% и 75% данных), а полоса внутри прямоугольника всегда вторая квартиль (медиана). Усы (то есть пунктирные линии с полосками на конце) начинаются от прямоугольника и показывают диапазон данных.

Поскольку прямоугольные диаграммы строятся для каждой группы / переменной, их достаточно легко настраивать. x_data — это список групп / переменных. Функция Matplotlib boxplot() создает график для каждого столбца y_data или каждого вектора в последовательности y_data; таким образом, каждое значение в x_data соответствует столбцу / вектору в y_data . Все, что нам остается добавить, — это внешний вид графика .

Заключение

Существует 5 быстрых и простых способов визуализации данных с использованием библиотеки Matplotlib. Оформление чего-либо в функцию всегда делает ваш код более легким для чтения и использования! Надеюсь, вам понравился этот пост и узнали что-нибудь новое и полезное.

Перевод выполнила Журавлева Дарья.

Обзор пакетов для визуализации данных на Python

Есть много способов построения графиков на Python, но какой из них лучше? Когда вы делаете визуализацию, важно задать несколько вопросов о цели построения графика: пытаетесь ли вы создать первичное представление ваших данных для дальнейшего анализа, или пытаетесь произвести впечатление на презентации?

В этой статье я расскажу о нескольких популярных пакетах визуализации Python, их плюсах и минусах, а также ситуациях, в которых каждый может выгодно проявить себя. Я включу в этот обзор обсуждение только двумерных графиков, хотя многие из этих пакетов также хорошо поддерживают 3D.

Перевод статьи «Reviewing Python Visualization Packages», автор — Aaron Frederick, ссылка на оригинал — в подвале статьи.

Matplotlib, Seaborn и Pandas

Я собираюсь включить их в одну группу по нескольким причинам. Во-первых, из-за того, что графики Seaborn и Pandas были построены на основе Matplotlib — когда вы используете Seaborn или df.plot() в Pandas, вы фактически используете код, который использует для построения Matplotlib. Таким образом, эстетика для них схожа, и настройка ваших графиков будет выглядеть очень похожим образом.

Когда я думаю об этих инструментах визуализации, я думаю о трех словах: исследовательский анализ данных. Эти пакеты отлично подходят для первого взгляда на ваши данные, но их не хватает, когда дело доходит до презентации. Matplotlib — это низкоуровневая библиотека, которая обеспечивает невероятные уровни настройки (так что не стоит исключать ее как вариант для презентации!), Но есть много других инструментов, которые делают великолепную графику, достойную презентации, намного проще. Matplotlib также имеет набор стилей, которые по внешнему стилю имитируют другие популярные пакеты, такие как ggplot2 и xkcd. Ниже приведены некоторые примеры графиков, созданных с использованием Matplotlib и его двоюродных братьев.

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

Простая гистограмма в matplotlib

Этот второй график представляет собой график Q-Q остатков регрессионного эксперимента. Основная цель этой визуализации — показать, сколько строк необходимо для создания полезной визуализации, даже если эстетика не сногсшибательна.

В конечном счете, Matplotlib и его родственники очень эффективны, но, как правило, не являются конечным продуктом в плане презентации.

ggplot (2)

«Почему ты говоришь о ggplot, самом популярном пакете визуализации R? Разве это не обзор пакетов для Python? »- спросите вы. Люди реализовали ggplot2 в Python, копируя все от эстетики до синтаксиса. Он выглядит и ощущается как ggplot2, но с дополнительным бонусом наличия зависимости от уже устаревшей версии пакета Pandas. Если вы хотите использовать НАСТОЯЩИЙ ggplot в R (который имеет такой же синтаксис и внешний вид, но без зависимостей), я расскажу о некоторых его преимуществах здесь! Тем не менее, если вы действительно хотите использовать ggplot в Python, вы должны установить Pandas версии 0.19.2, но я бы предостерег вас от понижения версии вашего Pandas.

В чем ggplot2 (и, я думаю, ggplot для Python) меняет правила игры, так это то, что он использует «Грамматику графики» для построения фигуры. Основная предпосылка заключается в том, что вы можете создать экземпляр своего графика, а затем отдельно добавить к нему различные функции, т.е. Заголовок, оси, точки данных и линия тренда добавляются по отдельности со своими собственными эстетическими свойствами. Ниже приведен простой пример кода ggplot на R. Сначала мы создаем наш рисунок с помощью ggplot, устанавливаем наше оформление и данные, затем добавляем точки, тему и метки оси/заголовка.

Bokeh

Bokeh это красиво. Концептуально похож на ggplot в том,что он тоже использует грамматику графики для структурирования своих фигур. Bokeh имеет простой в использовании интерфейс, который создает очень профессиональные графики и информационные панели. Чтобы проиллюстрировать мою точку зрения (извините!), Ниже приведен пример кода для создания гистограммы из набора данных 538 Masculinity Survey.

Гистограмма в Bokeh

Гистограмма показывает ответы на вопрос «Вы идентифицируете себя как мужского пола?», как было задано в недавнем опросе (538 Masculinity Survey). Код Bokeh создает элегантную и профессиональную гистограмму подсчета ответов с разумным размером шрифта, засечками по осям и форматированием. Большая часть кода, который я написал, была посвящена маркировке осей и заголовков, а также приданию столбцам цвета и границы. Делая красивые, презентабельные фигуры, я очень сильно склоняюсь к Bokeh — много эстетической работы уже сделано для нас!

Та же гистограмма по умолчанию в Pandas

Синий график — это то, что происходит из единственной последней строки из кода выше. Обе гистограммы имеют одинаковые значения, но служат разным целям. В исследовательской обстановке гораздо удобнее написать одну строку в Pandas, чтобы увидеть данные, но эстетика Bokeh явно явно лучше. Каждое удобство, которое обеспечивает Bokeh по умолчанию, требует настройки в matplotlib, будь то угол наложения меток вдоль горизонтальной оси, фоновые линии, разброс делений по вертикальной оси, изменение размера шрифта/выделение курсивом/выделение жирным и т.д.

На приведенном ниже графике показано несколько случайных трендов с использованием нескольких дополнительных настроек с легендами и различными типами линий и цветами:

Тренды с легендой в Bokeh

Bokeh также отличный инструмент для создания интерактивных графиков (dashboards). Я не хочу вдаваться в интерактивные графики в этом посте, но есть отличные посты (вроде этого), которые больше рассказывают о применении и реализации интерактивных графиков в Bokeh.

Plotly

Plotly чрезвычайно мощный, но настройка и создание графиков в нем занимают много времени, и эта настройка не является интуитивно понятной. Проведя большую часть утра, работая с Plotly, я пошел на обед, почти ничего не показав в результате. Я создал гистограмму без меток на осях и диаграмму рассеяния, в которой были линии, которые я не мог удалить. Некоторые заметные минусы при начале работы с Plotly:

  • Требуется ключ API и регистрация, а не просто установка через pip
  • Он строит графики данных/слоев (layouts), которые являются уникальными для Plotly и не являются интуитивно понятными
  • Слой на графике у меня не сработал (40 строк кода буквально ничего!)

Однако для всех его недостатков настройки есть свои плюсы и обходные пути:

  • Вы можете редактировать графики на веб-сайте Plotly, а также в среде Python.
  • Много функционала поддержки интерактивных графиков/панелей
  • Plotly сотрудничает с Mapbox, что позволяет создавать индивидуальные карты
  • Потрясающий потенциал для отличной графики

Для меня было бы несправедливо просто высказать свои претензии к Plotly, не показывая какой-то код и то, что я смог достичь по сравнению с тем, что сделали люди, более способные с этим пакетом.

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

В целом, эстетика из коробки выглядит хорошо, но многочисленные попытки исправить метки осей, дословно копирующие документацию, не дали никаких изменений. Однако, как я и обещал ранее, вот несколько графиков, на которых показан потенциал Plotly и почему стоит потратить больше нескольких часов:

Потенциал графиков в Plotly

Pygal

Pygal — немного менее известный пакет для визуализаций, который, как и другие популярные пакеты, использует грамматику графики для построения своих изображений. Это относительно простой пакет из-за того, что все объекты на графике очень примитивные. Использование Pygal очень простое:

  1. Инициализация холста
  2. Форматирование объектов рисунка с использованием атрибутов
  3. Добавление данных к своей фигуре, используя figure.add()

Основные проблемы, которые у меня были с Pygal, заключались в рендере графиков. Мне пришлось использовать их метод render_to_file, а затем открыть этот файл в веб-браузере, чтобы увидеть, что я построил. В конечном итоге это того стоило, поскольку графики интерактивны и имеют приятную и легко настраиваемую эстетику. В целом, пакет кажется хорошим, но имеет некоторые особенности создания/рендера файлов, которые ограничивают его привлекательность.

Networkx

Networkx — отличное решение для анализа и визуализации графов, хотя визуально оно основано на matplotlib. Графы и сети — это не моя предметная область, но Networkx позволяет быстро и легко графически представлять подключенные сети. Ниже приведены несколько различных представлений простого графа, который я построил, и код, начинающий строить небольшую сеть Facebook, загруженную из SNAP в Стэнфорде.

Код, который я использовал для цветового кодирования каждого узла по его номеру (1–10), приведен ниже:

Ниже приведен код, который я написал для визуализации разреженного графа Facebook, упомянутого выше:

Это разреженный граф. Networkx показывает это, давая каждому кластеру максимальное разделение

Существует много пакетов для визуализации данных, и нет лучшего пакета. Надеюсь, что после прочтения этого обзора вы увидите, как некоторые из различных визуальных представлений и кодов поддаются различным ситуациям, от первоначального представления данных до презентации.

Python-сообщество

Уведомления

#1 Март 4, 2016 09:12:55

Визуальное программирование на Python

Приветствую Вас, друзья. Я совсем недавно начал изучать Python, да и в целом программирование. До сего момента к программированию никак не относился. На данный момент мои знания ограничены, и появились вопросы, на которые мне не удается найти ответы в Гугле. Прошу разъяснить.

Визуальное программирование? Есть ли такое на языке Python? Мой товарищ однажды показал мне C++ Builder, где он за пару минут может создать какое-никакое приложение, просто нарисовав пару прямоугольников и задав им соответствующие функции.

Есть ли что-то похожее в Python? На данный момент, я так понимаю, что вся работа производится через tkinter, где мы подробно расписываем каждое “окно” : для чего, каких размеров, его функцию,где будет находится. Так ли это?

Если да, то скажите пожалуйста, перед тем как начать писать те самые “окошки”, вы сперва рисуете как-то на бумаге представление о будущей программе? Имеется ввиду не две-три “кнопки” (их ещё можно удержать в голове), а если их будет 10,15,20? Как вы держите эту информацию по каждой будущей “кнопке”? Записываете ли на бумаге, либо каким-то другим способом?

Если нет, прошу написать, с помощью чего вы создаете полноценную “программу”.

Заранее извиняюсь за вопросы от чайника, надеюсь на адекватный ответ. Спасибо

#2 Март 4, 2016 10:19:09

Визуальное программирование на Python

fer0m
Я совсем недавно начал изучать Python, да и в целом программирование. Если вы хотите изучать программирование — изучайте программирование, а не окошки и кнопочки. Вам надо знать язык программирования, алгоритмы, шаблоны проектирования, понимать разные парадигмы и разбираться в современных технологиях и фреймворках, владеть неким минимумом сопутствующих знаний (базы данных, сетевые протоколы, многопоточность и прочие и тому подобное).
fer0m
с помощью чего вы создаете полноценную “программу” Для вас “полноценная” программа ассоциируется исключительно с окошками?

#3 Март 4, 2016 10:47:42

Визуальное программирование на Python

FishHook
Если вы хотите изучать программирование — изучайте программирование, а не окошки и кнопочки. Вам надо знать язык программирования, алгоритмы, шаблоны проектирования, понимать разные парадигмы и разбираться в современных технологиях и фреймворках, владеть неким минимумом сопутствующих знаний (базы данных, сетевые протоколы, многопоточность и прочие и тому подобное).
Хорошо, я Вас понял, спасибо!

FishHook
Для вас “полноценная” программа ассоциируется исключительно с окошками?
Мне кажется, что визуализация немаловажная часть. Одно дело написать калькулятор/сапер и пр. и использовать в командной строке, а другое — видеть, что то, что ты сделал работает как “полноценная программа”. Да, скрывать не буду, на данный момент — я был бы рад увидеть свои примитивные программы в привычном для пользователя виде.

#4 Март 4, 2016 11:23:39

Визуальное программирование на Python

Отвечу кратко. Хотите делать приложения с кнопочками — используйте библиотеку Tkinter. Например, вот так можно сделать окно с кнопкой:

Отредактировано Volobuev_Ilya (Март 4, 2016 11:25:27)

#5 Март 4, 2016 11:29:16

Визуальное программирование на Python

fer0m, если интересны окошечки и кнопочки, посмотри на Qt и его привязку к питону. У него есть визуальный конструктор.

#6 Март 4, 2016 12:42:40

Визуальное программирование на Python

Volobuev_Ilya
Вообще, Tkinter позволит создавать быстро и просто любые приложения. Поэтому не бойтесь — идите вперед и постигайте горизонты мастерства. Удачи в этом деле!
Отлично, спасибо! Буду пробовать!

pasaranax
fer0m, если интересны окошечки и кнопочки, посмотри на Qt и его привязку к питону. У него есть визуальный конструктор.
Супер! Вот, что я хотел узнать! Большое спасибо!

#7 Март 4, 2016 13:07:08

Визуальное программирование на Python

Можешь использовать PyQt.
Неплохой туториал.
Это в Qt есть демонстрационные программки на C++, а Jan Bodnar перевёл их на питон.
Там можно вручную писать, а можно делать форму (xml-файл) в Qt Designer’е и переводить её с помощью утилиты pyuic4 в код на питоне.

fer0m
Как вы держите эту информацию по каждой будущей “кнопке”? Вообще, для проектирования используется UML. Что и как работает в программе, описывается в виде uml-диаграмм. Есть программы для построения uml-диаграмм.
А то, как выглядит интерфейс, рисуется в программе для построения интерфейса.

fer0m
Записываете ли на бумаге, либо каким-то другим способом? На бумаге не записывается. Всё делается так, чтобы хранить в проекте.

fer0m
Одно дело написать калькулятор/сапер и пр. и использовать в командной строке, а другое — видеть, что то, что ты сделал работает как “полноценная программа”. Ну, ты же консольные не напишешь. Для этого надо в теории программирования знания иметь. Даже если ты язык выучишь, ты всё равно на нём ничего не напишешь.
Просто в консоли набросай программку, которая вычисляет выражения:

0 0 голоса
Рейтинг статьи
Читать еще:  Программирование на си массивы
Ссылка на основную публикацию
ВсеИнструменты