Original size 895x1294

Анализ популярности в Spotify

PROTECT STATUS: not protected
The project is taking part in the competition

Введение

Spotify — одна из главных платформ для музыки, и популярность там почти прикладной KPI. От популярности зависят рекомендации, попадание в плейлисты, рост аудитории и заработок артиста.

Для своего проекта по анализу данных, я выбрала делать анализ именно этой темы, потому что это актуальная и интересная тема для молодежи. Большинство людей слушают музыку каждый день, и это становиться неотъемлемой частью их жизни.

Источник данных:

https://github.com/karlicoss/spotifyexport

Вид графиков:

- Точечные диаграммы - Гистограмма распределения длительностей - Столбчатые диаграммы - Линейные графики

Для создания визуальной части графиков, я вдохновлялась цветовым решением приложения «Spotify».

- Тёмный фон (как интерфейс Spotify / dark mode) - Неоновые/кислотные акценты - Высокая контрастность текста

Что я изучала?

1. Корреляционная матрица 2. Расшифровка главного фактора (artist_popularity) через scatter: распределение, потолок, шум. 3. Частные гипотезы: - длительность (распределение + связь + тренд) - explicit (цветовая группировка) - тип релиза (сравнение групп) - жанровый срез (топ жанров) - временная динамика (количество треков по годам)

Этапы работы

1. Импорт и загрузка

Код: 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))

2. Приведение типов и инженерия признаков

• 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

3. Контроль качества

Код: missing = df.isna ().mean ().sort_values (ascending=False) print (missing.head (5))

Original size 1253x449

4. Корреляционный анализ (основной статистический блок)

Код: 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)

Original size 593x295

5. Проверка значимости связи

Код: from scipy.stats import pearsonr

r, p = pearsonr (df[«artist_popularity»], df[«track_popularity»]) print (r, p)

Original size 1255x604
Original size 1157x840

6. Аггрегации для сравнений

Код: 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)

Original size 1201x570

Сравнение типов альбомов:

Код: 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)

Original size 1228x500

Подготовка жанров

Код: 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)

Original size 1172x546
Original size 1233x575

Также для работы была использована нейросеть «Sora» для генерации изображения на обложку.

Используемые статистические методы

1. Описательная статистика: среднее, медиана, диапазон, стандартное отклонение 2. Корреляционный анализ - оценка линейной связи факторов с track_popularity, - проверка значимости через p-value 3. Группировки/агрегации - сравнение средних по категориям (album_type, категории популярности артиста), - топ-N подход (топ артистов, топ жанров). 4. Трендовые линии/регрессия - линейный тренд для связей, - нелинейный тренд для длительности

Выводы

1. Самый сильный фактор среди рассмотренных — популярность артиста (r ≈ 0.467): умеренная связь, но далеко не «гарантия хита» 2. Подписчики коррелируют слабее (r ≈ 0.232) 3. Explicit и длительность дают слабый положительный эффект (≈ 0.13 и 0.11) — то есть «есть тенденция», но она небольшая. 4. Год релиза и размер альбома почти не связаны с популярностью трека (около нуля). Популярность скорее зависит от артиста или контекста, чем от времени.