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)