diff --git a/.DS_Store b/.DS_Store index a55fbe6..951aa9d 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/app/labs/lab1.py b/app/labs/lab1.py index e69de29..0df9c21 100644 --- a/app/labs/lab1.py +++ b/app/labs/lab1.py @@ -0,0 +1,33 @@ +import numpy as np + +class lab1: + + def __init__(self): + pass + + def main(self): + x11 = np.random.normal(2, 1, [10, 1]) + x21 = np.random.normal(6, 2, [10, 1]) + x11_od=x11.flatten() + x21_od=x21.flatten() + + mu_x11 = x11.mean() + sigma_x11 = x11.std() + + mu_x21 = x21.mean() + sigma_x21 = x21.std() + + print("Массив x11:") + print("Среднее значение:", mu_x11) + print("Среднеквадратическое отклонение:", sigma_x11) + + print("Массив x21:") + print("Среднее значение:", mu_x21) + print("Среднеквадратическое отклонение:", sigma_x21) + + corr_coeff=np.corrcoef(x11_od,x21_od)[0,1] + print("Коэффициент корреляции между x11 и x21:", corr_coeff) + +if __name__ == "__main__": + l1 = lab1() + l1.main() diff --git a/app/labs/lab2.py b/app/labs/lab2.py index e69de29..782977d 100644 --- a/app/labs/lab2.py +++ b/app/labs/lab2.py @@ -0,0 +1,40 @@ +import numpy as np +import matplotlib.pyplot as plt + +class lab2: + + def __init__(self): + pass + + def main(self): + # Данные для графика + x11 = np.random.normal(2, 1, [10, 1]) + x21 = np.random.normal(6, 2, [10, 1]) + print(x11,x21) + + # Рисуем график + plt.scatter(x11, x21) + plt.xlabel("x") + plt.ylabel("y") + plt.title("Диаграмма рассеяния") + plt.show() + + hist_data = np.vstack((x11, x21)) + print ("Данные для гистограммы:", hist_data ) + plt.hist(hist_data) + plt.xlabel('Значение признака') + plt.ylabel('Частота появления значения признака') + plt.title('Гистограмма') + plt.show() + + # Коробочковая диаграмма + plt.boxplot((x11.ravel(), x21.ravel()), notch=True) + print("Данные для коробочковой диаграммы",x11.ravel(), x21.ravel()) + plt.xlabel('№ объекта') + plt.ylabel('Значение признака') + plt.title('Ящик с усами') + plt.show() + +if __name__ == "__main__": + l2 = lab2() + l2.main() diff --git a/app/labs/lab3.py b/app/labs/lab3.py index e69de29..fc09aba 100644 --- a/app/labs/lab3.py +++ b/app/labs/lab3.py @@ -0,0 +1,92 @@ +from sklearn.datasets import load_iris +import numpy as np +import matplotlib.pyplot as plt + +class lab3: + + def __init__(self): + pass + + def main(self): + data = load_iris() + X = data.data + print('Все данные', data.data) + Y = data.target + print(data.target) + Y_str = data.target_names + print(Y_str) + + setosa_inds = Y == np.where(Y_str == 'setosa') + setosa_data = X[np.ravel(setosa_inds), :] + print('Индексы setosa', setosa_inds) + print('Признаки setosa:', setosa_data) + + versicolor_inds = Y == np.where(Y_str == 'versicolor') + versicolor_data = X[np.ravel(versicolor_inds), :] + virginica_inds = Y == np.where(Y_str == 'virginica') + virginica_data = X[np.ravel(virginica_inds), :] + + plt.scatter(setosa_data[:, 0], setosa_data[:, 1]) + plt.title('Скаттерограмма setosa по признакам 1 и 2') + plt.xlabel('Длина чашелистика') + plt.ylabel('Ширина чашелистика') + plt.show() + + plt.scatter(versicolor_data[:, 0], versicolor_data[:, 1]) + plt.title('Скаттерограмма versicolor по признакам 1 и 2') + plt.xlabel('Длина чашелистика') + plt.ylabel('Ширина чашелистика') + plt.show() + + plt.scatter(virginica_data[:, 0], virginica_data[:, 1]) + plt.title('Скаттерограмма virginica по признакам 1 и 2') + plt.xlabel('Длина чашелистика') + plt.ylabel('Ширина чашелистика') + plt.show() + + # расчет статистических характеристик коэф. корреляции для признаков + setosa_sl_mean = np.mean(setosa_data[:, 0]) + setosa_sl_std = np.std(setosa_data[:, 0]) + setosa_sw_mean = np.mean(setosa_data[:, 1]) + setosa_sw_std = np.std(setosa_data[:, 1]) + setosa_cor = np.corrcoef(setosa_data[:, 0], setosa_data[:, 1])[0, 1] + + versicolor_sl_mean = np.mean(versicolor_data[:, 0]) + versicolor_sl_std = np.std(versicolor_data[:, 0]) + versicolor_sw_mean = np.mean(versicolor_data[:, 1]) + versicolor_sw_std = np.std(versicolor_data[:, 1]) + versicolor_cor = np.corrcoef(versicolor_data[:, 0], versicolor_data[:, 1])[0, 1] + + virginica_sl_mean = np.mean(virginica_data[:, 0]) + virginica_sl_std = np.std(virginica_data[:, 0]) + virginica_sw_mean = np.mean(virginica_data[:, 1]) + virginica_sw_std = np.std(virginica_data[:, 1]) + virginica_cor = np.corrcoef(virginica_data[:, 0], virginica_data[:, 1])[0, 1] + + print('Setosa: Среднее значение длины чашелистика:', setosa_sl_mean, 'СКО длины чашелистика:', setosa_sl_std, 'Среднее значение ширины чашелистика:', setosa_sw_mean, 'СКО ширины чашелистика:', setosa_sw_std) + print('Коэффициент корреляции:', setosa_cor) + print('Versicolor: Среднее значение длины чашелистика:', versicolor_sl_mean, 'СКО длины чашелистика:', versicolor_sl_std, 'Среднее значение ширины чашелистика:', versicolor_sw_mean, 'СКО ширины чашелистика:', versicolor_sw_std) + print('Коэффициент корреляции:', versicolor_cor) + print('Virginica: Среднее значение длины чашелистика:', virginica_sl_mean, 'СКО длины чашелистика:', virginica_sl_std, 'Среднее значение ширины чашелистика:', virginica_sw_mean, 'СКО ширины чашелистика:', virginica_sw_std) + print('Коэффициент корреляции:', virginica_cor) + + # построение гистограммы и коробочковой диаграммы для setosa по признакам 1 и 2 + hist_data = np.vstack((setosa_data[:, 0], setosa_data[:, 1])) + plt.hist(hist_data.T, label=['Длина чашелистика', 'Ширина чашелистика']) + + # Настройка графика + plt.title('Гистограмма setosa по признакам 1 и 2') + plt.xlabel('Значение') + plt.ylabel('Частота') + plt.legend() + + plt.show() + + plt.boxplot((setosa_data[:, 0].ravel(), setosa_data[:, 1].ravel()), notch=False, labels=['Длина чашелистика', 'Ширина чашелистика']) + plt.title('Коробочковая диаграмма setosa по признакам 1 и 2') + plt.ylabel('Значение') + plt.show() + +if __name__ == "__main__": + l3 = lab3() + l3.main() diff --git a/app/labs/lab6.py b/app/labs/lab6.py new file mode 100644 index 0000000..e69de29 diff --git a/app/labs/lab7.py b/app/labs/lab7.py new file mode 100644 index 0000000..e69de29 diff --git a/app/labs/labTest.py b/app/labs/labTest.py index bb5e11c..36f91f4 100644 --- a/app/labs/labTest.py +++ b/app/labs/labTest.py @@ -55,5 +55,5 @@ class labTest: print("Ошибка ввода: необходимо ввести целые числа для a, b и c.") if __name__ == "__main__": - lab_test = labTest() - lab_test.start() + lT = labTest() + lT.start() diff --git a/app/menu_load.py b/app/menu_load.py index 45ef70d..13638de 100644 --- a/app/menu_load.py +++ b/app/menu_load.py @@ -1,12 +1,12 @@ from app.utils.system import clear_console -# from app.zadachi.lab1 import lab1 -# from app.zadachi.lab2 import lab2 -# from app.zadachi.lab3 import lab3 -# from app.zadachi.lab4 import lab4 -# from app.zadachi.lab5 import lab5 -# from app.zadachi.lab6 import lab6 -# from app.zadachi.lab7 import lab7 +from app.labs.lab1 import lab1 +# from app.labs.lab2 import lab2 +from app.labs.lab3 import lab3 +# from app.labs.lab4 import lab4 +# from app.labs.lab5 import lab5 +# from app.labs.lab6 import lab6 +# from app.labs.lab7 import lab7 from app.labs.labTest import labTest class menu: @@ -18,9 +18,9 @@ class menu: clear_console() while True: print('\nMain Menu:') - print('1. Задача 1 (Не работает)') + print('1. Задача 1') print('2. Задача 2 (Не работает)') - print('3. Задача 3 (Не работает)') + print('3. Задача 3') print('4. Задача 4 (Не работает)') print('5. Задача 5 (Не работает)') print('6. Задача 6 (Не работает)') @@ -32,11 +32,11 @@ class menu: clear_console() if choice == '1': - pass + self.lab1_menu() # elif choice == '2': # self.lab2_menu() # Переход к подменю Задачи 2 - # elif choice == '3': - # self.lab3_menu() # Переход к подменю Задачи 3 + elif choice == '3': + self.lab3_menu() # elif choice == '4': # self.lab4_menu() # Добавлен вызов меню задачи 4 elif choice == '8': @@ -47,15 +47,56 @@ class menu: else: print('Invalid option') + def lab1_menu(self): + """Меню для lab 1 с подкатегориями.""" + clear_console() + while True: + print('\nЛаб 1:') + print('1. Генерация одномерных данных. Статистические характеристики') + print('0. Назад') + choice = input('Выберите подкатегорию: ') + + clear_console() + l1 = lab1() # создаем объект для задачи 1 + + if choice == '1': + l1.main() # Выполнить первую подзадачу + elif choice == '0': + break # Вернуться в основное меню + else: + print('Неверный выбор, попробуйте снова.') + + def lab2_menu(self): + pass + + def lab3_menu(self): + """Меню для lab 3 с подкатегориями.""" + clear_console() + while True: + print('\nЛаб 3:') + print('1. Набор данных «Ирисы Фишера»»') + print('0. Назад') + + choice = input('Выберите подкатегорию: ') + + clear_console() + l3 = lab3() # создаем объект для задачи 1 + + if choice == '1': + l3.main() # Выполнить первую подзадачу + elif choice == '0': + break # Вернуться в основное меню + else: + print('Неверный выбор, попробуйте снова.') def labTest_menu(self): - """Меню для задачи Тест""" + """Меню для lab Тест""" clear_console() lT = labTest() while True: - print('\nЗадача Тест:') + print('\nЛаб Тест:') print('1. Рассчитать значение дискриминанта и по результату выдать в консоль сообщение, сколько вещественных корней имеет уравнение.') print('0. Назад') diff --git a/requirements.txt b/requirements.txt index 49ef8f1..dc05f4e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ -numpy==2.1.2 -matplotlib==3.9.2 +numpy==1.24.4 +matplotlib==3.7.5 +scikit-learn==1.3.2