|
|
|
|
@ -0,0 +1,173 @@
|
|
|
|
|
# Индивидуальное контрольное задание по теме 9
|
|
|
|
|
Бушманов А.С. А-01-23
|
|
|
|
|
## Задание: Вариант 14
|
|
|
|
|
M3_14
|
|
|
|
|
1) Создайте модуль М1, содержащий две функции:
|
|
|
|
|
- функция 1: аргумент - список или кортеж с выборкой; функция должна произвести расчет по выборке списка с наименьшим и наибольшим значениями, размахом (разность наибольшего и наименьшего значений), оценкой стандартного отклонения и отношением размаха к стандартному отклонению;
|
|
|
|
|
- функция 2: аргументы - список или кортеж с выборкой и целочисленный параметр m; функция должна обратиться к функции 1 и затем определить границы m непересекающихся интервалов в диапазоне величины между наибольшим и наименьшим значениями по выборке, содержащих примерно одинаковое число элементов выборки; функция должна вернуть 2 списка: со значениями границ интервалов и с числами элементов в интервалах.
|
|
|
|
|
2) Создайте еще один модуль М2, в котором должны выполняться следующие операции:
|
|
|
|
|
- запрашивается имя текстового файла с выборкой, проверяется его наличие и при отсутствии - повторяется запрос;
|
|
|
|
|
- выборка вводится из файла и записывается в список (в строках файла может быть разное число значений, разделенных пробелами);
|
|
|
|
|
- запрашиваются у пользователя число интервалов разбиения;
|
|
|
|
|
- с помощью функций 1 и 2 производится определение границ интервалов и чисел элементов в них.
|
|
|
|
|
- отображается столбиковая диаграмма с интервалами и числами элементов выборки в них.
|
|
|
|
|
3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает результаты расчета на экране.
|
|
|
|
|
4) Проведите расчеты при 2-х разных файлах с выборками
|
|
|
|
|
## Решение:
|
|
|
|
|
#### Модуль 1: M1
|
|
|
|
|
```python
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
#### Модуль 2: M2
|
|
|
|
|
```python
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
#### Модуль 3: M0
|
|
|
|
|
```python
|
|
|
|
|
import M2
|
|
|
|
|
result = M2.run()
|
|
|
|
|
print("\nГотово. Результаты получены.")
|
|
|
|
|
```
|
|
|
|
|
## Ответ c sampe1.txt:
|
|
|
|
|
```python
|
|
|
|
|
import M0
|
|
|
|
|
Введите имя файла с выборкой: sample1
|
|
|
|
|
Файл не найден. Попробуйте ещё раз.
|
|
|
|
|
Введите имя файла с выборкой: sample1.txt
|
|
|
|
|
Файл не найден. Попробуйте ещё раз.
|
|
|
|
|
Введите имя файла с выборкой: sample1.txt
|
|
|
|
|
Размер выборки: 20
|
|
|
|
|
Введите число интервалов m: 5
|
|
|
|
|
|
|
|
|
|
--- Статистики ---
|
|
|
|
|
min = 1.0
|
|
|
|
|
max = 12.0
|
|
|
|
|
размах = 11.0
|
|
|
|
|
std = 3.216323497738569
|
|
|
|
|
размах/std = 3.4200539864022432
|
|
|
|
|
|
|
|
|
|
--- Интервалы ---
|
|
|
|
|
[1.0; 3.0) -> 4
|
|
|
|
|
[3.0; 4.0) -> 3
|
|
|
|
|
[4.0; 6.0) -> 5
|
|
|
|
|
[6.0; 9.0) -> 4
|
|
|
|
|
[9.0; 12.0] -> 4
|
|
|
|
|
|
|
|
|
|
Готово. Результаты получены.
|
|
|
|
|
```
|
|
|
|
|
![[task_figure_1.png]]## Ответ c sampe2.txt:
|
|
|
|
|
```python
|
|
|
|
|
import M0
|
|
|
|
|
Введите имя файла с выборкой: sample2.txt
|
|
|
|
|
Размер выборки: 18
|
|
|
|
|
Введите число интервалов m: 8
|
|
|
|
|
|
|
|
|
|
--- Статистики ---
|
|
|
|
|
min = -5.0
|
|
|
|
|
max = 34.0
|
|
|
|
|
размах = 39.0
|
|
|
|
|
std = 9.751319669363612
|
|
|
|
|
размах/std = 3.9994586704534942
|
|
|
|
|
|
|
|
|
|
--- Интервалы ---
|
|
|
|
|
[-5.0; -3.0) -> 2
|
|
|
|
|
[-3.0; -1.0) -> 2
|
|
|
|
|
[-1.0; 0.0) -> 1
|
|
|
|
|
[0.0; 1.0) -> 3
|
|
|
|
|
[1.0; 2.0) -> 2
|
|
|
|
|
[2.0; 5.0) -> 3
|
|
|
|
|
[5.0; 13.0) -> 2
|
|
|
|
|
[13.0; 34.0] -> 3
|
|
|
|
|
|
|
|
|
|
Готово. Результаты получены.
|
|
|
|
|
```
|
|
|
|
|
![[task_figure_2.png]]#### Файл sample1.txt:
|
|
|
|
|
```
|
|
|
|
|
1 2 3 4 5 6
|
|
|
|
|
2 2 3 3 4 4
|
|
|
|
|
5 6 7 8 9
|
|
|
|
|
10 11 12
|
|
|
|
|
```
|
|
|
|
|
#### Файл sample2.txt:
|
|
|
|
|
```
|
|
|
|
|
-5 -4 -3 -2 -1 0
|
|
|
|
|
0 0 1 1 2 2
|
|
|
|
|
3 5 8 13 21
|
|
|
|
|
34
|
|
|
|
|
```
|