$ sudo teach IT

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

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

Конечно, подобные графики можно построить и в Matplotlib. Но Seaborn предлагает более удобный и лаконичный подход, особенно если данные уже находятся в DataFrame.

В этом уроке мы познакомимся с функцией lineplot(), научимся сравнивать динамику нескольких категорий через параметр hue, анализировать тренды и визуально сопоставлять временные ряды.

Что вы узнаете в рамках статьи

  • Как строить временные ряды в Seaborn.
  • Для чего используется lineplot().
  • Как сравнивать несколько групп на одном графике.
  • Как работает параметр hue.
  • Как анализировать тренды.
  • Как выполнять визуальное сравнение временных рядов.
  • Как Seaborn помогает автоматически сглаживать данные.

Ключевые термины

  • Временной ряд — последовательность наблюдений, привязанных ко времени.
  • Lineplot — линейный график для отображения изменений показателя.
  • Hue — параметр, позволяющий разделять данные по цветам.
  • Тренд — общее направление изменения показателя.
  • Сглаживание — уменьшение влияния случайных колебаний для выявления общей тенденции.
  • Категория — группа объектов, для которой ведется отдельный анализ.

Почему Seaborn удобен для временных рядов

Предположим, что у нас есть данные о ежедневных продажах.

import pandas as pd

df = pd.DataFrame({
    "date": [
        "2025-01-01",
        "2025-01-02",
        "2025-01-03",
        "2025-01-04",
        "2025-01-05"
    ],
    "sales": [
        1200,
        1350,
        1400,
        1600,
        1800
    ]
})

В Matplotlib нам пришлось бы отдельно передавать даты и значения. Seaborn умеет работать напрямую с DataFrame. Это делает код более компактным и удобным для чтения.

Первый график через lineplot()

Построим график продаж.

import seaborn as sns
import matplotlib.pyplot as plt

sns.lineplot(
    data=df,
    x="date",
    y="sales"
)

plt.show()

На графике отобразится изменение продаж по дням. Как и в Matplotlib, точки будут соединены линией. Такой тип визуализации считается основным инструментом анализа временных рядов.

Когда использовать lineplot()

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

Анализ трендов

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

Посмотрим на следующий набор данных.

sales = [
    1200,
    1350,
    1400,
    1600,
    1800
]

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

Что такое тренд

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

Сравнение нескольких категорий

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

import pandas as pd

df = pd.DataFrame({
    "date": [
        "2025-01-01",
        "2025-01-02",
        "2025-01-03",
        "2025-01-04",
        "2025-01-05",
        "2025-01-01",
        "2025-01-02",
        "2025-01-03",
        "2025-01-04",
        "2025-01-05"
    ],
    "sales": [
        1200, 1350, 1400, 1600, 1800,
        1000, 1100, 1250, 1500, 1700
    ],
    "store": [
        "A", "A", "A", "A", "A",
        "B", "B", "B", "B", "B"
    ]
})

Теперь можно построить оба ряда одновременно.

Использование hue

Для разделения данных по категориям используется параметр hue.

sns.lineplot(
    data=df,
    x="date",
    y="sales",
    hue="store"
)

plt.show()

Теперь каждый магазин отображается своим цветом. Seaborn автоматически создаст легенду и выполнит раскраску линий.

Почему hue так полезен

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

Визуальное сравнение рядов

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

Когда линии пересекаются

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

Автоматическое сглаживание

В реальных данных часто присутствует шум.

Например:

sales = [
    1200,
    1450,
    1300,
    1550,
    1480,
    1700
]

Показатель постоянно колеблется. Из-за этого бывает сложно увидеть общий тренд. Одной из особенностей lineplot() является возможность автоматически отображать усредненные значения, если в данных присутствует несколько наблюдений для одной точки времени. Это помогает уменьшить влияние случайных колебаний.

Сравнение трендов между группами

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

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

Настройка маркеров

При небольшом количестве наблюдений полезно отображать сами точки данных. Для этого используется параметр marker="o".

Полный пример:

sns.lineplot(
    data=df,
    x="date",
    y="sales",
    hue="store",
    marker="o"
)

plt.show()

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

Использование style

Помимо цвета можно использовать различные стили линий.

Например:

sns.lineplot(
    data=df,
    x="date",
    y="sales",
    hue="store",
    style="store"
)

plt.show()

Теперь категории будут различаться не только цветом, но и стилем линии. Это бывает полезно при печати отчетов в черно-белом формате.

Наиболее частые ошибки

  • Использовать lineplot для несвязанных наблюдений
    Линия предполагает наличие последовательности данных.
  • Не сортировать данные по времени
    График может отображаться некорректно.
  • Игнорировать легенду при использовании hue
    Пользователю будет сложно понять различия между линиями.
  • Добавлять слишком много категорий на один график
    Визуализация становится перегруженной.
  • Делать выводы по отдельным колебаниям вместо анализа общего тренда
    Случайный шум может вводить в заблуждение.

Наиболее частые вопросы

  • Когда использовать lineplot вместо scatterplot?
    Когда данные образуют последовательность во времени.
  • Зачем нужен hue?
    Для сравнения нескольких категорий на одном графике.
  • Можно ли использовать несколько признаков одновременно?
    Да, например через hue и style.
  • Что показывает тренд?
    Общее направление изменения показателя.
  • Подходит ли Seaborn для временных рядов?
    Да, особенно когда данные уже находятся в Pandas DataFrame.

Итоги

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

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

На следующий урок