diff --git a/TEMA9/zadanie1.md b/TEMA9/zadanie1.md new file mode 100644 index 0000000..e94538f --- /dev/null +++ b/TEMA9/zadanie1.md @@ -0,0 +1,154 @@ +M3_1 +1)Создайте модуль М1, содержащий две функции: + +функция 1: аргумент - список или кортеж с выборкой; функция должна произвести расчет по выборке оценки её дисперсии DX, а также наименьшего и наибольшего значений и вернуть эти значения в вызывающую программу в виде списка; + +функция 2: аргументы - два списка или кортежа с выборками X и Y; функция должна произвести с помощью функции 1 расчет статистик по выборкам и рассчитать статистику Фишера: + + F=DX/DY + +2)Создайте еще один модуль М2, в котором должны выполняться следующие операции: + +запрашивается имя бинарного файла с выборками X и Y, проверяется его наличие и при отсутствии - повторяется запрос; + +выборки считываются из файлов; + +с помощью функции 1 по выборкам рассчитываются их статистики, + +с помощью функции 2 рассчитывается значение статистики Фишера, + +если числа элементов в выборках одинаково, графически отображается поле рассеивания для Х и Y; + +результаты расчета с соответствующими заголовками выводятся в текстовый файл. + +3)Создайте модуль М0 - главную программу, которая вызывает М2 и отображает результаты расчета на экране. + +4)Создайте 2 бинарных файла: с выборками одинакового размера и с выборками разного размера. Проверьте программу с использованием этих файлов. + +Модуль 1 +```py +import math +def disp(s): # функция рассчета дисперсии + if len(s) == 0: + return [0, 0, 0] + sr = sum(s) / len(s) + v = sum((x - sr) ** 2 for x in s) / len(s) # среднее квадратов отклонений от среднего + m_n = min(s) + m_x = max(s) + + return [v, m_n, m_x] + +def fisher_stat(sample_x, sample_y): # статистика фишера + stats_x = disp(sample_x) + stats_y = disp(sample_y) + + dx = stats_x[0] # дисп х + dy = stats_y[0] # дисп у + + if dy == 0: + return 0, stats_x, stats_y + else: + f = dx / dy + return f, stats_x, stats_y +``` +Модуль 2 +```py +import pickle +import matplotlib.pyplot as plt +import M1 + +def load_samples(filename): #Загружаем выборки х и у + + while True: + try: + with open(filename, 'rb') as f: + data = pickle.load(f) + x = data['X'] + y = data['Y'] + print(f"Файл {filename} успешно загружен!") + return x, y + except FileNotFoundError: + print(f"Файл {filename} не найден!") + filename = input("Введите имя файла снова: ") + except Exception as e: + print(f"Ошибка чтения файла: {e}") + filename = input("Введите имя файла снова: ") + +def analysis(): + x, y = load_samples(input("Введите имя бинарного файла: ")) + f, stats_x, stats_y = M1.fisher_stat(x, y) + + print("\nРЕЗУЛЬТАТЫ РАСЧЕТА:") + print(f"Размер выборки X: {len(x)}, Y: {len(y)}") + print(f"X: Дисперсия={stats_x[0]:.4f}, мин={stats_x[1]:.4f}, макс={stats_x[2]:.4f}") + print(f"Y: Дисперсия={stats_y[0]:.4f}, мин={stats_y[1]:.4f}, макс={stats_y[2]:.4f}") + print(f"Статистика Фишера F = {f:.4f}") + + + if len(x) == len(y): # График размеры одинаковые + plt.figure(figsize=(8, 6)) + plt.scatter(x, y, alpha=0.7, color='blue') + plt.xlabel('X') + plt.ylabel('Y') + plt.title('Поле рассеивания X-Y') + plt.grid(True) + plt.show() + + # Сохраняем в текстовый файл + with open('results.txt', 'w') as f: # Сохраняем в файл + f.write("РЕЗУЛЬТАТЫ СТАТИСТИЧЕСКОГО АНАЛИЗА\n") + f.write("=" * 40 + "\n\n") + f.write(f"Размер выборки X: {len(x)}\n") + f.write(f"Размер выборки Y: {len(y)}\n\n") + f.write(f"СТАТИСТИКИ ПО X:\n") + f.write(f" Дисперсия DX = {stats_x[0]:.6f}\n") + f.write(f" Минимум = {stats_x[1]:.6f}\n") + f.write(f" Максимум = {stats_x[2]:.6f}\n\n") + f.write(f"СТАТИСТИКИ ПО Y:\n") + f.write(f" Дисперсия DY = {stats_y[0]:.6f}\n") + f.write(f" Минимум = {stats_y[1]:.6f}\n") + f.write(f" Максимум = {stats_y[2]:.6f}\n\n") + f.write(f"СТАТИСТИКА ФИШЕРА:\n") + f.write(f" F = DX/DY = {f:.6f}\n") + + print("Результаты сохранены в файл results.txt") + return f, stats_x, stats_y + + + +if __name__ == "__main__": + analysis() +``` +Модуль 0 +```py +import M2 + +def main(): + + print("СТАТИСТИЧЕСКИЙ АНАЛИЗ") + results = M2.analysis() # Запускаем анализ + print("АНАЛИЗ ЗАВЕРШЕН!") + + +if __name__ == "__main__": + main() +``` + +```py +>>> import os +>>> os.chdir('C:\\Users\\Admin\\Documents\\Tsvetkova\\python-labs\\TEMA9') +>>> import M1 +>>> import M2 +>>> import M0 +>>> M0.main() +СТАТИСТИЧЕСКИЙ АНАЛИЗ +Введите имя бинарного файла: same_size.bin +Файл same_size.bin успешно загружен! + +РЕЗУЛЬТАТЫ РАСЧЕТА: +Размер выборки X: 20, Y: 20 +X: Дисперсия=4.7969, мин=1.4282, макс=9.9043 +Y: Дисперсия=3.2402, мин=2.1279, макс=7.5406 +Статистика Фишера F = 1.4804 +``` +![](Figure_1.png) \ No newline at end of file