Нашли ошибку?
Скачать чистый
мини-проект≈ 20 минупражнения: 0 из 7

Мини-проект: ведомость группы

Разобрать оценки 30 студентов по пяти предметам — средние по предметам и студентам, лучшие, рейтинг, кто сдал всё, кто в зоне риска.

Python запустится при первом выполнении

Ведомость — классическая таблица «строки × столбцы»: строка — студент, столбец — предмет. На ней сходится весь модуль: оси, argmax, статистика, сортировка. Файл data/scores.csv: первый столбец — код студента, дальше — баллы по пяти предметам.

[ ]Начало файла
import numpy as np

subjects = ["математика", "физика", "программирование", "история", "английский"]
with open("data/scores.csv") as f:
    print(f.read()[:110])
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
student_id,math,physics,programming,history,english
S01,68,49,68,82,81
S02,70,66,68,77,87
S03,61,58,72,60,70
S

Шаг 1. Загрузка

Баллы загрузим числами, а коды студентов — отдельно, как текст: у loadtxt для этого есть dtype=str.

[ ]Упражнение 1Баллы и коды решено

Сохраните в scores таблицу баллов (столбцы 1–5), а в ids — коды студентов (столбец 0) как строки.

scores = ...
ids = ...

Шаг 2. Предметы

[ ]Упражнение 2Самый трудный предмет решено

Сохраните в subject_avg средний балл по каждому предмету, а в hardest — название предмета с самым низким средним (названия — в списке subjects).

subject_avg = ...
hardest = ...

Шаг 3. Студенты

[ ]Упражнение 3Лучший студент решено

Сохраните в student_avg средний балл каждого студента, а в best_id — код студента с самым высоким средним.

student_avg = ...
best_id = ...

[ ]Упражнение 4Лучший по каждому предмету решено

Сохраните в best_by_subject коды студентов, лучших по каждому предмету, — пять кодов по порядку предметов. Если лучших несколько (одинаковый максимум), argmax берёт первого из них — так и оставьте.

best_by_subject = ...

Шаг 4. Кто сдал всё и кто в зоне риска

all и any тоже понимают axis: (scores >= 60).all(axis=1) — для каждой строки, все ли её баллы не ниже 60.

[ ]Упражнение 5Сдали все предметы решено

Сохраните в all_passed число студентов, у которых все баллы не ниже 60.

all_passed = ...

[ ]Упражнение 6Зона риска решено

Сохраните в at_risk коды студентов, у которых хотя бы по одному предмету меньше 50 баллов.

at_risk = ...

Шаг 5. Рейтинг

[ ]Упражнение 7Пятёрка лучших решено

Сохраните в top5 коды пяти студентов с самым высоким средним баллом — от лучшего.

top5 = ...

Выводы

[ ]Ведомость в цифрах
for name, avg in zip(subjects, np.round(subject_avg, 1)):
    print(f"{name}: {avg}")
print("самый трудный:", hardest, "| лучший студент:", best_id, round(student_avg.max(), 1))
print("сдали всё:", all_passed, "из", len(ids), "| в зоне риска:", len(at_risk))
print("пятёрка лучших:", top5)
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
математика: 67.8
физика: 66.8
программирование: 69.0
история: 69.7
английский: 66.0
самый трудный: английский | лучший студент: S12 89.8
сдали всё: 12 из 30 | в зоне риска: 9
пятёрка лучших: ['S12' 'S29' 'S21' 'S27' 'S24']
Итог появится, когда решите все упражнения урока, — в нём ответы. Ячейку можно и выполнить.

Самый трудный предмет — английский, но разница средних между предметами невелика — около 4 баллов. Все предметы сдали 12 студентов из 30, а у 9 есть хотя бы один балл ниже 50 — им стоит помочь. Весь анализ — десяток строк, и каждая — одна операция с таблицей.

Выводы с ответами появятся, когда решите все упражнения урока.

Подробнее в справочнике

Практика по модулю

Задачи по NumPy для самостоятельной практики появятся в разделе «Задачи → NumPy».

Нашли ошибку?