Я выбрала данные с информацией о треках, содержащие такие поля, как название песни, имя артиста, и набор числовых аудио-признаков (энергия, танцевальность, настроение и др.), а также жанр — в столбце Class. Данные были взяты из открытого источника Kaggle, где собраны популярные треки с разными характеристиками.
Почему именно эти данные?
1 - Музыка — важное культурное явление, и её анализ через цифровые признаки помогает понять особенности жанров, предпочтения слушателей, тренды. 2 - Эти данные хороши для практики анализа аудио-признаков и для классификации музыкальных жанров. 3 - Задача интересна и практически значима для рекомендационных систем и музыкальных сервисов.
Выбор типа графиков
Для визуализации я выбрала: Столбчатые диаграммы (bar plots) — для наглядного сравнения средних значений признаков по жанрам и распределения количества треков. Boxplot — для изучения распределений признаков внутри каждого жанра и выявления выбросов. Корреляционная тепловая карта (heatmap) — чтобы увидеть взаимосвязи между числовыми признаками.
Эти графики хорошо подходят для описательного анализа данных.
Этапы работы
- Загрузка и первичный обзор данных import pandas as pd
df = pd.read_csv('train.csv')
print(df.head()) print(df.info()) print(df['Class'].value_counts())
Проверила пропуски:
print(df.isnull().sum())
Построила график распределения жанров:
import matplotlib.pyplot as plt import seaborn as sns
plt.figure(figsize=(10,6)) sns.countplot(y='Class', data=df, order=df['Class'].value_counts().index, palette='pastel') plt.title('Распределение треков по музыкальным жанрам') plt.xlabel('Количество треков') plt.ylabel('Жанр (Class)') plt.show()
Построила корреляционную матрицу признаков:
plt.figure(figsize=(14,10)) sns.heatmap(df[features].corr(), annot=True, cmap='coolwarm', fmt=".2f") plt.title('Корреляция числовых признаков') plt.show()
Изучила распределение признаков energy и danceability по жанрам:
plt.figure(figsize=(12,6)) sns.boxplot(x='Class', y='energy', data=df, palette='Set3') plt.title('Распределение энергии по музыкальным жанрам') plt.xlabel('Жанр') plt.ylabel('Energy') plt.xticks(rotation=45) plt.show()
plt.figure(figsize=(12,6)) sns.boxplot(x='Class', y='danceability', data=df, palette='Set2') plt.title('Танцевальность по жанрам') plt.xticks(rotation=45) plt.show()
Рассчитала средние значения некоторых признаков по жанрам:
mean_feats = df.groupby('Class')[[ 'danceability', 'energy', 'loudness', 'speechiness', 'acousticness', 'valence']].mean() mean_feats.plot(kind='bar', figsize=(14,7), colormap='tab20') plt.title('Средние значения признаков по жанрам') plt.ylabel('Среднее значение') plt.xlabel('Жанр') plt.xticks(rotation=45) plt.show()
Стилизация графиков
Использовала палитры цветов пастельных оттенков (pastel, Set2, Set3, tab20), чтобы графики были лёгкими и приятными для восприятия.
Выравнивание осей и поворот меток x-оси для удобства чтения.
Заголовки и подписи шрифтом среднего размера, чтобы обеспечить читаемость без перегрузки.
Вдохновлялась современными аналитическими дашбордами с упором на чистоту и минимализм.




