Original size 595x842

Анализ песен с 1998 г по 2019 г

PROTECT STATUS: not protected

Описание

Датасет Spotify Top Songs 2000–2019 представляет собой подборку аудио-данных по самым популярным трекам каждого года с 2000 по 2019. Он включает 2000 треков (примерно по топ-100 хитов за каждый год) и содержит подробную информацию о каждом из них. Источником данных послужили чарты Spotify (плейлисты топ-хитов по годам), собранные в открытом доступе (например, на Kaggle). В таблице представлены 18 столбцов, описывающих характеристики трека: от базовых сведений до аудио-фич.

Основные столбцы датасета и их описание: artist, song — имя исполнителя и название трека.

year — год, с которым ассоциирован хит (как правило, год релиза или попадания в топ).

duration_ms — длительность трека в миллисекундах.

explicit — метка контента 18+ (цензурные слова) — True/False.

genre — жанр или сочетание жанров, к которым относится трек.

popularity — индекс популярности в Spotify (0–100).

danceability — танцевальность трека (0.0–1.0, чем выше, тем более «ритмичный», подходящий для танцев).

energy — энергетика трека (0.0–1.0, высокое значение у «энергичных», громких композиций).

loudness — средняя громкость в децибелах (отрицательные значения, ближе к 0 dB у более громко сведённых треков).

speechiness, acousticness, instrumentalness, liveness — речь/вокал, акустичность, инструментальность, живость (доли от 0 до 1, характеризующие содержание аудио).

valence — эмоциональный настрой или позитивность трека (0.0 — грустный/минорный, 1.0 — радостный/мажорный).

tempo — темп (скорость) композиции в ударах в минуту (BPM).

key, mode — тональность (нотный ключ 0–11) и лад (мажор/минор) произведения.

Почему именно этот датасет? Он охватывает два десятилетия музыкальной истории, позволяя проследить тренды в популярной музыке. Поскольку данные взяты с Spotify, одного из крупнейших стриминговых сервисов, они отражают вкусы миллионов слушателей. Этот набор содержит аудио-фичи, которые дают объективные измерения музыки (темп, громкость, настроение и т. д.). Анализ таких параметров на протяжении 20 лет позволяет выявить, как изменились предпочтения — например, какие жанры доминировали в разные годы, стали ли песни быстрее или медленнее, выросла ли «танцевальность» и энергия хитов, поменялся ли эмоциональный окрас популярной музыки.

Цели анализа: Изучить распределение жанров топ-хитов по годам: какие жанры были наиболее популярны и как их доля менялась с 2000 по 2019 год.

Проанализировать динамику среднего темпа песен: выявить тенденции (ускорился или замедлился средний BPM со временем).

Исследовать взаимосвязь популярности и danceability: проверить, имеют ли более популярные песни тенденцию быть более танцевальными.

Проследить изменения громкости (loudness) мастеринга треков: стали ли песни звучать громче или тише со временем (учитывая эпоху «loudness war» в 2000-х).

Проанализировать изменения valence (эмоционального настроя): выяснить, правда ли, что со временем популярная музыка стала более «грустной» или сохраняет позитив.

Для достижения этих целей я построю соответствующие графики по датасету и приведу краткую интерпретацию результатов. Визуализация данных выполнена с использованием библиотеки Matplotlib/Seaborn в стиле dark theme (тёмный фон) с яркой неоновой палитрой, вдохновленной фирменными цветами Spotify (лаймовый зеленый, небесно-голубой, оранжевый, пурпурный) — это обеспечивает хороший контраст и современный вид графиков.

Распределение популярных жанров по годам (2000–2019)

Рассмотрим, как менялась жанровая картина топ-100 Spotify треков каждого года. Ниже приведён код, который агрегирует данные по жанрам: для каждого года подсчитывается количество треков, относящихся к самым популярным жанровым категориях. Мы выделим четыре основных жанра — Pop, Hip Hop, R& B, Dance/Electronic — и проследим их динамику с течением времени.

import pandas as pd import matplotlib.pyplot as plt

df = pd.read_csv ('songs_normalize.csv')

df = df[(df['year'] >= 2000) & (df['year'] <= 2019)]

top_genres = ['pop', 'hip hop', 'R& B', 'Dance/Electronic']

genre_counts_by_year = {genre: [] for genre in top_genres} years = sorted (df['year'].unique ()) for year in years: year_data = df[df['year'] == year] for genre in top_genres:

    count = year_data['genre'].str.contains (genre, case=False, regex=False).sum ()
    genre_counts_by_year[genre].append (count)

plt.style.use ('dark_background') fig, ax = plt.subplots (figsize=(6,4)) colors = {'pop': '#00FF00', 'hip hop': '#00BFFF', 'R& B': '#FFA500', 'Dance/Electronic': '#FF00FF'} for genre, color in colors.items (): ax.plot (years, genre_counts_by_year[genre], label=genre, color=color, linewidth=2) ax.set_title ('Популярные жанры по годам (2000–2019)', fontsize=10) ax.set_xlabel ('Год') ax.set_ylabel ('Количество топ-треков жанра') ax.legend () plt.tight_layout () plt.show ()

Original size 1200x800

Динамика присутствия основных жанров среди топ-100 треков каждого года. Отображены четыре наиболее распространённых жанра: Pop (лаймовая линия), Hip Hop (голубая), R& B (оранжевая) и Dance/Electronic (пурпурная).

График показывает заметные изменения в музыкальных вкусах. Pop является доминирующим жанром на всём протяжении периода, однако его доля со временем немного снижается: если в начале 2000-х поп-хиты составляли ~60–80 из топ-100, то ближе к 2015–2019 годам — около Fifty to 60. Hip Hop (и родственные ему урбан-жанры) значительно выросли в популярности: с ~20 треков в 2000 году доля хип-хопа поднялась до пика (более 50 треков) около 2010 года. В конце 2010-х hip hop стабильно удерживает 30–40 позиций среди сотни лучших. Напротив, R& B-музыка, бывшая заметной частью топ-чарта в начале 2000-х (~30–40 песен), пережила спад — к середине 2010-х ее присутствие сократилось до считанных треков (иногда практически исчезая из топ-100). Жанр Dance/Electronic начинал с минимальной доли (единичные треки в 2000–2005 гг.), но после 2010-го демонстрирует рост: на волне популярности EDM к 2015 году электронные танцевальные хиты занимали до 20–30 мест, частично вытеснив R& B. Таким образом, за 20 лет поп-музыка сохранила лидерство, но получила сильную конкуренцию от хип-хопа, а также произошла смена R& B на электронные жанры в списке лидеров.

Динамика среднего темпа песен по годам

Original size 1120x1120

Проанализируем, как изменялся средний темп популярных песен с течением времени. Для каждого года вычислим среднее значение tempo (ударов в минуту) всех треков из топ-100. Код ниже группирует данные по годам и строит линию тренда BPM.

avg_tempo_by_year = df.groupby ('year')['tempo'].mean ().reset_index ()

plt.style.use ('dark_background') fig, ax = plt.subplots (figsize=(6,4)) ax.plot (avg_tempo_by_year['year'], avg_tempo_by_year['tempo'], color='#FFA500', marker='o') ax.set_title ('Средний темп топ-хитов (2000–2019)') ax.set_xlabel ('Год') ax.set_ylabel ('Средний темп, BPM') plt.tight_layout () plt.show ()

Original size 1200x800

Средний темп (BPM) песен, попавших в топ-100 Spotify, по годам.

Из графика видно, что темп популярных треков слегка увеличился за два десятилетия. В начале 2000-х средний темп держался около ~114–118 BPM. В последующие годы наблюдаются колебания, однако прослеживаются несколько всплесков: например, в 2008 году средний BPM приблизился к 126, затем в 2011 снова превысил 125 BPM. После небольшого снижения в середине 2010-х, к 2019 году средняя скорость треков достигла максимального значения ~128 BPM. В целом, разница не радикальна — популярная музыка всегда в среднем находилась в диапазоне ~115–125 ударов в минуту, — но тенденция к более быстрому темпу в конце 2010-х присутствует. Это может отражать рост популярности энергичных жанров (EDM, быстрый поп) ближе к 2020-м годам.

Взаимосвязь популярности и danceability

Original size 1120x1120

Проверим гипотезу: делают ли продюсеры музыку более танцевальной ради повышения её популярности? Рассмотрим разброс (scatter) метрик danceability (по оси X) и popularity (по оси Y) для всех треков из датасета. Каждая точка — отдельная песня. Если более танцевальные треки систематически более популярны, точки образовали бы восходящий тренд.

x = df['danceability'] y = df['popularity']

plt.style.use ('dark_background') fig, ax = plt.subplots (figsize=(6,4)) ax.scatter (x, y, color='#00FF00', alpha=0.6) ax.set_title ('Популярность vs. Danceability') ax.set_xlabel ('Danceability (танцевальность)') ax.set_ylabel ('Популярность') ax.grid (True, linestyle='--', linewidth=0.5) plt.tight_layout () plt.show ()

Original size 1200x800

Диаграмма рассеяния, показывающая отношение популярности трека к его danceability. Каждая зелёная отметка «×» — один трек (0–100 по популярности vs. 0–1 по танцевальности).

На диаграмме нет явной линии тренда — точки распределены довольно беспорядочно. Корреляция между danceability и популярностью практически отсутствует: среди топ-хитов встречаются как очень «danceable» композиции с высокой популярностью, так и танцевальные треки со сравнительно низким рейтингом, и наоборот — не слишком ритмичные песни могут иметь высокую популярность. Это говорит о том, что рецепт хитовой песни не сводится лишь к танцевальности. Вероятно, на популярность влияют и другие факторы (исполнитель, мелодичность, маркетинг, тексты и пр.). Тем не менее, стоит отметить, что в сегмент топ-100 вообще редко попадают песни с совсем низкой танцевальностью (меньше ~0.2) — крайне медленные или атмосферные треки не так часто становятся мейнстрим-хитами.

Изменения средней громкости (loudness)

Original size 1120x1120

Следующим шагом рассмотрим, как менялась громкость мастеринга популярных треков. Показатель loudness в датасете измеряется в децибелах (дБ) относительных к цифровому нулю: чем выше громкость, тем значение ближе к 0 (отрицательные значения вплоть до 0 дБ). Мы вычислим среднюю loudness по топ-100 трекам каждого года.

avg_loudness_by_year = df.groupby ('year')['loudness'].mean ().reset_index ()

plt.style.use ('dark_background') fig, ax = plt.subplots (figsize=(6,4)) ax.plot (avg_loudness_by_year['year'], avg_loudness_by_year['loudness'], color='#00BFFF', marker='o') ax.set_title ('Средняя громкость топ-хитов (2000–2019)') ax.set_xlabel ('Год') ax.set_ylabel ('Средняя громкость, дБ') plt.tight_layout () plt.show ()

Original size 1200x800

Средняя громкость (loudness) треков из топ-100, в дБ (относительно 0 dBFS), по годам. Чем ближе к 0, тем громче в среднем сведены песни данного года.

График отражает интересный тренд, связанный с историей звукорежиссуры. В начале 2000-х средняя громкость хитов была около –6 дБ. Затем наблюдается постепенное увеличение громкости (значения поднимаются вверх к нулю): к 2009–2010 гг. средняя loudness достигла ~–5 дБ. Этот период совпадает с разгаром так называемой «войны громкости», когда треки целенаправленно делались максимально громкими и сжатым динамическим диапазоном. После 2010 года видно небольшое снижение громкости: к 2015–2018 гг. среднее значение опустилось примерно до –5.7 дБ. Иными словами, последние годы показателя чуть тише, чем пик 2010-х, возможно, из-за появления стриминговых норм по выравниванию громкости и смены подхода к мастерингу. Тем не менее, в 2019 средняя громкость всё ещё выше, чем в 2000 (–5.9 дБ vs –6.2 дБ). Вывод: сначала популярные песни становились громче от 2000 к 2010, затем тенденция слегка повернулась вспять, и к 2019 году средняя громкость немного снизилась.

Изменения valence (эмоционального настроя)

Original size 1120x1120

Наконец, посмотрим, как изменился средний эмоциональный настрой популярных песен, используя метрику valence. Высокий valence означает веселый, позитивный эмоциональный тон композиции, низкий — грустный или минорный. Вычислим среднее valence топ-100 треков каждого года.

avg_valence_by_year = df.groupby ('year')['valence'].mean ().reset_index ()

plt.style.use ('dark_background') fig, ax = plt.subplots (figsize=(6,4)) ax.plot (avg_valence_by_year['year'], avg_valence_by_year['valence'], color='#FF00FF', marker='o') ax.set_title ('Средний valence (настрой) топ-хитов (2000–2019)') ax.set_xlabel ('Год') ax.set_ylabel ('Средний valence (0-1)') plt.tight_layout () plt.show ()

Original size 1200x800

Изменение среднего показателя valence (эмоциональной позитивности) среди популярных треков по годам.

Результат однозначен: популярная музыка стала менее радостной на протяжении двух десятилетий. В 2000–2001 гг. средний valence хитов был довольно высоким (≈0.64–0.66 из 1), что говорит о преобладании бодрых, мажорных композиций. Затем уже к середине 2000-х этот показатель снизился до ~0.57–0.60. На протяжении 2010-х продолжилось падение: самые низкие значения valence (~0.48–0.50) наблюдаются в 2013–2018 годах, отражая тренд на более грустное, меланхоличное настроение в популярных песнях. Лишь в 2019 году виден небольшой отскок вверх (~0.53), что все равно заметно ниже ранних 2000-х. Таким образом, данные подтверждают популярную гипотезу: в среднем топ-хиты 2010-х более минорные и эмоционально напряженные, чем песни начала 2000-х, которые чаще были беззаботно-позитивными. Причины могут быть разными — от смены тематики песен и жанров (например, рост хип-хопа с более серьёзной лирикой) до общего настроения общества и экспериментов артистов.

Цветовая палитра

Original size 1120x1120

Для визуализации данных я выбрала специальную цветовую палитру, гармонирующую с тёмным фоном и тематикой Spotify. Палитра включает четыре неоновых цвета:

Lime Green — HEX: #00FF00 (ярко-лаймовый зеленый)

Deep Sky Blue — HEX: #00BFFF (насыщенный небесно-голубой)

Orange — HEX: #FFA500 (чистый оранжевый)

Magenta (Fuchsia) — HEX: #FF00FF (пурпурно-розовый, фуксия)

Выбор палитры обусловлен стремлением добиться высокого контраста и стильного, современного вида графиков. На чёрном фоне такие неоновые тона выглядят ярко и привлекают внимание к ключевым элементам графика. Кроме того, эти цвета ассоциируются с цифровой эстетикой и музыкой: например, лаймово-зелёный цвет напоминает фирменный оттенок логотипа Spotify, а комбинация неоновых голубых, оранжевых и пурпурных акцентов создаёт ощущение ретро-волны 80-х и футуризма одновременно. В контексте презентации анализа музыкальных данных эта палитра помогает придать визуальным материалам стилистику, навеянную музыкальной тематикой (эквалайзеры, ночные клубы, неоновые огни).

Промпты для Midjourney

Для оформления слайдов презентации можно сгенерировать абстрактные фоновые изображения и иллюстрации, выдержанные в единой цветовой гамме (тёмный фон + яркие акценты lime, deepskyblue, orange, magenta). Ниже приведены примеры промптов на русском языке для нейросети Midjourney, которые описывают желаемый стиль — неоновый, футуристичный, с музыкальными элементами:

Промпт 1: «Абстрактный неоновый фон с музыкальными элементами: черный фон, яркие светящиеся линии лаймово-зеленого, небесно-голубого, оранжевого и пурпурного цветов, футуристический узор звуковых волн, динамичный ритмичный дизайн».

Промпт 2: «Цифровая неоновая визуализация музыки на темном фоне, сияющие геометрические формы и эквалайзерные полосы лайм, глубокий голубой, оранжевый, фуксия; эффект свечения, стиль синтвейв».

Промпт 3: «Футуристический неоновый город в музыке: черный ночной фон, контуры небоскрёбов и нот, подсвеченные лаймовым, голубым, оранжевым, пурпурным; ретро-футуризм, синтезаторные волны в небе».

Промпт 4: «Абстрактная музыка и свет: темный фон, разноцветные неоновые круги и всплески (лайм, синий, оранжевый, фуксия) расходятся как звуковые волны, ощущение басов и вибрации».

Промпт 5: «Неоновый эквалайзер: на черном фоне столбцы и линии аудио-спектра ярко-зеленого, небесно-голубого, оранжевого, пурпурного цвета, гладкая 3D-графика, отражение на полу, высокотехнологичный стиль».

Каждый из этих запросов задаёт чёрный фон и упоминает яркие акцентные цвета нашей палитры, а также характерные образы (звуковые волны, эквалайзер, ноты, геометрия). Сгенерированные по таким описаниям изображения могут стать отличными фоновыми слайдами или иллюстрациями, подчёркивающими выводы анализа и создающими у аудитории ощущение погружения в мир музыки и данных.

Код и текст был скорректирован chatgpt Картинки были сгенерированы Leonardo AI

Анализ песен с 1998 г по 2019 г
We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more