Визуализация данных в Python

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

1. Введение в визуализацию: основы работы с библиотекой Matplotlib

Введение в визуализацию: основы работы с библиотекой Matplotlib

Визуализация данных — это процесс перевода абстрактных чисел и массивов информации в графические образы. Человеческий мозг обрабатывает визуальную информацию в 60 000 раз быстрее, чем текстовую. В анализе данных график часто позволяет увидеть тренды, выбросы и закономерности, которые невозможно заметить в таблице Excel или выводе базы данных.

В экосистеме Python существует множество библиотек для визуализации (Seaborn, Plotly, Bokeh), но фундаментом для большинства из них является Matplotlib. Это старейшая, самая мощная и гибкая библиотека, понимание которой необходимо каждому аналитику и разработчику.

Установка и подготовка окружения

Matplotlib не входит в стандартную библиотеку Python, поэтому её необходимо установить. Стандартная практика — устанавливать её вместе с библиотекой NumPy, которая используется для генерации числовых данных.

В скриптах и ноутбуках Jupyter принято использовать стандартное сокращение при импорте модуля pyplot, который отвечает за построение графиков:

Анатомия графика Matplotlib

Главная сложность для новичков в Matplotlib — это иерархия объектов. График — это не просто картинка, а сложная структура вложенных контейнеров. Понимание этой структуры критически важно для тонкой настройки визуализации.

!Структура объекта Figure и его вложенных элементов

Основные компоненты:

  • Figure (Фигура) — это «холст» или контейнер верхнего уровня. Она может содержать один или несколько графиков, легенды и заголовки. Если вы сохраняете картинку в файл, вы сохраняете именно объект Figure.
  • Axes (Оси/Подграфик) — это сама область построения графика с системой координат. Именно здесь рисуются линии, точки и гистограммы. Важно не путать Axes (область построения) и Axis (математическая ось).
  • Axis (Ось) — объекты, отвечающие за отрисовку числовых осей, делений (ticks) и подписей к ним.
  • Два стиля работы: Pyplot vs Объектно-ориентированный

    В Matplotlib существует два способа написания кода, что часто сбивает с толку. Рассмотрим их различие.

    1. Стиль Pyplot (State-machine)

    Этот стиль имитирует работу в среде MATLAB. Вы вызываете функции напрямую из plt, и библиотека сама «понимает», к какому графику они относятся (к текущему активному).

    Этот метод хорош для быстрых, простых графиков «на коленке», но он плохо масштабируется, когда нужно создать сложную визуализацию с несколькими подграфиками.

    2. Объектно-ориентированный стиль (OO-Style)

    Это профессиональный стандарт. Здесь мы явно создаем объекты Figure и Axes, а затем вызываем методы конкретных объектов. Это дает полный контроль над каждым элементом.

    В дальнейшем курсе мы будем придерживаться именно объектно-ориентированного стиля.

    Построение линейного графика

    Самый базовый тип графика — линейный (plot). Он используется для отображения непрерывных изменений. Построим график математической функции.

    Рассмотрим функцию синуса:

    где — значение функции (ордината), — тригонометрическая функция синуса, а — аргумент функции (угол в радианах).

    Для построения нам понадобятся данные. Компьютер не может построить непрерывную линию бесконечной точности, он строит множество точек и соединяет их отрезками.

    Настройка визуального стиля

    «Сырой» график редко подходит для презентации. Matplotlib позволяет настроить практически любой аспект отображения через аргументы функции plot.

    Цвет и стиль линии

    * color (или c): цвет линии. Можно использовать названия ('red', 'blue'), HEX-коды ('#FF5733') или сокращения ('r', 'g', 'b'). * linestyle (или ls): стиль линии. Сплошная ('-'), штриховая ('--'), штрих-пунктирная ('-.') или точки (':'). * linewidth (или lw): толщина линии в пунктах.

    Маркеры

    Маркеры выделяют конкретные точки данных на линии.

    * marker: тип маркера ('o' — круг, 's' — квадрат, '^' — треугольник). * markersize (или ms): размер маркера.

    Пример комбинированной настройки:

    Работа с несколькими графиками (Subplots)

    Часто необходимо сравнить несколько графиков рядом. Функция plt.subplots() позволяет создать сетку из графиков.

    Синтаксис: fig, axes = plt.subplots(nrows, ncols)

    Где nrows — количество строк, ncols — количество столбцов. Переменная axes в этом случае будет содержать массив объектов, к каждому из которых можно обращаться по индексу.

    Сохранение результата

    После того как график построен, его нужно сохранить. Для этого используется метод savefig объекта Figure. Важно вызывать его до plt.show(), иначе вы сохраните пустой холст (так как show очищает буфер после показа).

    Параметр dpi (dots per inch) отвечает за разрешение изображения. Значение 300 подходит для качественной печати.

    Итоги

  • Matplotlib — базовая библиотека визуализации в Python. Для работы используется модуль matplotlib.pyplot.
  • Существует два подхода: Pyplot (быстрый, процедурный) и Объектно-ориентированный (гибкий, профессиональный). Рекомендуется использовать второй (fig, ax = plt.subplots()).
  • Объект Figure — это контейнер всего изображения, а Axes — конкретная область построения с осями.
  • Функция plot() соединяет точки линиями. Внешний вид настраивается через параметры color, linestyle, marker.
  • Для создания сетки графиков используется аргументы nrows и ncols в функции subplots.
  • 2. Продвинутая настройка графиков: стили, легенды и работа с осями

    Продвинутая настройка графиков: стили, легенды и работа с осями

    Создание графика — это лишь половина дела. Чтобы визуализация стала по-настоящему полезной, она должна быть читаемой, понятной и эстетичной. «Сырой» график из Matplotlib часто перегружен лишними деталями или, наоборот, лишен важного контекста. В этом материале мы разберем, как превратить базовую заготовку в профессиональный инструмент аналитики, используя объектно-ориентированный подход.

    Управление осями и диапазонами

    По умолчанию Matplotlib автоматически подбирает диапазоны осей (limits) так, чтобы все точки поместились на графике. Однако иногда это мешает восприятию, особенно если есть выбросы или нужно сравнить несколько графиков в одном масштабе.

    Установка лимитов

    Для ручного управления границами отображения используются методы set_xlim и set_ylim объекта Axes.

    Логарифмический масштаб

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

    Математически это означает преобразование координат по формуле:

    где — координата точки на графике, — исходное значение данных, а — основание логарифма (обычно 10).

    В Matplotlib это делается одной командой:

    Работа с метками (Ticks)

    Метки на осях делятся на два типа:

  • Locators — определяют, где будут стоять риски.
  • Formatters — определяют, что будет написано рядом с риской.
  • Чаще всего нам нужно просто заменить автоматические числа на понятные категории (например, названия месяцев вместо номеров 1-12).

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

    !Анатомия оси: различие между метками, подписями и границами

    Легенда графика

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

  • Добавить параметр label при построении графика.
  • Вызвать метод ax.legend().
  • Параметр loc управляет положением. Можно использовать строковые константы: 'upper right', 'lower left', 'center', 'best' (автоматический выбор места с минимумом перекрытия данных).

    Аннотации и текст

    Иногда легенды недостаточно, и нужно выделить конкретную точку (например, рекордный максимум). Для этого используется метод annotate.

    Он принимает текст, координаты точки (xy) и координаты текста (xytext). Если координаты отличаются, Matplotlib автоматически нарисует стрелку.

    Настройка сетки (Grid) и границ (Spines)

    Сетка

    Сетка помогает глазу соотносить точки с осями. Включается методом ax.grid().

    Параметр alpha отвечает за прозрачность (от 0 до 1). Сетка не должна отвлекать внимание от данных, поэтому её обычно делают бледной.

    Границы (Spines)

    Границы графика — это прямоугольная рамка вокруг области построения. В современном дизайне (data-ink ratio) принято убирать лишние чернила. Часто верхнюю и правую границы скрывают.

    !Сравнение стандартного оформления и минималистичного стиля с убранными границами

    Глобальные стили

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

    Посмотреть доступные стили:

    Применение стиля:

    Популярные стили: * ggplot — стиль популярной библиотеки R. * fivethirtyeight — стиль известного аналитического блога. * dark_background — для темных тем презентаций.

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

    Итоги

  • Используйте set_xlim и set_ylim для фокусировки на нужной области данных или set_yscale('log') для данных с большим разбросом значений.
  • Метки осей настраиваются через set_xticks (положение) и set_xticklabels (текст). Не забывайте про rotation для длинных подписей.
  • Легенда требует наличия параметра label в методе построения графика и вызова ax.legend().
  • Метод annotate позволяет создавать стрелки-указатели на важные точки данных.
  • Для быстрого улучшения внешнего вида используйте готовые темы через plt.style.use(), а для тонкой настройки — скрывайте лишние границы (spines) и настраивайте прозрачность сетки.