Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

67 строки
2.7 KiB
Python

# 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)}")