Условие
Есть «сырые» данные о покупках авиабилетов (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-массив объектов.