file = 'medicine.csv' cols = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] data = {i: [] for i in cols} #это создание словаря чтобы к каждой колонке были данные именно для этой колонки try: with open(file, 'r') as f:# открывает файл lines = f.readlines() for line in lines[1:]:#перебирает строки начиная со второй потому что в первой заголовки колонок values = line.strip().split(',') #создается список значений с отдельными элементами, убираются лишние пробелы for i in cols:#перебирает номера колонок из списка колонок try: data[i].append(float(values[i].strip()))#теперь значение в колонках это число float, оно добавляется в список для колонки с тем номеров в данные continue except ValueError: continue except FileNotFoundError: print(f"Файл {file} не найден.") exit()#если файл не найден, выводит сообщение и завершает for i in cols: nums = data[i] #в массиве nums теперь данные ( числа из колонки) для колонок if len(nums) == 0: print(f"Нет данных для колонки {i}. Пропуск.") continue avg = sum(nums) / len(nums) #считает среднее значение в колонке nums.sort() mediana = nums[len(nums) // 2] if len(nums) % 2 != 0 else (nums[len(nums) // 2 - 1] + nums[len(nums) // 2]) / 2 #cчитает медиану a = {}#создание словаря для подсчета частоты.это словарь, где ключи — числа из списка, а значения — их частота. for num in nums:# перебирает все элементы списка nums if num in a: a[num] += 1 #если число уже есть в словаре, то увеличивается его частота else: a[num] = 1 moda = max(a, key=a.get)# считает моду. словарь a хрнит частоту встречаемости чисел dispersia = sum((x - avg) ** 2 for x in nums) / len(nums)# считает дисперсию std = dispersia ** 0.5 #считает стандартное отклонение stats = { "мин": min(nums), "макс": max(nums), "среднее": avg, "медиана": mediana, "мода": moda, "дисперсия": dispersia, "стандартное отклонение": std } print(f"Статистика для колонки {i}:") for key, value in stats.items(): print(f" {key}: {value}")#вывод того что получилось