Введение
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)
- Неоновые/кислотные акценты
- Высокая контрастность текста
Что я изучала?
- Корреляционная матрица
- Расшифровка главного фактора (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» для генерации изображения на обложку.
Используемые статистические методы




