Собесов

Aviasales Aviastats — ETL: разворот flights_info в строки

PythonETL и подготовка данныхСредняяMiddle

Условие

Есть «сырые» данные о покупках авиабилетов (data.csv). Поля:

  • booking_id — ID бронирования.
  • booking_month — месяц покупки билета.
  • passengers — количество пассажиров в бронировании.
  • price — полная стоимость билета (на всё бронирование, не на одного пассажира).
  • flights_info — список рейсов внутри билета (JSON-строка). Считаем, что это все рейсы без обратного билета, но по пути могут быть пересадки. Пример:
[
  {"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}-{change_1}-...-{finish} (для примера выше SVO-MCT-HKT).
  • flights_count — число рейсов в маршруте (1 если прямой).
  • flight_id — ID конкретного рейса (md5 от booking_id + индекса рейса).
  • flight_index — номер рейса в маршруте, начиная с 0.
  • origin, destination — коды аэропортов.
  • airline — код авиакомпании.
  • baggage — тариф с багажом или без.
  • passengers, price — продублированы из бронирования.

Можно добавить дополнительные столбцы, если они улучшают данные.

Структура данных

data.csv, ~10–100k строк, формат CSV. В колонке flights_info лежит JSON-массив объектов.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти