Pandas & NumPy Academy · Урок

Визуализация пользовательских путей

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

Урок 4 из 413 шагов

«Визуализация пользовательских путей» — бесплатный урок Pandas & NumPy Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Pandas & NumPy Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Pandas & NumPy Academy содержит 4 уроков всего.

Зачем визуализировать пользовательские пути?

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

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Assume funnel_summary and retention_pct are already computed
print('Visualisation libraries loaded')

Горизонтальная столбчатая диаграмма воронки

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

FUNNEL_STEPS = ['homepage', 'product_page', 'add_to_cart', 'checkout', 'purchase']
users = [10000, 7200, 4100, 2300, 980]

fig, ax = plt.subplots(figsize=(9, 5))
bars = ax.barh(FUNNEL_STEPS[::-1], users[::-1], color='steelblue', height=0.6)
ax.set_xlabel('Unique Users')
ax.set_title('Conversion Funnel')
plt.tight_layout()
plt.show()

Добавление коэффициентов конверсии на диаграмму

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

conversions = [None, 72.0, 56.9, 56.1, 42.6]

for i, (u, c) in enumerate(zip(users[::-1], conversions[::-1])):
    label = f'{u:,} users'
    if c is not None:
        label += f'  ({c}% conv)'
    ax.text(u + 100, i, label, va='center', fontsize=9)

plt.tight_layout()
plt.show()

Повторное рассмотрение тепловой карты удержания

Тепловая карта удержания — стандартный результат когортного анализа. Каждая строка представляет когорту, каждый столбец — смещение по неделям, а цвет каждой ячейки определяется процентом удержания. Используйте цветовую карту RdYlGn (красный — низкое значение, зелёный — высокое) с явными параметрами vmin=0, vmax=100, чтобы шкала цветов оставалась одинаковой в разных презентациях и не перенастраивалась для каждой тепловой карты.

import numpy as np

# Simulated retention data for illustration
data = [[100, 55, 42, 38, 35, 33],
        [100, 52, 40, 36, 33, 0],
        [100, 58, 45, 41, 0, 0],
        [100, 60, 48, 0, 0, 0]]
retention_pct = pd.DataFrame(data, columns=range(6),
                             index=['Wk1', 'Wk2', 'Wk3', 'Wk4'])

fig, ax = plt.subplots(figsize=(10, 4))
sns.heatmap(retention_pct, annot=True, fmt='.0f', cmap='RdYlGn',
            vmin=0, vmax=100, linewidths=0.5, ax=ax)
ax.set_title('Cohort Retention Heatmap')
plt.tight_layout()
plt.show()

Скрытие ячеек неполных когорт

У новых когорт ещё не было достаточно времени, чтобы пройти все недельные интервалы. Такие ячейки должны отображаться пустыми, а не как 0 %, чтобы читатели не приняли отсутствие данных за нулевое удержание. Создайте логическую маску: значение ячейки должно быть равно 0, а индекс столбца — превышать количество недель существования когорты; затем передайте её в sns.heatmap(mask=...).

mask = retention_pct == 0  # cells with no data yet

fig, ax = plt.subplots(figsize=(10, 4))
sns.heatmap(retention_pct, annot=True, fmt='.0f', cmap='RdYlGn',
            vmin=0, vmax=100, linewidths=0.5,
            mask=mask, ax=ax)
ax.set_title('Cohort Retention (incomplete cells masked)')
plt.tight_layout()
plt.show()

Построение кривой среднего удержания

Визуализируйте кривую среднего удержания, построив средние значения столбцов матрицы удержания. Эта единственная линия обобщает общий профиль удержания продукта. Добавьте затенённую область в пределах ±1 стандартного отклонения, чтобы показать различия между когортами. Узкая область означает, что когорты ведут себя сходным образом; широкая указывает на существенные различия между когортами, которые стоит исследовать.

avg = retention_pct.mean(axis=0)
std = retention_pct.std(axis=0)

fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(avg.index, avg, marker='o', color='steelblue', linewidth=2)
ax.fill_between(avg.index, avg - std, avg + std, alpha=0.2, color='steelblue')
ax.set_xlabel('Week Number')
ax.set_ylabel('Avg Retention %')
ax.set_title('Average Cohort Retention Curve')
plt.tight_layout()
plt.show()

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

Построение воронок для разных сегментов рядом друг с другом показывает, связаны ли проблемы с продуктом в целом или только с определёнными устройствами. Создайте сгруппированную столбчатую диаграмму с двумя группами столбцов для каждого этапа воронки, используя ax.bar() со смещением по оси x. Другой вариант — построить две отдельные воронки в сетке из двух графиков 1×2 с помощью plt.subplots(1, 2), чтобы сравнение было нагляднее.

steps = ['Homepage', 'Product', 'Cart', 'Checkout', 'Purchase']
desktop = [5000, 3800, 2300, 1500, 700]
mobile = [5000, 3400, 1800, 900, 280]

x = range(len(steps))
fig, ax = plt.subplots(figsize=(10, 5))
ax.bar([i - 0.2 for i in x], desktop, width=0.4, label='Desktop', color='steelblue')
ax.bar([i + 0.2 for i in x], mobile, width=0.4, label='Mobile', color='darkorange')
ax.set_xticks(list(x))
ax.set_xticklabels(steps)
ax.legend()
ax.set_title('Funnel by Device Type')
plt.tight_layout()
plt.show()

Распределение частоты событий

Визуализация распределения количества событий за сеанс показывает, сосредоточены ли сеансы вокруг небольшого числа событий (то есть пользователи быстро достигают цели) или охватывают широкий диапазон (что может указывать на сложные пути или растерянность пользователей). Постройте график с помощью ax.hist() по столбцу event_count; если распределение сильно смещено вправо, используйте логарифмическую шкалу по оси y.

import numpy as np

event_counts = pd.Series([3, 5, 2, 8, 1, 12, 3, 4, 6, 20, 2, 3, 1, 7, 5])

fig, ax = plt.subplots(figsize=(8, 4))
ax.hist(event_counts, bins=15, color='steelblue', edgecolor='white')
ax.set_xlabel('Events per Session')
ax.set_ylabel('Number of Sessions')
ax.set_title('Session Event Frequency Distribution')
plt.tight_layout()
plt.show()

Наиболее частые последовательности событий

Покажите наиболее распространённые последовательности из двух событий (биграммы) в потоке кликов, чтобы понять типичные пути пользователей. Сгруппируйте данные по сеансам, отсортируйте по event_rank и извлеките соседние пары с помощью zip(events, events[1:]). Подсчитайте частоту пар с помощью счётчика и выведите 10 самых частых на горизонтальной столбчатой диаграмме. Это покажет, какие пути навигации преобладают в поведении пользователей.

from collections import Counter

events_per_session = [['homepage', 'product_page', 'add_to_cart'],
                       ['homepage', 'search', 'product_page'],
                       ['homepage', 'product_page', 'purchase']]

bigrams = Counter()
for session in events_per_session:
    for pair in zip(session, session[1:]):
        bigrams[pair] += 1

print(bigrams.most_common(5))

Распределение длительности сеансов

Гистограмма длительности сеансов показывает, взаимодействуют ли пользователи с продуктом недолго (менее 2 минут), умеренно долго или продолжительное время. Используйте логарифмическую шкалу по оси x, если небольшое количество очень долгих сеансов из-за этого сожмёт основную массу данных в крайний левый интервал. Проведите вертикальную линию через медиану с помощью ax.axvline(), чтобы облегчить аудитории интерпретацию «типичной» продолжительности сеанса.

durations = pd.Series([1.2, 3.5, 0.5, 12.3, 2.1, 8.7, 1.8, 0.3, 45.1, 4.6])

fig, ax = plt.subplots(figsize=(8, 4))
ax.hist(durations, bins=20, color='steelblue', edgecolor='white')
ax.axvline(durations.median(), color='red', linestyle='--', label=f'Median: {durations.median():.1f} min')
ax.set_xlabel('Session Duration (min)')
ax.set_ylabel('Sessions')
ax.legend()
plt.tight_layout()
plt.show()

Сохранение рисунка информационной панели

Объедините несколько визуализаций в один рисунок информационной панели, используя сетку графиков с помощью plt.subplots(2, 2, figsize=(14, 10)). Разместите на отдельных панелях столбчатую диаграмму воронки, тепловую карту удержания, кривую среднего удержания и распределение событий. Сохраните рисунок в PNG для публикации в интернете или в PDF для печатных отчётов. Единым рисунком легче делиться, чем четырьмя отдельными файлами.

fig, axes = plt.subplots(2, 2, figsize=(14, 10))

# Panel 1: funnel
axes[0, 0].barh(FUNNEL_STEPS[::-1], users[::-1], color='steelblue')
axes[0, 0].set_title('Funnel')

# Panel 2: retention heatmap
sns.heatmap(retention_pct, ax=axes[0, 1], cmap='RdYlGn', annot=True, fmt='.0f', vmin=0, vmax=100)
axes[0, 1].set_title('Cohort Retention')

fig.suptitle('User Journey Dashboard', fontsize=16)
plt.tight_layout()
fig.savefig('user_journey_dashboard.png', dpi=150, bbox_inches='tight')
print('Dashboard saved')

Быстрая проверка

Проверьте, насколько хорошо Вы усвоили понятия анализа данных из этого урока.

Итоги урока

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

Можно начать бесплатно

Изучай Python с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
30
Уроки
120

Часто задаваемые вопросы

Урок «Визуализация пользовательских путей» бесплатный?

Да — полный текст урока «Визуализация пользовательских путей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Pandas & NumPy Academy, подпишись на CoddyKit PRO. Курс Pandas & NumPy Academy содержит 4 уроков всего.

Чему я научусь в уроке «Визуализация пользовательских путей»?

Представляйте воронку в виде горизонтальной столбчатой диаграммы, а матрицу удержания — в виде тепловой карты, чтобы донести результаты до заинтересованных сторон. Ты практикуешь Pandas & NumPy Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Pandas & NumPy Academy?

Предыдущий опыт не требуется. Pandas & NumPy Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Визуализация пользовательских путей»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Pandas & NumPy Academy?

Да. Каждый урок Pandas & NumPy Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Формирование сессий и последовательность событий
  2. Анализ воронки
  3. Когортная таблица удержания
  4. Визуализация пользовательских путей
← Назад к Pandas & NumPy Academy