|
Итоговая контрольная работа
ОП.09 Обработка и анализ данных
Практическая работа №10
Тема: Итоговая контрольная работа
Цель работы: Проверить знания и навыки работы с библиотекой Pandas для обработки и анализа данных.
Время выполнения: 2 академических часа
Форма работы: Индивидуальная
ИТОГОВАЯ КОНТРОЛЬНАЯ РАБОТА
Часть 1. Теоретические вопросы (20 минут, 20 баллов)
Ответьте на вопросы (кратко, 1-2 предложения):
1. Что такое DataFrame в Pandas? Чем он отличается от Series?
2. Какие методы используются для загрузки данных из CSV и Excel файлов?
3. В чём разница между методами loc[] и iloc[]?
4. Что такое groupby()? Приведите пример использования.
5. Как объединить два DataFrame по общему столбцу? Какие типы объединений существуют?
6. Что такое скользящее среднее (rolling mean) и для чего оно используется?
7. Как найти и удалить пропуски в данных? Назовите два способа заполнения пропусков.
8. Что такое выбросы (outliers)? Как их выявить с помощью IQR?
9. Как привести текст к нижнему регистру и удалить лишние пробелы в колонке DataFrame?
10. Какие типы визуализаций вы знаете? Какой тип лучше подходит для сравнения распределений?
Часть 2. Практическое задание (60 минут, 50 баллов)
Дан датасет с информацией о студентах и их оценках. Выполните все задания.
import pandas as pd
import numpy as np
# Данные о студентах
students_data = {
'student_id': [1, 2, 3, 4, 5, 6, 7, 8],
'name': ['Анна Иванова', 'Борис Петров', 'Виктор Сидоров', 'Галина Смирнова',
'Дмитрий Козлов', 'Елена Морозова', ' Жанна Лебедева ', 'Игорь Новиков'],
'group': ['ИС-21', 'ИС-21', 'ИС-22', 'ИС-22', 'ИС-23', 'ИС-23', 'ИС-21', 'ИС-22'],
'gender': ['female', 'male', 'male', 'female', 'male', 'female', 'female', 'male']
}
# Данные об оценках
grades_data = {
'student_id': [1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 1, 2],
'subject': ['math', 'math', 'math', 'math', 'math', 'math', 'math', 'math',
'physics', 'physics', 'physics', 'physics', 'physics', 'physics',
'informatics', 'informatics'],
'score': [5, 4, 3, 5, np.nan, 4, 5, 3, 4, 3, 4, 5, 4, 3, 5, 5]
}
students = pd.DataFrame(students_data)
grades = pd.DataFrame(grades_data)
print("Датафрейм students:")
print(students)
print("\nДатафрейм grades:")
print(grades)
Задания (выполните последовательно):
# 1. Очистите данные (2 балла)
# - Удалите лишние пробелы в колонке 'name'
# - Приведите имена к формату "Имя Фамилия" (первая буква заглавная, остальные строчные)
# - Проверьте результат
# 2. Обработайте пропуски (3 балла)
# - Найдите пропуски в оценках
# - Заполните пропуски средним значением по соответствующему предмету
# 3. Объедините таблицы (3 балла)
# - Объедините students и grades в одну таблицу
# - Тип объединения: left (чтобы сохранить всех студентов)
# - Как зовут студента с пропущенной оценкой?
# 4. Группировка и агрегация (4 балла)
# - Рассчитайте средний балл каждого студента по всем предметам
# - Добавьте колонку 'avg_score' в объединённую таблицу
# - Кто из студентов имеет самую высокую среднюю оценку?
# 5. Фильтрация (3 балла)
# - Отберите студентов группы ИС-22
# - Какой у них средний балл по физике?
# 6. Анализ по группам (4 балла)
# - Сгруппируйте данные по группе
# - Рассчитайте для каждой группы:
# * средний балл по математике
# * средний балл по физике
# * количество студентов
# 7. Визуализация (6 баллов)
# - Постройте столбчатую диаграмму средних баллов по предметам для каждой группы
# - Добавьте заголовок, подписи осей и легенду
# 8. Дополнительный анализ (5 баллов)
# - Сравните успеваемость юношей и девушек
# - Рассчитайте средний балл по полу
# - Кто учится лучше?
# Сохраните все результаты и подготовьте краткий отчёт.
Часть 3. Отчёт по практическому заданию (20 минут, 30 баллов)
Оформите отчёт, включив в него:
1. Код всех выполненных заданий (с комментариями)
2. Выводы по каждому пункту (что получилось, какие результаты)
3. Краткий анализ:
- Какая группа показывает лучшие результаты?
- Есть ли разница в успеваемости между юношами и девушками?
- Какие предметы вызывают наибольшие трудности?
4. Что было самым сложным в задании?
КРИТЕРИИ ОЦЕНКИ
| Раздел | Макс. балл |
|---|
|
| Часть 1. Теоретические вопросы (10 вопросов × 2 балла) | 20 | | Часть 2. Практическое задание | 50 | | Часть 3. Отчёт и выводы | 30 |
ОТВЕТЫ ДЛЯ ПРЕПОДАВАТЕЛЯ
Нажмите, чтобы увидеть эталонные ответы
Часть 1. Теоретические вопросы:
1. DataFrame — 2D таблица, Series — 1D массив.
2. pd.read_csv(), pd.read_excel().
3. loc — по метке индекса, iloc — по целочисленной позиции.
4. groupby() группирует данные для агрегации: df.groupby('group')['score'].mean()
5. pd.merge(df1, df2, on='key') — inner, left, right, outer.
6. Скользящее среднее сглаживает временные ряды для выявления тренда.
7. dropna() — удаление, fillna() — заполнение (средним, медианой, значением).
8. Выбросы — аномальные значения. IQR: Q1-1.5*IQR и Q3+1.5*IQR.
9. df['col'].str.lower().str.strip().
10. Гистограммы, боксплоты, scatter, heatmap. Боксплот подходит для сравнения распределений.
Часть 2. Практическое задание (эталонный код):
# 1. Очистка данных
students['name'] = students['name'].str.strip().str.title()
print("Очищенные имена:")
print(students['name'])
# 2. Обработка пропусков
print("Пропуски в оценках:", grades['score'].isnull().sum())
math_mean = grades[grades['subject'] == 'math']['score'].mean()
grades.loc[(grades['subject'] == 'math') & (grades['score'].isnull()), 'score'] = math_mean
print("Пропуски после обработки:", grades['score'].isnull().sum())
# 3. Объединение таблиц
merged = pd.merge(students, grades, on='student_id', how='left')
student_with_nan = merged[merged['score'].isnull()]['name'].iloc[0]
print(f"Студент с пропущенной оценкой: {student_with_nan}")
# 4. Группировка и агрегация
avg_by_student = merged.groupby('student_id')['score'].mean().reset_index()
avg_by_student.columns = ['student_id', 'avg_score']
merged = pd.merge(merged, avg_by_student, on='student_id')
best_student = merged.loc[merged['avg_score'].idxmax(), 'name']
print(f"Лучший студент: {best_student}")
# 5. Фильтрация
group_is22 = merged[merged['group'] == 'ИС-22']
physics_22 = group_is22[group_is22['subject'] == 'physics']['score'].mean()
print(f"Средний балл по физике в ИС-22: {physics_22:.2f}")
# 6. Анализ по группам
group_stats = merged.groupby('group').agg({
'score': lambda x: x[merged.loc[x.index, 'subject'] == 'math'].mean(),
'score': lambda x: x[merged.loc[x.index, 'subject'] == 'physics'].mean(),
'student_id': 'nunique'
})
print("Статистика по группам:", group_stats)
# 7. Визуализация
import matplotlib.pyplot as plt
pivot = merged.pivot_table(index='group', columns='subject', values='score', aggfunc='mean')
pivot.plot(kind='bar')
plt.title('Средние баллы по предметам для групп')
plt.xlabel('Группа')
plt.ylabel('Средний балл')
plt.legend(title='Предмет')
plt.show()
# 8. Анализ по полу
gender_stats = merged.groupby('gender')['score'].mean()
print(f"Средний балл девушек: {gender_stats['female']:.2f}")
print(f"Средний балл юношей: {gender_stats['male']:.2f}")
Часть 3. Выводы (пример):
• Лучшая группа: ИС-22 (средний балл ~4.5)
• Девушки учатся лучше юношей (~4.6 vs ~4.0)
• Самый сложный предмет: физика (самый низкий средний балл)
• Самое сложное в задании: правильная агрегация с условиями по предметам
Автор: УМК СПО
Лицензия: Бесплатное использование с указанием источника
|
|
|