ответвлено от main/python-labs
Незначительные изменения
Этот коммит содержится в:
46
TEMA8/Control/m1.py
Обычный файл
46
TEMA8/Control/m1.py
Обычный файл
@@ -0,0 +1,46 @@
|
||||
# module1.py - Модуль для чтения числового списка из файла
|
||||
|
||||
def read_numbers_from_file(filename):
|
||||
"""
|
||||
Считывает числовой список из текстового файла.
|
||||
|
||||
Аргументы:
|
||||
filename (str): имя файла для чтения
|
||||
|
||||
Возвращает:
|
||||
list: список чисел (float)
|
||||
"""
|
||||
numbers = []
|
||||
|
||||
try:
|
||||
with open(filename, 'r', encoding='utf-8') as file:
|
||||
for line in file:
|
||||
# Разделяем строку на элементы по пробелам
|
||||
elements = line.strip().split()
|
||||
|
||||
# Преобразуем каждый элемент в число и добавляем в список
|
||||
for element in elements:
|
||||
try:
|
||||
number = float(element)
|
||||
numbers.append(number)
|
||||
except ValueError:
|
||||
print(f"Внимание: элемент '{element}' в файле '{filename}' не является числом и будет пропущен")
|
||||
|
||||
except FileNotFoundError:
|
||||
print(f"Ошибка: файл '{filename}' не найден")
|
||||
return []
|
||||
except IOError:
|
||||
print(f"Ошибка ввода-вывода при чтении файла '{filename}'")
|
||||
return []
|
||||
|
||||
print(f"Прочитано {len(numbers)} чисел из файла '{filename}'")
|
||||
return numbers
|
||||
|
||||
|
||||
# Тестирование модуля (если запускается напрямую)
|
||||
if __name__ == "__main__":
|
||||
# Тестовая проверка
|
||||
test_filename = input("Введите имя файла для теста: ")
|
||||
result = read_numbers_from_file(test_filename)
|
||||
print(f"Результат: {result}")
|
||||
print(f"Количество элементов: {len(result)}")
|
||||
66
TEMA8/Control/m2.py
Обычный файл
66
TEMA8/Control/m2.py
Обычный файл
@@ -0,0 +1,66 @@
|
||||
# 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)}")
|
||||
71
TEMA8/Control/m3.py
Обычный файл
71
TEMA8/Control/m3.py
Обычный файл
@@ -0,0 +1,71 @@
|
||||
# module3.py - Главный модуль программы
|
||||
|
||||
import module1
|
||||
import module2
|
||||
|
||||
def main():
|
||||
print("=" * 60)
|
||||
print("ПРОГРАММА ДЛЯ РАСЧЕТА КОЭФФИЦИЕНТА КОРРЕЛЯЦИИ")
|
||||
print("=" * 60)
|
||||
|
||||
# Запрашиваем имена файлов
|
||||
filename1 = input("Введите имя первого файла с данными: ")
|
||||
filename2 = input("Введите имя второго файла с данными: ")
|
||||
|
||||
print("-" * 60)
|
||||
|
||||
# Чтение данных из файлов
|
||||
print("Чтение данных из файлов...")
|
||||
list1 = module1.read_numbers_from_file(filename1)
|
||||
list2 = module1.read_numbers_from_file(filename2)
|
||||
|
||||
if not list1 or not list2:
|
||||
print("Ошибка: не удалось прочитать данные из одного из файлов")
|
||||
return
|
||||
|
||||
print("-" * 60)
|
||||
print(f"Первый список: {len(list1)} элементов")
|
||||
print(f"Пример первых 5 элементов: {list1[:5]}")
|
||||
print()
|
||||
print(f"Второй список: {len(list2)} элементов")
|
||||
print(f"Пример первых 5 элементов: {list2[:5]}")
|
||||
print("-" * 60)
|
||||
|
||||
# Расчет коэффициента корреляции
|
||||
print("Расчет коэффициента корреляции...")
|
||||
correlation = module2.calculate_correlation(list1, list2)
|
||||
|
||||
print("-" * 60)
|
||||
if correlation is not None:
|
||||
print(f"Коэффициент корреляции: {correlation:.6f}")
|
||||
print(f"Коэффициент корреляции (округленный до 3 знаков): {round(correlation, 3)}")
|
||||
|
||||
# Интерпретация результата
|
||||
print("\nИнтерпретация:")
|
||||
abs_corr = abs(correlation)
|
||||
if abs_corr < 0.3:
|
||||
print(" Очень слабая корреляция")
|
||||
elif abs_corr < 0.5:
|
||||
print(" Слабая корреляция")
|
||||
elif abs_corr < 0.7:
|
||||
print(" Умеренная корреляция")
|
||||
elif abs_corr < 0.9:
|
||||
print(" Сильная корреляция")
|
||||
else:
|
||||
print(" Очень сильная корреляция")
|
||||
|
||||
if correlation > 0:
|
||||
print(" Корреляция положительная")
|
||||
elif correlation < 0:
|
||||
print(" Корреляция отрицательная")
|
||||
else:
|
||||
print(" Корреляция отсутствует")
|
||||
else:
|
||||
print("Не удалось рассчитать коэффициент корреляции")
|
||||
|
||||
print("=" * 60)
|
||||
|
||||
|
||||
# Запуск программы
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Ссылка в новой задаче
Block a user