01 / тестовое задание

Aviasales Aviastats:
тестовое задание для аналитика

Реальное тестовое с собеседования на Middle Analyst: исходный текст задания, как решать и частые ошибки.

02 / оригинальный текст

Текст тестового задания

Исходный текст задания без редактуры — так, как его прислали кандидату.

Данные к заданиюОткрыть данные →

Задание #1

Есть «сырые» данные о покупках авиабилетов, которые лежат в `data.csv`. Описаны они полями:

`booking_id` - ID бронирования

`booking_month` - месяц покупки билета

`passengers` - количество пассажиров в бронировании

`price` - стоимость покупки билета. Причём если пассажиров несколько, то это поле учитывает полную стоимость, а не на 1 пассажира

`flights_info` - список из всех рейсов в этом билете.

Считаем, что это все рейсы без обратного билета, но по пути могут быть пересадки. Элемент списка - конкретный перелёт.

Список:

[ { «origin»: «SVO», «destination»: «MCT», «airline»: «WY», «baggage»: «With baggage» }, { «origin»: «MCT», «destination»: «HKT», «airline»: «WY», «baggage»: «With baggage» } ]

Нужно эти данные привести в такой вид, чтобы на каждый рейс внутри билета была своя отдельная строка. То есть в примере выше этот один билет должен породить 2 строки с рейсом `SVO->MCT` и `MCT->HKT`

При этом таблица должна иметь столбцы:

`booking_id` - ID бронирования

`booking_month` - месяц покупки билета

`itinerary` - маршрут, должен иметь вид `{start airport}-{change airport 1}-...-{change airport N}-{finish airport}`. Для примера выше это будет строка `SVO-MCT-HKT`

`flights_count` - количество рейсов в маршруте (1, если рейс прямой, и больше 1, если есть хотя бы одна пересадка)

`flight_id` - ID рейса (можно сгенерировать как хэш функция `md5` от `booking_id` + дополнительный символ (например, можно использовать `flight_index`, описанный ниже))

`flight_index` - номер рейса в маршруте, начиная с 0. То есть для примера выше рейс `SVO->MCT` имеет индекс `0`, а `MCT->HKT` имеет индекс 1

`origin` - код аэропорта вылета рейса

`destination` - код аэропорта прилета рейса

`airline` - код авиакомпании, выполняющей рейс

`baggage` - информация о том, является ли тариф билета с багажом или без багажа

`passengers` - количество пассажиров в билете

`price` - цена билета (полная)

Можно какие-то столбцы добавить или изменить логику текущих, если есть идеи, как можно сделать данные лучше

Задание #2

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

Соберите визуализации либо в ноутбуке, либо дашбордом в любом BI-инструменте со ссылкой на public-версию отчета (например, через Tableau Public и т.д.).

Московский узел Из Москвы с Питер `LED` можно улететь разными способами

Из Шереметьево `SVO`

Из Внуково `VKO`

Из Домодедово `DME`

Нужно исследовать, как устроен пассажиропоток

Как он распределен между этими московскими аэропортами?

Какая динамика в году по пассажиропотоку? Если есть какие-то изменения в трафике, то чем их можно объяснить?

Конкуренция есть не только у аэропортов, но и у авиакомпаний. Как распределить трафик между ними для каждого аэропорта?

Цены какой авиакомпании являются наиболее выгодными? Какой самый дешёвый способ улететь на самолёте из Москвы в Питер?

Какая авиакомпания зарабатывает больше всех (в сумме и в среднем на одном пассажире)? Можно считать, что выручка авиакомпании - это сумма цен билетов

03 / что проверяют

Что проверяет это задание

01

Дашборды

Визуализация метрик и понятная подача результатов.

02

Python

Обработка данных и расчёты: pandas, скрипты, автоматизация.

03

Аналитическое мышление

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

04 / как решать

Как подойти к решению

  1. 1

    Разберите условие: что именно просят посчитать и в каких разрезах.

  2. 2

    Сверьтесь с данными: какие таблицы есть, период и нужные фильтры.

  3. 3

    Решайте по шагам и фиксируйте промежуточные результаты и допущения.

  4. 4

    Доведите до финальных чисел и коротких выводов или рекомендаций.

05 / частые ошибки

Частые ошибки

  • Неверный период, разрез или единицы измерения.
  • Не учтены фильтры и сегменты из условия.
  • Решение без промежуточных шагов — только финальная цифра.
  • Нет выводов и рекомендаций по результату.
06 / хороший ответ

Каким должен быть сильный ответ

Хороший ответ — это не просто финальные числа или код. Работодатель должен увидеть, как вы думаете, как проверяете ограничения задачи и как оформляете результат.

  • короткое описание логики решения;
  • промежуточные таблицы, запросы и фильтры;
  • финальные значения по каждому пункту задания;
  • понятные выводы и рекомендации.
07 / похожие задания

Похожие задания

08 / разборы в telegram

Хочешь больше таких разборов?

В Telegram-канале разбираю тестовые с собеседований, метрики и типичные ошибки кандидатов.

Подписаться в Telegram →
09 / следующий шаг

Разбираешь тестовые, но не уверен в решении?

На интенсиве разбираем реальные кейсы, A/B-секции, метрики, SQL, Python и типовые ошибки кандидатов.