**Контекст:** 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 минут — проверяется скорость и базовая грамотность. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть 482 Python задачи с проверкой через Pyodide, конспекты Python и pandas, AI мок-собеседование с разбором ваших ответов.
← Все задания