# module2.py - Модуль для расчёта коэффициента корреляции import math def calculate_correlation(list1, list2): """ Вычисляет коэффициент корреляции Пирсона между двумя списками. Аргументы: list1 (list): первый список чисел list2 (list): второй список чисел Возвращает: float: коэффициент корреляции или None при ошибке """ # Проверяем, что списки не пустые if not list1 or not list2: print("Ошибка: один из списков пустой") return None # Берем минимальную длину из двух списков n = min(len(list1), len(list2)) if n < 2: print("Ошибка: для расчёта корреляции нужно хотя бы 2 элемента") return None # Берем только первые n элементов из каждого списка x = list1[:n] y = list2[:n] # Выводим информацию о количестве используемых элементов if len(list1) != len(list2): print(f"Внимание: списки разной длины. Используются первые {n} элементов") # Вычисляем суммы sum_x = sum(x) sum_y = sum(y) sum_xy = sum(x[i] * y[i] for i in range(n)) sum_x2 = sum(x[i] * x[i] for i in range(n)) sum_y2 = sum(y[i] * y[i] for i in range(n)) # Вычисляем коэффициент корреляции numerator = n * sum_xy - sum_x * sum_y denominator = math.sqrt((n * sum_x2 - sum_x * sum_x) * (n * sum_y2 - sum_y * sum_y)) if denominator == 0: print("Ошибка: знаменатель равен нулю (нет вариации данных)") return None correlation = numerator / denominator return correlation # Тестирование модуля (если запускается напрямую) if __name__ == "__main__": # Тестовые данные test_list1 = [1, 2, 3, 4, 5] test_list2 = [2, 4, 6, 8, 10] # Положительная корреляция # test_list2 = [5, 4, 3, 2, 1] # Отрицательная корреляция result = calculate_correlation(test_list1, test_list2) if result is not None: print(f"Коэффициент корреляции: {result:.4f}") print(f"Коэффициент корреляции (округленный): {round(result, 3)}")