ОП.09 Обработка и анализ данных
Практическая работа №2
Тема: Визуализация данных с помощью Matplotlib и Seaborn
Цель работы: Научиться строить различные типы графиков для анализа данных: линейные, столбчатые, круговые диаграммы, ящики с усами (boxplot) и тепловые карты корреляции.
Время выполнения: 2 академических часа
Инструменты: Python + Jupyter Notebook, библиотеки pandas, matplotlib, seaborn
ЗАДАНИЕ ДЛЯ СТУДЕНТА
Этап 1. Подготовка данных (10 минут)
1. Используйте тот же датасет titanic.csv, что и в работе №1. Если файла нет — скачайте:
https://github.com/datasciencedojo/datasets/raw/master/titanic.csv
2. Загрузите и подготовьте данные:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# Загрузка данных
df = pd.read_csv('titanic.csv')
# Базовая очистка
df.drop(['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1, inplace=True)
df['Age'].fillna(df['Age'].mean(), inplace=True)
df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)
Этап 2. Линейный график (10 минут)
Постройте график зависимости возраста от номера пассажира:
plt.figure(figsize=(10, 5))
plt.plot(df.index, df['Age'], color='blue', alpha=0.5)
plt.title('Распределение возраста пассажиров по порядковому номеру')
plt.xlabel('Порядковый номер пассажира')
plt.ylabel('Возраст')
plt.grid(True, alpha=0.3)
plt.show()
Вопрос: Какой возраст преобладает? Видны ли выбросы (пожилые люди)?
Этап 3. Столбчатая диаграмма (10 минут)
Постройте сравнение выживаемости по полу и классу:
# Сводная таблица
pivot_table = df.pivot_table(index='Pclass', columns='Sex', values='Survived', aggfunc='mean')
# График
pivot_table.plot(kind='bar', color=['pink', 'lightblue'])
plt.title('Выживаемость в зависимости от класса и пола')
plt.xlabel('Класс')
plt.ylabel('Доля выживших')
plt.xticks(rotation=0)
plt.legend(title='Пол')
plt.show()
Вопрос: В каком классе разница между выживаемостью мужчин и женщин минимальна?
Этап 4. Ящик с усами (Boxplot) (15 минут)
Постройте boxplot для сравнения возраста выживших и погибших:
plt.figure(figsize=(8, 6))
sns.boxplot(x='Survived', y='Age', data=df)
plt.title('Распределение возраста выживших и погибших')
plt.xlabel('Выжил (1 — да, 0 — нет)')
plt.ylabel('Возраст')
plt.show()
Вопрос: У какой группы (выжившие / погибшие) возраст более разнообразен? Есть ли выбросы?
Этап 5. Тепловая карта корреляции (15 минут)
Постройте корреляционную матрицу и тепловую карту:
# Выбираем только числовые столбцы
numeric_df = df[['Survived', 'Pclass', 'Age', 'SibSp', 'Parch', 'Fare']]
# Корреляционная матрица
corr_matrix = numeric_df.corr()
# Тепловая карта
plt.figure(figsize=(10, 6))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt='.2f', linewidths=0.5)
plt.title('Корреляция между признаками')
plt.show()
Вопросы:
• Какие признаки сильнее всего коррелируют с выживанием?
• Есть ли сильная корреляция между возрастом и ценой билета?
Этап 6. Круговая диаграмма (5 минут)
Покажите долю пассажиров по портам посадки:
embarked_counts = df['Embarked'].value_counts()
plt.figure(figsize=(6, 6))
plt.pie(embarked_counts, labels=embarked_counts.index, autopct='%1.1f%%', startangle=90)
plt.title('Распределение пассажиров по порту посадки')
plt.show()
Вопрос: Какой порт был самым популярным?
Этап 7. Выводы (10 минут)
Напишите развёрнутый вывод по всем построенным графикам. Укажите:
1. Какие графики оказались самыми информативными?
2. Какие закономерности вы обнаружили, глядя на визуализации?
3. Какой тип графика лучше всего подходит для демонстрации корреляции?
КРИТЕРИИ ОЦЕНКИ
| Критерий |
Макс. балл |
| Все графики построены и подписаны |
3 |
| Код чистый, с комментариями |
2 |
| Выводы развёрнутые и по делу |
3 |
| Использованы разные библиотеки (matplotlib + seaborn) |
2 |
| Итого |
10 |
ОТВЕТ ДЛЯ ПРЕПОДАВАТЕЛЯ (эталонный результат)
Нажмите, чтобы увидеть ответы
Этап 2. Линейный график:
• Преобладает возраст 20–35 лет. Видны отдельные выбросы (пассажиры старше 70 лет).
Этап 3. Столбчатая диаграмма:
• Минимальная разница между выживаемостью мужчин и женщин — в 3 классе (разница около 40%).
Этап 4. Boxplot:
• У погибших возраст более разнообразен. Выбросы (очень молодые пассажиры) есть в обеих группах.
Этап 5. Тепловая карта:
• Сильнее всего коррелирует с выживанием: Pclass (класс) = -0.34, Fare (цена билета) = 0.26.
• Корреляция между возрастом и ценой билета практически отсутствует (≈0.1).
Этап 6. Круговая диаграмма:
• Самый популярный порт — S (Саутгемптон), около 70% пассажиров.
Этап 7. Выводы (пример):
1. Самыми информативными оказались столбчатая диаграмма и тепловая карта корреляции.
2. Класс билета и пол сильно влияют на выживаемость. Возраст влияет, но слабее.
3. Для корреляции лучше всего подходит тепловая карта (heatmap) с подписанными значениями.
Автор: УМК СПО
Лицензия: Бесплатное использование с указанием источника
|