Прогноз срока выдачи книги методом k ближайших

тема: Расстояния и kNN · уровень: средний

Условие

В файле data.csv хранится каталог библиотечных выдач. Для каждой книги указаны число страниц, год издания и средний фактический срок выдачи в днях.

Требуется предсказать средний срок выдачи книги с заданным числом страниц и годом издания методом k ближайших соседей. Строки с пропуском хотя бы в одном из трёх числовых столбцов не участвуют в расчёте.

Для каждой подходящей строки вычисляется евклидово расстояние между книгой из запроса с параметрами (p, y) и строкой каталога с параметрами (pages, publication_year):

d = sqrt((pages - p)^2 + (publication_year - y)^2).

Из подходящих строк выбираются k строк с наименьшими расстояниями. Прогноз равен обычному среднему значений avg_issue_days у выбранных строк. При равенстве расстояний раньше выбирается строка, расположенная раньше в файле data.csv. Гарантируется, что в файле имеется не менее k строк без пропусков в числовых столбцах.

Формат ввода

В первой и единственной строке stdin записаны три целых числа p y k через пробел:

Рядом с программой находится файл data.csv в кодировке UTF-8. Разделитель в файле — запятая, первая строка содержит заголовки. Файл содержит столбцы catalog_id, pages, publication_year, avg_issue_days. В числовых столбцах могут встречаться пустые значения.

Формат вывода

Выведите прогнозируемый средний срок выдачи в днях с двумя знаками после точки.

Ограничения

В файле от 300 до 2000 строк с данными, не считая заголовка.

40 <= p <= 1200.

1900 <= y <= 2025.

1 <= k <= 100.

В столбце catalog_id находится строка длиной 6 символов вида B и пяти цифр.

Непустое значение pages является целым числом от 40 до 1200.

Непустое значение publication_year является целым числом от 1900 до 2025.

Непустое значение avg_issue_days является вещественным числом от 1.0 до 60.0.

Гарантируется, что число строк без пропусков во всех трёх числовых столбцах не меньше k.

Решить задачу с автопроверкой на Python →

Куда дальше