форкнуто от main/python-labs
Родитель
a6f19af649
Сommit
d26dd22875
@ -0,0 +1,3 @@
|
|||||||
|
import M2
|
||||||
|
result = M2.run()
|
||||||
|
print("\nГотово. Результаты получены.")
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
import math
|
||||||
|
def stats(sample):
|
||||||
|
x = list(sample)
|
||||||
|
n = len(x)
|
||||||
|
mn = min(x)
|
||||||
|
mx = max(x)
|
||||||
|
razmah = mx - mn
|
||||||
|
mean = sum(x) / n
|
||||||
|
if n > 1:
|
||||||
|
s = math.sqrt(sum((xi - mean) ** 2 for xi in x) / (n - 1))
|
||||||
|
else:
|
||||||
|
s = 0.0
|
||||||
|
if s == 0:
|
||||||
|
ratio = None
|
||||||
|
else:
|
||||||
|
ratio = razmah / s
|
||||||
|
return mn, mx, razmah, s, ratio
|
||||||
|
def intervals(sample, m):
|
||||||
|
mn, mx, razmah, s, ratio = stats(sample)
|
||||||
|
x = sorted(sample)
|
||||||
|
n = len(x)
|
||||||
|
borders = [mn]
|
||||||
|
for k in range(1, m):
|
||||||
|
idx = int(k * n / m)
|
||||||
|
borders.append(x[idx])
|
||||||
|
borders.append(mx)
|
||||||
|
counts = [0] * m
|
||||||
|
for v in sample:
|
||||||
|
placed = False
|
||||||
|
for i in range(m - 1):
|
||||||
|
if borders[i] <= v < borders[i + 1]:
|
||||||
|
counts[i] += 1
|
||||||
|
placed = True
|
||||||
|
break
|
||||||
|
if not placed:
|
||||||
|
if borders[m - 1] <= v <= borders[m]:
|
||||||
|
counts[m - 1] += 1
|
||||||
|
return borders, counts
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
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
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
1 2 3 4 5 6
|
||||||
|
2 2 3 3 4 4
|
||||||
|
5 6 7 8 9
|
||||||
|
10 11 12
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
-5 -4 -3 -2 -1 0
|
||||||
|
0 0 1 1 2 2
|
||||||
|
3 5 8 13 21
|
||||||
|
34
|
||||||
|
После Ширина: | Высота: | Размер: 20 KiB |
|
После Ширина: | Высота: | Размер: 26 KiB |
Загрузка…
Ссылка в новой задаче