форкнуто от main/python-labs
main
Родитель
9d685a2ec0
Сommit
7df5fb8d16
|
После Ширина: | Высота: | Размер: 15 KiB |
@ -0,0 +1,43 @@
|
||||
import M2
|
||||
|
||||
def main():
|
||||
"Главная программа"
|
||||
print("=" * 40)
|
||||
print("АНАЛИЗ ВЫБОРКИ")
|
||||
print("=" * 40)
|
||||
|
||||
r = M2.main()
|
||||
|
||||
if r:
|
||||
d, mx, v, sx, med, ma = r
|
||||
|
||||
print("\n" + "-" * 40)
|
||||
print("РЕЗУЛЬТАТЫ:")
|
||||
print(f"n = {len(d)}")
|
||||
print(f"min = {min(d):.4f}")
|
||||
print(f"max = {max(d):.4f}")
|
||||
print(f"mx = {mx:.4f}")
|
||||
print(f"v = {v:.4f}")
|
||||
print(f"sx = {sx:.4f}")
|
||||
print(f"med = {med:.4f}")
|
||||
print(f"ma = {ma:.4f}")
|
||||
|
||||
if abs(ma) < 0.5:
|
||||
t = "~симм"
|
||||
elif ma > 0:
|
||||
t = "вправо"
|
||||
else:
|
||||
t = "влево"
|
||||
|
||||
print(f"тип: {t}")
|
||||
|
||||
if mx != 0:
|
||||
cv = sx / mx * 100
|
||||
print(f"CV = {cv:.1f}%")
|
||||
|
||||
print("\n" + "=" * 40)
|
||||
print("КОНЕЦ")
|
||||
print("=" * 40)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,37 @@
|
||||
|
||||
import math as m
|
||||
|
||||
def f1(d):
|
||||
"Функция 1: среднее, дисперсия, откл, медиана"
|
||||
if not d:
|
||||
return 0, 0, 0, 0
|
||||
|
||||
n = len(d)
|
||||
mx = sum(d) / n
|
||||
|
||||
v = sum((x - mx) ** 2 for x in d) / (n - 1) if n > 1 else 0
|
||||
sx = m.sqrt(v) if v > 0 else 0
|
||||
|
||||
sd = sorted(d)
|
||||
if n % 2 == 1:
|
||||
med = sd[n // 2]
|
||||
else:
|
||||
med = (sd[n // 2 - 1] + sd[n // 2]) / 2
|
||||
|
||||
return mx, v, sx, med
|
||||
|
||||
def f2(d):
|
||||
"""Функция 2: коэффициент асимметрии"""
|
||||
if not d:
|
||||
return 0
|
||||
|
||||
mx, _, sx, _ = f1(d)
|
||||
|
||||
if sx == 0:
|
||||
return 0
|
||||
|
||||
n = len(d)
|
||||
sc = sum((x - mx) ** 3 for x in d)
|
||||
ma = sc / ((n - 1) * (sx ** 3)) if n > 1 else 0
|
||||
|
||||
return ma
|
||||
@ -0,0 +1,107 @@
|
||||
import os
|
||||
import struct
|
||||
import math
|
||||
import matplotlib.pyplot as plt
|
||||
import M1
|
||||
|
||||
|
||||
def read_file():
|
||||
"Чтение файла с выборкой"
|
||||
while True:
|
||||
filename = input("Введите имя файла: ").strip()
|
||||
if not filename.endswith('.txt'):
|
||||
filename += '.txt'
|
||||
|
||||
if os.path.exists(filename):
|
||||
try:
|
||||
with open(filename, 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
numbers = []
|
||||
for part in content.split():
|
||||
cleaned = part.strip(',;:')
|
||||
try:
|
||||
numbers.append(float(cleaned))
|
||||
except ValueError:
|
||||
continue
|
||||
|
||||
if numbers:
|
||||
print(f"Прочитано {len(numbers)} чисел из файла {filename}")
|
||||
return numbers
|
||||
else:
|
||||
print("Файл не содержит чисел")
|
||||
except Exception as e:
|
||||
print(f"Ошибка при чтении файла: {e}")
|
||||
else:
|
||||
print(f"Файл {filename} не найден")
|
||||
|
||||
|
||||
def create_histogram(data):
|
||||
"Создание и отображение гистограммы"
|
||||
if not data:
|
||||
return
|
||||
|
||||
# Определяем количество интервалов
|
||||
num_bins = min(15, int(math.sqrt(len(data))))
|
||||
|
||||
plt.figure(figsize=(10, 6))
|
||||
plt.hist(data, bins=num_bins, edgecolor='black', alpha=0.7)
|
||||
plt.title('Гистограмма выборки')
|
||||
plt.xlabel('Значения')
|
||||
plt.ylabel('Частота')
|
||||
plt.grid(True, alpha=0.3)
|
||||
|
||||
|
||||
plt.savefig('histogram.png')
|
||||
print("Гистограмма сохранена")
|
||||
|
||||
|
||||
plt.show()
|
||||
|
||||
|
||||
def save_to_binary(stats, asymmetry):
|
||||
"Сохранение результатов в бинарный файл"
|
||||
try:
|
||||
with open('Res3737.bin', 'wb') as file:
|
||||
# Записываем все 5 значений
|
||||
for value in [stats[0], stats[1], stats[2], stats[3], asymmetry]:
|
||||
file.write(struct.pack('d', value))
|
||||
print("Результаты сохранены в файл 'Res3737.bin'")
|
||||
except Exception as e:
|
||||
print(f"Ошибка при сохранении в файл: {e}")
|
||||
|
||||
|
||||
def main():
|
||||
"Основная функция модуля M2"
|
||||
|
||||
sample = read_file()
|
||||
if not sample:
|
||||
print("Не удалось получить выборку. Программа завершена.")
|
||||
return
|
||||
|
||||
print(f"\nХарактеристики выборки:")
|
||||
print(f"Размер выборки: {len(sample)}")
|
||||
print(f"Минимальное значение: {min(sample):.4f}")
|
||||
print(f"Максимальное значение: {max(sample):.4f}")
|
||||
|
||||
# Расчет статистик
|
||||
mean, variance, std_dev, median = M1.f1(sample)
|
||||
asymmetry_coeff = M1.f2(sample)
|
||||
|
||||
print(f"\nРезультаты расчетов:")
|
||||
print(f"Математическое ожидание: {mean:.4f}")
|
||||
print(f"Дисперсия: {variance:.4f}")
|
||||
print(f"Стандартное отклонение: {std_dev:.4f}")
|
||||
print(f"Медиана: {median:.4f}")
|
||||
print(f"Коэффициент асимметрии: {asymmetry_coeff:.4f}")
|
||||
|
||||
|
||||
create_histogram(sample)
|
||||
|
||||
|
||||
save_to_binary((mean, variance, std_dev, median), asymmetry_coeff)
|
||||
|
||||
return sample, mean, variance, std_dev, median, asymmetry_coeff
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Двоичный файл не отображается.
|
После Ширина: | Высота: | Размер: 15 KiB |
@ -0,0 +1,300 @@
|
||||
# Тест по модулю 3
|
||||
|
||||
Сарайкина Вера, А-02-23
|
||||
|
||||
## Задание
|
||||
|
||||
M3_24
|
||||
1) Создайте модуль М1, содержащий две функции:
|
||||
|
||||
- функция 1: аргумент - список или кортеж с выборкой; функция должна рассчитать по выборке оценки математического ожидания, дисперсии, стандартного отклонения и медианы;
|
||||
|
||||
- функция 2: аргумент - список или кортеж с выборкой; функция должна произвести расчет по той же выборке оценки коэффициента асимметрии:
|
||||
|
||||
ma=[(x1-Mx)3+:+xN-Mx)^3]/[(N-1)*sx^3],
|
||||
|
||||
где Mx,sx - оценки математического ожидания и стандартного отклонения по выборке. При этом среднее значение и стандартное отклонение должны быть вычислены с помощью функции 1.
|
||||
|
||||
2) Создайте еще один модуль М2, в котором должны выполняться следующие операции:
|
||||
|
||||
- запрашивается имя текстового файла с выборкой, проверяется его наличие и при отсутствии - повторяется запрос;
|
||||
|
||||
- выборка вводится из файла и записывается в список;
|
||||
|
||||
- с помощью функций 1 и 2 по выборке рассчитываются оценки математического ожидания, дисперсии, стандартного отклонения, медианы и коэффициента асимметрии,
|
||||
|
||||
- по выборке рассчитывается гистограмма и отображается в виде графика на экране;
|
||||
|
||||
- результаты расчета записываются в бинарный файл с именем Res3737.bin.
|
||||
|
||||
3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает результаты расчетов на экране.
|
||||
|
||||
4) Подготовьте 2 текстовых файла с выборками и проверьте программу.
|
||||
|
||||
## Выполнение
|
||||
## модуль 1
|
||||
```py
|
||||
|
||||
import math as m
|
||||
|
||||
def f1(d):
|
||||
"Функция 1: среднее, дисперсия, откл, медиана"
|
||||
if not d:
|
||||
return 0, 0, 0, 0
|
||||
|
||||
n = len(d)
|
||||
mx = sum(d) / n
|
||||
|
||||
v = sum((x - mx) ** 2 for x in d) / (n - 1) if n > 1 else 0
|
||||
sx = m.sqrt(v) if v > 0 else 0
|
||||
|
||||
sd = sorted(d)
|
||||
if n % 2 == 1:
|
||||
med = sd[n // 2]
|
||||
else:
|
||||
med = (sd[n // 2 - 1] + sd[n // 2]) / 2
|
||||
|
||||
return mx, v, sx, med
|
||||
|
||||
def f2(d):
|
||||
"""Функция 2: коэффициент асимметрии"""
|
||||
if not d:
|
||||
return 0
|
||||
|
||||
mx, _, sx, _ = f1(d)
|
||||
|
||||
if sx == 0:
|
||||
return 0
|
||||
|
||||
n = len(d)
|
||||
sc = sum((x - mx) ** 3 for x in d)
|
||||
ma = sc / ((n - 1) * (sx ** 3)) if n > 1 else 0
|
||||
|
||||
return ma
|
||||
|
||||
```
|
||||
## модуль 2
|
||||
```py
|
||||
import os
|
||||
import struct
|
||||
import math
|
||||
import matplotlib.pyplot as plt
|
||||
import M1
|
||||
|
||||
|
||||
def read_file():
|
||||
"Чтение файла с выборкой"
|
||||
while True:
|
||||
filename = input("Введите имя файла: ").strip()
|
||||
if not filename.endswith('.txt'):
|
||||
filename += '.txt'
|
||||
|
||||
if os.path.exists(filename):
|
||||
try:
|
||||
with open(filename, 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
numbers = []
|
||||
for part in content.split():
|
||||
cleaned = part.strip(',;:')
|
||||
try:
|
||||
numbers.append(float(cleaned))
|
||||
except ValueError:
|
||||
continue
|
||||
|
||||
if numbers:
|
||||
print(f"Прочитано {len(numbers)} чисел из файла {filename}")
|
||||
return numbers
|
||||
else:
|
||||
print("Файл не содержит чисел")
|
||||
except Exception as e:
|
||||
print(f"Ошибка при чтении файла: {e}")
|
||||
else:
|
||||
print(f"Файл {filename} не найден")
|
||||
|
||||
|
||||
def create_histogram(data):
|
||||
"Создание и отображение гистограммы"
|
||||
if not data:
|
||||
return
|
||||
|
||||
# Определяем количество интервалов
|
||||
num_bins = min(15, int(math.sqrt(len(data))))
|
||||
|
||||
plt.figure(figsize=(10, 6))
|
||||
plt.hist(data, bins=num_bins, edgecolor='black', alpha=0.7)
|
||||
plt.title('Гистограмма выборки')
|
||||
plt.xlabel('Значения')
|
||||
plt.ylabel('Частота')
|
||||
plt.grid(True, alpha=0.3)
|
||||
|
||||
|
||||
plt.savefig('histogram.png')
|
||||
print("Гистограмма сохранена в файл ")
|
||||
|
||||
|
||||
plt.show()
|
||||
|
||||
|
||||
def save_to_binary(stats, asymmetry):
|
||||
"Сохранение результатов в бинарный файл"
|
||||
try:
|
||||
with open('Res3737.bin', 'wb') as file:
|
||||
# Записываем все 5 значений
|
||||
for value in [stats[0], stats[1], stats[2], stats[3], asymmetry]:
|
||||
file.write(struct.pack('d', value))
|
||||
print("Результаты сохранены в файл 'Res3737.bin'")
|
||||
except Exception as e:
|
||||
print(f"Ошибка при сохранении в файл: {e}")
|
||||
|
||||
|
||||
def main():
|
||||
"Основная функция модуля M2"
|
||||
|
||||
sample = read_file()
|
||||
if not sample:
|
||||
print("Не удалось получить выборку. Программа завершена.")
|
||||
return
|
||||
|
||||
print(f"\nХарактеристики выборки:")
|
||||
print(f"Размер выборки: {len(sample)}")
|
||||
print(f"Минимальное значение: {min(sample):.4f}")
|
||||
print(f"Максимальное значение: {max(sample):.4f}")
|
||||
|
||||
# Расчет статистик
|
||||
mean, variance, std_dev, median = M1.f1(sample)
|
||||
asymmetry_coeff = M1.f2(sample)
|
||||
|
||||
print(f"\nРезультаты расчетов:")
|
||||
print(f"Математическое ожидание: {mean:.4f}")
|
||||
print(f"Дисперсия: {variance:.4f}")
|
||||
print(f"Стандартное отклонение: {std_dev:.4f}")
|
||||
print(f"Медиана: {median:.4f}")
|
||||
print(f"Коэффициент асимметрии: {asymmetry_coeff:.4f}")
|
||||
|
||||
|
||||
create_histogram(sample)
|
||||
|
||||
|
||||
save_to_binary((mean, variance, std_dev, median), asymmetry_coeff)
|
||||
|
||||
return sample, mean, variance, std_dev, median, asymmetry_coeff
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
## основной модуль
|
||||
```py
|
||||
import M2
|
||||
|
||||
def main():
|
||||
"Главная программа"
|
||||
print("=" * 40)
|
||||
print("АНАЛИЗ ВЫБОРКИ")
|
||||
print("=" * 40)
|
||||
|
||||
r = M2.main()
|
||||
|
||||
if r:
|
||||
d, mx, v, sx, med, ma = r
|
||||
|
||||
print("\n" + "-" * 40)
|
||||
print("РЕЗУЛЬТАТЫ:")
|
||||
print(f"n = {len(d)}")
|
||||
print(f"min = {min(d):.4f}")
|
||||
print(f"max = {max(d):.4f}")
|
||||
print(f"mx = {mx:.4f}")
|
||||
print(f"v = {v:.4f}")
|
||||
print(f"sx = {sx:.4f}")
|
||||
print(f"med = {med:.4f}")
|
||||
print(f"ma = {ma:.4f}")
|
||||
|
||||
if abs(ma) < 0.5:
|
||||
t = "~симм"
|
||||
elif ma > 0:
|
||||
t = "вправо"
|
||||
else:
|
||||
t = "влево"
|
||||
|
||||
print(f"тип: {t}")
|
||||
|
||||
if mx != 0:
|
||||
cv = sx / mx * 100
|
||||
print(f"CV = {cv:.1f}%")
|
||||
|
||||
print("\n" + "=" * 40)
|
||||
print("КОНЕЦ")
|
||||
print("=" * 40)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
```
|
||||
## Вывод для test1
|
||||
```py
|
||||
C:\Users\Yarik\PycharmProjects\PythonProject1\.venv\Scripts\python.exe C:\Users\Yarik\Desktop\labi\python-labs\TEMA9\M0.py
|
||||
========================================
|
||||
АНАЛИЗ ВЫБОРКИ
|
||||
========================================
|
||||
Введите имя файла: test1
|
||||
Прочитано 10 чисел из файла test1.txt
|
||||
|
||||
Характеристики выборки:
|
||||
Размер выборки: 10
|
||||
Минимальное значение: 12.5000
|
||||
Максимальное значение: 17.4000
|
||||
|
||||
Результаты расчетов:
|
||||
Математическое ожидание: 14.5900
|
||||
Дисперсия: 2.4766
|
||||
Стандартное отклонение: 1.5737
|
||||
Медиана: 14.5000
|
||||
Коэффициент асимметрии: 0.2955
|
||||
Гистограмма сохранена в файл
|
||||
|
||||
```
|
||||

|
||||
## Вывод для test2
|
||||
```py
|
||||
C:\Users\Yarik\PycharmProjects\PythonProject1\.venv\Scripts\python.exe C:\Users\Yarik\Desktop\labi\python-labs\TEMA9\M0.py
|
||||
========================================
|
||||
АНАЛИЗ ВЫБОРКИ
|
||||
========================================
|
||||
Введите имя файла: test2
|
||||
Прочитано 15 чисел из файла test2.txt
|
||||
|
||||
Характеристики выборки:
|
||||
Размер выборки: 15
|
||||
Минимальное значение: 95.0000
|
||||
Максимальное значение: 110.0000
|
||||
|
||||
Результаты расчетов:
|
||||
Математическое ожидание: 102.2667
|
||||
Дисперсия: 23.3524
|
||||
Стандартное отклонение: 4.8324
|
||||
Медиана: 102.0000
|
||||
Коэффициент асимметрии: 0.1178
|
||||
Гистограмма сохранена
|
||||
Результаты сохранены в файл 'Res3737.bin'
|
||||
|
||||
----------------------------------------
|
||||
РЕЗУЛЬТАТЫ:
|
||||
n = 15
|
||||
min = 95.0000
|
||||
max = 110.0000
|
||||
mx = 102.2667
|
||||
v = 23.3524
|
||||
sx = 4.8324
|
||||
med = 102.0000
|
||||
ma = 0.1178
|
||||
тип: ~симм
|
||||
CV = 4.7%
|
||||
|
||||
========================================
|
||||
КОНЕЦ
|
||||
========================================
|
||||
|
||||
Process finished with exit code 0
|
||||
|
||||
```
|
||||

|
||||
@ -0,0 +1,2 @@
|
||||
12.5 15.3 14.8 13.2 16.1
|
||||
17.4 12.9 15.8 14.2 13.7
|
||||
@ -0,0 +1 @@
|
||||
100 105 98 102 110 95 103 107 99 101 104 96 109 97 108
|
||||
Загрузка…
Ссылка в новой задаче