
Введение
Spotify — одна из главных платформ для музыки, и популярность там почти прикладной KPI. От популярности зависят рекомендации, попадание в плейлисты, рост аудитории и заработок артиста.
Для своего проекта по анализу данных, я выбрала делать анализ именно этой темы, потому что это актуальная и интересная тема для молодежи. Большинство людей слушают музыку каждый день, и это становиться неотъемлемой частью их жизни.
Источник данных:
Вид графиков:
- Точечные диаграммы - Гистограмма распределения длительностей - Столбчатые диаграммы - Линейные графики
Для создания визуальной части графиков, я вдохновлялась цветовым решением приложения «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))
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)
5. Проверка значимости связи
Код: from scipy.stats import pearsonr
r, p = pearsonr (df[«artist_popularity»], df[«track_popularity»]) print (r, p)
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)
Сравнение типов альбомов:
Код: 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“)
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» для генерации изображения на обложку.
Используемые статистические методы
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. Год релиза и размер альбома почти не связаны с популярностью трека (около нуля). Популярность скорее зависит от артиста или контекста, чем от времени.