2024-10-14 22:56:34 +03:00
|
|
|
|
from app.utils.system import clear_console
|
|
|
|
|
from app.zadachi.zadacha1 import zadacha1
|
|
|
|
|
from app.zadachi.zadacha2 import zadacha2
|
2024-10-15 00:02:41 +03:00
|
|
|
|
from app.zadachi.zadacha3 import zadacha3
|
|
|
|
|
from app.zadachi.zadacha4 import zadacha4
|
2024-10-15 00:22:25 +03:00
|
|
|
|
from app.zadachi.zadacha5 import zadacha5
|
2024-10-14 22:56:34 +03:00
|
|
|
|
|
2024-10-14 23:04:09 +03:00
|
|
|
|
class menu:
|
2024-10-14 22:56:34 +03:00
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
pass # Конструктор пока пустой, при необходимости можно добавить параметры
|
|
|
|
|
|
2024-10-14 23:04:09 +03:00
|
|
|
|
def main_menu(self):
|
|
|
|
|
clear_console()
|
|
|
|
|
while True:
|
|
|
|
|
print('\nMain Menu:')
|
|
|
|
|
print('1. Задача 1')
|
|
|
|
|
print('2. Задача 2')
|
2024-10-15 00:02:41 +03:00
|
|
|
|
print('3. Задача 3')
|
|
|
|
|
print('4. Задача 4')
|
2024-10-15 00:22:25 +03:00
|
|
|
|
print('5. Задача 5')
|
2024-10-14 23:04:09 +03:00
|
|
|
|
print('0. Exit')
|
|
|
|
|
|
|
|
|
|
choice = input('Select an option: ')
|
|
|
|
|
|
|
|
|
|
clear_console()
|
|
|
|
|
if choice == '1':
|
|
|
|
|
self.zadacha1_menu() # Переход к подменю Задачи 1
|
|
|
|
|
elif choice == '2':
|
|
|
|
|
self.zadacha2_menu() # Переход к подменю Задачи 2
|
2024-10-15 00:02:41 +03:00
|
|
|
|
elif choice == '3':
|
|
|
|
|
self.zadacha3_menu() # Переход к подменю Задачи 3
|
|
|
|
|
elif choice == '4':
|
|
|
|
|
self.zadacha4_menu() # Добавлен вызов меню задачи 4
|
|
|
|
|
elif choice == '5':
|
2024-10-15 00:22:25 +03:00
|
|
|
|
self.zadacha5_menu() # Добавлен вызов меню задачи 5
|
2024-10-14 23:04:09 +03:00
|
|
|
|
elif choice == '0':
|
|
|
|
|
print('Exiting program...')
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
print('Invalid option')
|
|
|
|
|
|
|
|
|
|
def zadacha1_menu(self):
|
2024-10-14 22:56:34 +03:00
|
|
|
|
"""Меню для задачи 1 с подкатегориями."""
|
|
|
|
|
clear_console()
|
|
|
|
|
while True:
|
|
|
|
|
print('\nЗадача 1:')
|
2024-10-15 00:02:41 +03:00
|
|
|
|
print('1. Линейно сгенерировать массив Y, зависящий от x')
|
|
|
|
|
print('2. Квадратично сгенерировать массив Y, зависящий от x')
|
2024-10-14 22:56:34 +03:00
|
|
|
|
print('0. Назад')
|
|
|
|
|
|
|
|
|
|
choice = input('Выберите подкатегорию: ')
|
|
|
|
|
|
|
|
|
|
clear_console()
|
|
|
|
|
z1 = zadacha1() # создаем объект для задачи 1
|
|
|
|
|
|
|
|
|
|
if choice == '1':
|
|
|
|
|
z1.plot_lin_data() # Выполнить первую подзадачу
|
|
|
|
|
#return # Вернуться в основное меню после выполнения
|
|
|
|
|
elif choice == '2':
|
|
|
|
|
z1.plot_sqr_data() # Выполнить вторую подзадачу
|
|
|
|
|
#return # Вернуться в основное меню после выполнения
|
|
|
|
|
elif choice == '0':
|
|
|
|
|
break # Вернуться в основное меню
|
|
|
|
|
else:
|
|
|
|
|
print('Неверный выбор, попробуйте снова.')
|
|
|
|
|
|
2024-10-14 23:04:09 +03:00
|
|
|
|
def zadacha2_menu(self):
|
2024-10-14 22:56:34 +03:00
|
|
|
|
"""Меню для задачи 2 (расчет коэффициентов методом наименьших квадратов)."""
|
|
|
|
|
clear_console()
|
|
|
|
|
z1 = zadacha1() # Используем объект задачи 1 для генерации данных
|
|
|
|
|
z2 = zadacha2() # Создаем объект для задачи 2
|
|
|
|
|
|
|
|
|
|
while True:
|
|
|
|
|
print('\nЗадача 2:')
|
|
|
|
|
print('1. Рассчитать коэффициенты b0 и b1 для линейной модели')
|
|
|
|
|
print('2. Сделать прогноз по рассчитанным коэффициентам')
|
|
|
|
|
print('0. Назад')
|
|
|
|
|
|
|
|
|
|
choice = input('Выберите подкатегорию: ')
|
|
|
|
|
|
|
|
|
|
clear_console()
|
|
|
|
|
|
|
|
|
|
if choice == '1':
|
|
|
|
|
# Генерация линейных данных с помощью функции из задачи 1
|
|
|
|
|
x_data, y_data = z1.create_lin_array()
|
|
|
|
|
|
|
|
|
|
# Рассчет коэффициентов b0 и b1 методом наименьших квадратов
|
|
|
|
|
b0, b1 = z2.calculate_coefficients(x_data, y_data)
|
|
|
|
|
|
|
|
|
|
print(f'Рассчитанные коэффициенты:')
|
|
|
|
|
print(f'b0 (свободный член) = {b0}')
|
|
|
|
|
print(f'b1 (коэффициент наклона) = {b1}')
|
|
|
|
|
elif choice == '2':
|
|
|
|
|
# Пример предсказания на новых данных
|
|
|
|
|
x_data, y_data = z1.create_lin_array() # Сначала генерируем данные
|
|
|
|
|
b0, b1 = z2.calculate_coefficients(x_data, y_data) # Рассчитываем коэффициенты
|
|
|
|
|
|
|
|
|
|
# Выполняем прогноз
|
|
|
|
|
predicted_y = z2.predict(x_data, b0, b1)
|
|
|
|
|
|
|
|
|
|
print(f'Предсказанные значения Y на основе рассчитанных коэффициентов:')
|
|
|
|
|
print(predicted_y)
|
|
|
|
|
elif choice == '0':
|
|
|
|
|
break # Вернуться в основное меню
|
|
|
|
|
else:
|
|
|
|
|
print('Неверный выбор, попробуйте снова.')
|
2024-10-15 00:02:41 +03:00
|
|
|
|
|
|
|
|
|
def zadacha3_menu(self):
|
|
|
|
|
"""Меню для задачи 3 (построение графика регрессии и расчет метрик)."""
|
|
|
|
|
clear_console()
|
|
|
|
|
z1 = zadacha1() # Используем объект задачи 1 для генерации данных
|
|
|
|
|
z2 = zadacha2() # Используем объект задачи 2 для расчета коэффициентов
|
|
|
|
|
|
|
|
|
|
while True:
|
|
|
|
|
print('\nЗадача 3:')
|
|
|
|
|
print('1. Построить график регрессии и рассчитать метрики')
|
|
|
|
|
print('0. Назад')
|
|
|
|
|
|
|
|
|
|
choice = input('Выберите подкатегорию: ')
|
|
|
|
|
|
|
|
|
|
clear_console()
|
|
|
|
|
|
|
|
|
|
if choice == '1':
|
|
|
|
|
x_data, y_data = z1.create_lin_array()
|
|
|
|
|
b0, b1 = z2.calculate_coefficients(x_data, y_data)
|
|
|
|
|
|
|
|
|
|
# Создаем объект задачи 3 и выполняем построение графика
|
|
|
|
|
z3 = zadacha3(x_data, y_data, b0, b1)
|
|
|
|
|
z3.plot_regression()
|
|
|
|
|
elif choice == '0':
|
|
|
|
|
break # Вернуться в основное меню
|
|
|
|
|
else:
|
|
|
|
|
print('Неверный выбор, попробуйте снова.')
|
2024-10-15 00:22:25 +03:00
|
|
|
|
|
2024-10-15 00:02:41 +03:00
|
|
|
|
def zadacha4_menu(self):
|
2024-10-15 00:22:25 +03:00
|
|
|
|
"""Меню для задачи 4"""
|
2024-10-15 00:02:41 +03:00
|
|
|
|
clear_console()
|
2024-10-15 00:22:25 +03:00
|
|
|
|
#z4 = zadacha4() # Создаем объект задачи 4
|
2024-10-15 00:02:41 +03:00
|
|
|
|
|
|
|
|
|
while True:
|
|
|
|
|
print('\nЗадача 4:')
|
|
|
|
|
print('1. Провести визуальный анализ остатков')
|
|
|
|
|
print('0. Назад')
|
|
|
|
|
|
|
|
|
|
choice = input('Выберите подкатегорию: ')
|
|
|
|
|
|
|
|
|
|
clear_console()
|
|
|
|
|
|
|
|
|
|
if choice == '1':
|
|
|
|
|
z4 = zadacha4()
|
|
|
|
|
z4.analyze_residuals()
|
|
|
|
|
elif choice == '0':
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
print('Неверный выбор, попробуйте снова.')
|
2024-10-15 00:22:25 +03:00
|
|
|
|
|
|
|
|
|
def zadacha5_menu(self):
|
|
|
|
|
"""Меню для задачи 5"""
|
|
|
|
|
clear_console()
|
|
|
|
|
|
|
|
|
|
while True:
|
|
|
|
|
print('\nЗадача 5:')
|
|
|
|
|
print('1. Рассчитать статистики для определения выполнения условий применения линейной регрессии')
|
|
|
|
|
print('0. Назад')
|
|
|
|
|
|
|
|
|
|
choice = input('Выберите подкатегорию: ')
|
|
|
|
|
|
|
|
|
|
clear_console()
|
|
|
|
|
|
|
|
|
|
if choice == '1':
|
|
|
|
|
z5 = zadacha5()
|
|
|
|
|
z5.calculate_spearman_rank_test()
|
|
|
|
|
z5.calculate_gq_test()
|
|
|
|
|
elif choice == '0':
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
print('Неверный выбор, попробуйте снова.')
|