Статья Автор: Деникина Н.В., Деникин А.В.

5. Журнал Центра управления — тетрадь

Файлы: spacecraft.csv, telemetry_events.csv, incidents.csv приложены к заданию.

Время записано в ISO 8601 с часовым поясом UTC. Пустая строка, NULL и NaN считаются пропуском. Все идентификаторы трактуются как строки и сравниваются лексикографически, без числового преобразования.

Типы событий: packet_received, packet_lost, sensor_reading, mode_changed, service_message.

Схема таблиц

spacecraft.csv: spacecraft_id (первичный ключ), model, launch_date, mission_type, observation_start, observation_end.

telemetry_events.csv: event_id (первичный ключ), spacecraft_id, session_id, timestamp, channel, event_type, value, packet_number, old_mode, new_mode.

incidents.csv: incident_id (первичный ключ), spacecraft_id, opened_at, acknowledged_at, closed_at, severity (от 1 до 4), cause.

Внешние ключи заполнены и ссылаются на существующие аппараты. Поле value относится к sensor_reading, packet_number — к двум типам packet_*, а old_mode и new_mode — к mode_changed.


Сколько различных аппаратов встречается в telemetry_events.csv?

Ответ: одно целое число.


Для какого аппарата записано наибольшее число событий packet_lost? При равенстве выберите лексикографически наименьший spacecraft_id.

Ответ: идентификатор аппарата.


Найдите долю packet_lost среди всех событий типов packet_received и packet_lost. Ответ дайте в процентах.

Формат: число с шестью знаками после точки, округление ROUND_HALF_UP.


Для каждой пары (spacecraft_id, session_id) возьмите события packet_received с непустыми session_id и timestamp. Упорядочьте их по timestamp, затем по event_id. Объедините разности времени между соседними строками всех групп и найдите общую медиану в секундах. Нулевые интервалы сохраняются.

Формат: число с шестью знаками после точки.


Для каждой модели найдите 95-й процентиль времени от opened_at до acknowledged_at в минутах. Строки без одного из времён исключите. Используйте линейную интерполяцию, совпадающую с numpy.quantile(values, 0.95, method='linear').

Формат: пары без пробелов, модели по алфавиту: Model=0.000000;Model=0.000000.


Какой канал имеет наибольшую долю пропусков value среди событий sensor_reading? Учитывайте только каналы не менее чем с 10 000 такими событиями. При равенстве выберите лексикографически наименьшее имя.

Ответ: имя канала.


Сколько различных пар (spacecraft_id, session_id) содержат хотя бы один повтор packet_number среди обоих типов packet_*? Строки с пропущенным packet_number или session_id исключите.

Ответ: одно целое число.


Для каждого инцидента критичности 4 найдите последнее предшествующее событие mode_changed того же аппарата с непустыми timestamp, old_mode, new_mode и timestamp <= opened_at. При одинаковом времени берите лексикографически наибольший event_id. Какой переход встречается чаще всего? При равенстве частот выберите лексикографически наименьшую строку.

Формат: OLD_MODE->NEW_MODE.


Для каждого аппарата разделите период наблюдения на пересечение с первыми 30 сутками после запуска и оставшуюся часть. Учтите инциденты с opened_at в полуинтервале [observation_start, observation_end). После суммирования экспозиций и инцидентов по всем аппаратам найдите отношение частоты в первые 30 суток к частоте в оставшееся время.

Формат: число с шестью знаками после точки.


Для аппаратов с не менее чем 20 различными непустыми session_id среди всех событий, хотя бы одним событием packet_* и подтверждённым инцидентом вычислите:

  • x1 — число всех инцидентов критичности 3–4 на 100 сеансов;
  • x2 — доля packet_lost среди всех событий packet_*;
  • x3 — медиана времени от открытия до подтверждения инцидента в минутах.

Стандартизуйте каждый показатель по допустимым аппаратам как (x-mean)/std с ddof=0 и найдите R=0.5*z1+0.3*z2+0.2*z3.

Ответ: три spacecraft_id по убыванию R, через запятую без пробелов, например SC001,SC002,SC003; ничьи — по возрастанию идентификатора.

Печать