Введение
Spotify — одна из главных платформ для музыки, и популярность там почти прикладной KPI. От популярности зависят рекомендации, попадание в плейлисты, рост аудитории и заработок артиста.
Для своего проекта по анализу данных, я выбрала делать анализ именно этой темы, потому что это актуальная и интересная тема для молодежи. Большинство людей слушают музыку каждый день, и это становиться неотъемлемой частью их жизни.
Источник данных:
Вид графиков:
— Точечные диаграммы — Гистограмма распределения длительностей — Столбчатые диаграммы — Линейные графики
Для создания визуальной части графиков, я вдохновлялась цветовым решением приложения «Spotify».
— Тёмный фон (как интерфейс Spotify / dark mode) — Неоновые/кислотные акценты — Высокая контрастность текста
Что я изучала?
- Корреляционная матрица
- Расшифровка главного фактора (artist_popularity) через scatter: распределение, потолок, шум.
- Частные гипотезы: — длительность (распределение + связь + тренд) — explicit (цветовая группировка) — тип релиза (сравнение групп) — жанровый срез (топ жанров) — временная динамика (количество треков по годам)
Этапы работы
- Импорт и загрузка
Код: import pandas as pd import numpy as np
df = pd.read_csv («spotify_data clean.csv»)
print (df.shape) # (8582, 15) print (df.head (3))
- Приведение типов и инженерия признаков
• explicit переводим в 0/1 (для корреляций и моделей). • из album_release_date достаём год release_year.
Код: df[«explicit_numeric»] = df[«explicit»].astype (int)
df[«album_release_date»] = pd.to_datetime (df[«album_release_date»], errors="coerce») df[«release_year»] = df[«album_release_date»].dt.year
- Контроль качества
Код: missing = df.isna ().mean ().sort_values (ascending=False) print (missing.head (5))
- Корреляционный анализ (основной статистический блок)
Код: num_cols = [ «track_popularity», «artist_popularity», «artist_followers», «explicit_numeric», «track_duration_min», «release_year», «album_total_tracks» ]
corr_with_target = df[num_cols].corr (numeric_only=True)[«track_popularity»].sort_values (ascending=False) print (corr_with_target)
- Проверка значимости связи
Код: from scipy.stats import pearsonr
r, p = pearsonr (df[«artist_popularity»], df[«track_popularity»]) print (r, p)
- Аггрегации для сравнений
Код: top_artists = ( df.groupby («artist_name») .agg (artist_pop=(«artist_popularity»,"mean»), track_count=(«track_id»,"count»)) .sort_values («artist_pop», ascending=False) .head (15) ) print (top_artists)
Сравнение типов альбомов:
Код: album_types = ( df.groupby («album_type») .agg (avg_popularity=(«track_popularity»,"mean»), avg_duration=(«track_duration_min»,"mean»), track_count=(«track_id»,"count»)) .reset_index () ) print (album_types)
Подготовка жанров
Код: genres = df.dropna (subset=[«artist_genres»]).copy () genres[«genre»] = genres[«artist_genres»].str.split (», «) genres = genres.explode („genre“)
пример метрики: сумма популярности топ-10 треков на жанр
top_genres = ( genres.sort_values („track_popularity“, ascending=False) .groupby („genre“) .head (10) .groupby („genre“)[„track_popularity“].sum () .sort_values (ascending=False) .head (15) ) print (top_genres)
Также для работы была использована нейросеть «Sora» для генерации изображения на обложку.
Используемые статистические методы
- Описательная статистика: среднее, медиана, диапазон, стандартное отклонение
- Корреляционный анализ — оценка линейной связи факторов с track_popularity, — проверка значимости через p-value
- Группировки/агрегации — сравнение средних по категориям (album_type, категории популярности артиста), — топ-N подход (топ артистов, топ жанров).
- Трендовые линии/регрессия — линейный тренд для связей, — нелинейный тренд для длительности
Выводы
- Самый сильный фактор среди рассмотренных — популярность артиста (r ≈ 0.467): умеренная связь, но далеко не «гарантия хита»
- Подписчики коррелируют слабее (r ≈ 0.232)
- Explicit и длительность дают слабый положительный эффект (≈ 0.13 и 0.11) — то есть «есть тенденция», но она небольшая.
- Год релиза и размер альбома почти не связаны с популярностью трека (около нуля). Популярность скорее зависит от артиста или контекста, чем от времени.



