Визуализация воронки регистрации

Junior Python EdTech

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

**Контекст:** Edtech-платформа анализирует воронку регистрации новых пользователей.

**Данные:** DataFrame `funnel_events` — колонки: `user_id`, `event` (visit, signup_start, email_confirm, profile_complete, first_lesson), `timestamp`.

**Задание:**
1. Посчитайте количество уникальных пользователей на каждом шаге воронки
2. Рассчитайте конверсию step-to-step
3. Постройте горизонтальную столбчатую диаграмму (`barh`) с подписями процентов

Пример данных

Структура для ориентира — реальные значения из эталонного решения.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(42)
n_users = 10000
steps = ['visit', 'signup_start', 'email_confirm', 'profile_complete', 'first_lesson']
dropoff = [1.0, 0.35, 0.70, 0.80, 0.60]  # конверсия каждого шага

records = []
for uid in range(n_users):
    ts = pd.Timestamp('2024-01-01') + pd.Timedelta(minutes=np.random.randint(0, 525600))
    for i, step in enumerate(steps):
        if i > 0 and np.random.random() > dropoff[i]:
            break
        ts += pd.Timedelta(minutes=np.random.randint(1, 60))
        records.append({'user_id': uid, 'event': step, 'timestamp': ts})

events = pd.DataFrame(records)

# Считаем уникальных пользователей на каждом шаге
funnel = []
for step in steps:
    cnt = events[events['event'] == step]['user_id'].nunique()
    funnel.append({'step': step, 'users': cnt})

funnel_df = pd.DataFrame(funnel)
funnel_df['total_cvr'] = (funnel_df['users'] / funnel_df['users'].iloc[0] * 100).round(1)
funnel_df['step_cvr'] = (
    funnel_df['users'] / funnel_df['users'].shift(1) * 100
).round(1)
funnel_df.loc[0, 'step_cvr'] = 100.0

print("Воронка:")
print(funnel_df.to_string(index=False))

# Визуализация
fig, ax = plt.subplots(figsize=(10, 5))
colors = ['#4CAF50', '#2196F3', '#FF9800', '#9C27B0', '#F44336']
bars = ax.barh(funnel_df['step'][::-1], funnel_df['users'][::-1], color=colors[::-1])

for bar, pct in zip(bars, funnel_df['total_cvr'][::-1]):
    ax.text(bar.get_width() + 50, bar.get_y() + bar.get_height()/2,
            f'{pct}%', va='center', fontweight='bold')

ax.set_xlabel('Уникальные пользователи')
ax.set_title('Воронка регистрации EdTech-платформы')
plt.tight_layout()
plt.savefig('funnel.png', dpi=100)
print("\nГрафик сохранён в funnel.png")

Темы

pandas matplotlib визуализация воронка bar chart

Подсказки

Все тестовые задания →

Частые вопросы

Какой уровень знаний нужен для задачи "Визуализация воронки регистрации"?

Это задание для уровня Junior. Подходит для начинающих аналитиков, проверяет базовые знания SQL/Python/статистики.

На каких собеседованиях встречается такая задача?

Подобные задания в категории «Python» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: pandas, matplotlib, визуализация, воронка, bar chart.

Сколько времени даётся на решение?

На реальном собеседовании на подобную задачу отводится 5-10 минут — проверяется скорость и базовая грамотность. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.

Где ещё потренироваться по теме «Python»?

На zasqlpython.ru есть 482 Python задачи с проверкой через Pyodide, конспекты Python и pandas, AI мок-собеседование с разбором ваших ответов.

← Все задания