Исходный размер 895x1294

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

PROTECT STATUS: not protected

Введение

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

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

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

https://github.com/karlicoss/spotifyexport

Файл для анализа:

https://www.kaggle.com/datasets/wardabilal/spotify-global-music-dataset-20092025

Блокнот с кодом:

https://colab.research.google.com/drive/164uAGBKOECdpFLCc7haIhhzOT5avxHLa?usp=sharing

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

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

Для создания визуальной части графиков, я вдохновлялась цветовым решением приложения «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))

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

• 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

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

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

Исходный размер 1253x449
  1. Корреляционный анализ (основной статистический блок)

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

Исходный размер 593x295
  1. Проверка значимости связи

Код: from scipy.stats import pearsonr

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

Исходный размер 1255x604
Исходный размер 1157x840
  1. Аггрегации для сравнений

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

Исходный размер 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)

Исходный размер 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)

Исходный размер 1172x546
Исходный размер 1233x575

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

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

Анализ популярности в Spotify
Проект создан 14.01.2026
Мы используем файлы cookies для улучшения работы сайта НИУ ВШЭ и большего удобства его использования. Более подробную...
Показать больше