УДК 004

Визуализация данных в реальном времени на Python

Ильин Виталий Алексеевич – аспирант МИРЭА - Российского технологического университета.

Аннотация: В данной статье рассматриваются способы визуализации данных в реальном времени на Python. Были рассмотрены основные библиотеки, выполняющие данную задачу. Также было проведено сравнение их производительности при отображении данных, и были даны методы ее повышения.

Ключевые слова: Python, визуализация данных, режим реального времени, Matplotlib, PyQtGraph.

В различных сферах науки основным инструментом для работы с данными является язык программирования Python. Главное преимущество языка заключатся в наличии множества различных библиотек, которые предоставляют готовые решения для научных вычислений, машинного обучения, Data Science и т.д.

При работе с большим объемом данных необходимо прибегать к различным способам визуализации для дальнейшего анализа и эффективного изучения. В Python для этих целей используется библиотека Matplotlib [1]. Она может использоваться как альтернатива средствам визуализации Matlab за счет модуля pyplot, который имеет схожий синтаксис. Однако Matplotlib имеет намного больше возможностей и позволяет пользователям самостоятельно настраивать буквально каждый объект графиков. Эта библиотека была бы лучшим вариантом для работы с данными в реальном времени, если бы не один минус.

Минус Matplotlib заключается в невысокой производительности. Задержка перед рендерингом данных может быть критичной при работе в режиме реального времени. Но в некоторых случаях низкая производительность возникает за счет неправильного использования возможностей данной библиотеки. Далее приведены методы оптимизации рендеринга графиков:

  • Реализация фонового кэширования. Увеличение скорости 1.5 раз.
  • Использование команды fig.canvas.update() вместо fig.canvas.blit(ax.bbox). Команда blit() приводит к утечке памяти. Увеличение скорости в 1.85 раз.
  • Указание пределов осей. Без фиксации этих параметров на каждом этапе происходит масштабирование осей, которое потребляет значительный объем ресурсов. Увеличение скорости в 14 раз.

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

PyQtGraph разработана на основе высокопроизводительной библиотеки научных вычислений NumPy и библиотеке графического интерфейса PyQt / PySide [2]. Это обеспечивает необходимую скорость при работе с данными в реальном времени. Помимо средств создания графиков данная библиотека включает в себя компоненты инженерных и научных программ. Интерактивные элементы позволяют взаимодействовать с данными и управлять объектом визуализации. Использование PyQtGraph вместо Matplotlib позволяет увеличить скорость в 20 раз. Но эта библиотека тоже имеет свои минусы – получившиеся графики сложно настроить так, чтобы их можно было использовать в различных работах, в которых присутствуют стандартные требования по оформлению таких материалов. Основная цель этой библиотеки заключается в ее интерактивности и скорости работы, и для достижения этой цели разработчикам пришлось пожертвовать визуальной составляющей и гибкостью настроек внешнего вида.

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

Список литературы

  1. Barrett, Paul & Hunter, J. & Miller, J.T. & Hsu, J.-C & Greenfield, P. (2005) Matplotlib – A Portable Python Plotting Package // Astronomical data analysis software and systems XIV. P. 91-95
  2. Kelekar, Aditya. Towards Better Open-Source Development: Improving PyQtGraph’s Feature-Development Process. Thesis. Metropolia University of Applied Sciences, Vantaa, 2018.

Интересная статья? Поделись ей с другими: