Ранговая связь продаж мороженого

тема: Описательная статистика · уровень: продвинутый

Условие

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

В первой таблице для каждого дня указана выручка в рублях, во второй — число проданных порций. Дни сопоставляются по идентификатору дня. Необходимо вычислить коэффициент ранговой корреляции Спирмена между этими двумя величинами.

Ранг значения равен его позиции после сортировки по возрастанию, начиная с 1. Для каждого дня вычисляется разность рангов d_i. При n >= 2 коэффициент Спирмена определяется формулой rho = 1 - 6 * sum(d_i^2) / (n * (n^2 - 1)). Если n = 1, по соглашению в этой задаче коэффициент считается равным 0.

В каждой из двух таблиц все числовые значения различны, поэтому одинаковых рангов не возникает. Идентификаторы дней в каждой таблице также различны, а набор идентификаторов в обеих таблицах совпадает.

Формат ввода

В первой строке дано целое число n — количество дней.

Следующие n строк содержат первую таблицу: идентификатор дня и выручку этого дня в рублях.

Следующие n строк содержат вторую таблицу: идентификатор дня и число проданных в этот день порций мороженого.

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

Выведите одно число — коэффициент ранговой корреляции Спирмена.

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

Ограничения

1 <= n <= 4000.

Идентификатор дня состоит из строчных латинских букв, цифр и символа подчёркивания, его длина составляет от 1 до 20 символов.

Выручка и число проданных порций — целые числа от 0 до 1 000 000 000.

Внутри каждой таблицы числовые значения не повторяются. Пустых строк и пропущенных значений во входных данных нет.

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

Куда дальше