форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
50 строки
1.7 KiB
Python
50 строки
1.7 KiB
Python
import os
|
|
import M1
|
|
import matplotlib.pyplot as plt
|
|
def read_sample(filename):
|
|
data = []
|
|
with open(filename, "r", encoding="utf-8") as f:
|
|
for line in f:
|
|
for t in line.split():
|
|
data.append(float(t))
|
|
return data
|
|
def run():
|
|
while True:
|
|
fname = input("Введите имя файла с выборкой: ").strip()
|
|
if os.path.exists(fname):
|
|
break
|
|
print("Файл не найден. Попробуйте ещё раз.")
|
|
sample = read_sample(fname)
|
|
print("Размер выборки:", len(sample))
|
|
m = int(input("Введите число интервалов m: "))
|
|
mn, mx, razmah, s, ratio = M1.stats(sample)
|
|
borders, counts = M1.intervals(sample, m)
|
|
print("\n--- Статистики ---")
|
|
print("min =", mn)
|
|
print("max =", mx)
|
|
print("размах =", razmah)
|
|
print("std =", s)
|
|
print("размах/std =", ratio)
|
|
print("\n--- Интервалы ---")
|
|
for i in range(m):
|
|
left = borders[i]
|
|
right = borders[i+1]
|
|
print(f"[{left}; {right}) -> {counts[i]}" if i < m-1 else f"[{left}; {right}] -> {counts[i]}")
|
|
labels = []
|
|
for i in range(m):
|
|
a = borders[i]
|
|
b = borders[i+1]
|
|
if i < m-1:
|
|
labels.append(f"[{a:.2f};{b:.2f})")
|
|
else:
|
|
labels.append(f"[{a:.2f};{b:.2f}]")
|
|
|
|
plt.bar(labels, counts)
|
|
plt.xticks(rotation=45, ha="right")
|
|
plt.title("Распределение элементов по интервалам")
|
|
plt.xlabel("Интервалы")
|
|
plt.ylabel("Число элементов")
|
|
plt.tight_layout()
|
|
plt.show()
|
|
return mn, mx, razmah, s, ratio, borders, counts
|