
О проекте
Этот проект посвящён тому, как менялся звук Björk с 1993 по 2024 год — становилась ли музыка быстрее, громче и более «акустической» со временем. В основе — датасет со Spotify audio features для треков: для каждого трека есть дата релиза и численные характеристики звучания (например tempo, loudness, acousticness, energy и др.).
В фокусе несколько вопросов: — есть ли заметный тренд темпа (ускорение/замедление) или это скорее волны по периодам; — менялась ли громкость с годами (и насколько это похоже на общие тенденции продакшна); — стала ли музыка более акустической в поздние годы; — какие треки выглядят как экстремумы по сочетанию темпа и энергии и насколько они выбиваются из общей картины.
Чтобы перейти от отдельных треков к картине «по эпохам», я выделяю год релиза из release_date, считаю средние значения по годам и добавляю сглаживание (rolling mean на 3 года) — оно помогает увидеть общий рисунок, не теряясь в случайных скачках. Для оценки направления изменения использую линейный тренд (наклон прямой), а для поиска необычных точек — правило IQR (выбросы).
Все выводы построены вокруг визуализаций: две линейные диаграммы показывают динамику темпа и громкости по годам, сложенный столбчатый график объясняет, как менялась «акустичность» по десятилетиям, а scatter-график помогает увидеть взаимосвязь tempo и energy и выделить треки-экстремумы. В итоге получилась цельная история о том, что у Björk важнее не «ровный рост показателей», а смена периодов и подходов к звучанию.
В проекте я использую 4 визуализации:
Линейный график темпа (Tempo) по годам Показывает средний BPM в каждом году, сглаживание (rolling 3 года) и общий тренд (наклон), чтобы оценить, есть ли долгосрочное ускорение или темп меняется волнами.
Линейный график громкости (Loudness) по годам Сравнивает «тихие» и «громкие» периоды и показывает сглаженную линию, чтобы отделить общую тенденцию продакшна от резких годовых скачков.
100% stacked bar: «акустичность» по десятилетиям Делит acousticness на три диапазона (низкая/средняя/высокая) и показывает доли треков в каждом десятилетии — так видно, как меняется баланс между «электронным» и более акустическим звучанием.
Точечная диаграмма Tempo vs Energy + выбросы (IQR) Каждый трек — точка; цветом отмечен год релиза. График помогает увидеть, насколько быстрые треки действительно «энергичнее», и выделяет экстремальные треки, которые заметно выбиваются по темпу или энергии.
Цветовая палитра моих визуализаций была основана на цветах альбомов певицы.
Пошаговый план работы
Сначала я импортирую библиотеки, здесь я подключаю всё, что нужно:
pandas/numpy для обработки данных
matplotlib для графиков
font_manager для выбора шрифта
Тут я загружаю CSV, привожу release_date к формату даты и убираю строки без даты. Потом добавляю year (год) и decade (десятилетие), чтобы анализировать изменения во времени.
Далее я проверяю названия альбомов и отмечаю лайвы/сборники/саундтреки. После этого создаю колонку set, чтобы отдельно анализировать основные студийные релизы (Studio / main releases), не смешивая их с переизданиями.
Здесь я задаю визуальную основу: автоматически выбираю шрифт (Inter → Roboto → DejaVu Sans) и прописываю свою палитру цветов, чтобы все графики были в одном стиле.
В конце я делаю две вспомогательные функции:
polish () убирает лишние рамки и оставляет сетку только по Y
savefig () сохраняет каждый график в папку bjork_outputs в хорошем качестве для презентации
Агрегаты по годам (для блока yearly = df.groupby (…).agg (…))
Здесь я сворачиваю данные до уровня «год»: группирую треки по year и по типу релиза set, чтобы отдельно смотреть студийные и «прочие» релизы. Дальше внутри каждой группы я считаю:
n_tracks — сколько треков вышло в этом году
tempo_mean — средний темп (BPM)
loudness_mean — среднюю громкость (dB)
acoustic_mean — среднюю акустичность
energy_mean — среднюю энергию
Получается таблица yearly, на основе которой я дальше строю трендовые графики (по годам).
Визуализация данных
Дальше я беру только Studio / main releases, сортирую по годам и строю линию среднего темпа по каждому году. Чтобы убрать случайные скачки и показать более читаемую картину, я добавляю сглаживание rolling mean по 3 годам (tempo_roll3). Затем я считаю линейный тренд через np.polyfit: получаю slope и intercept, чтобы нарисовать прямую, которая показывает направление изменения темпа «в среднем» (наклон в BPM/год). После этого я оформляю график: подписи осей, заголовок, легенда, применяю polish () для чистого вида, сохраняю картинку и показываю её.
На линии видно, что средний tempo не растёт ровно: он колеблется волнами вокруг условной «нормы» ~115–120 BPM. Есть яркие ускорения (например в конце 2000-х и в 2022–2024), и резкие провалы (особенно заметен 2020 год — как редкий «очень медленный» год в выборке). Линейный тренд почти горизонтальный (наклон −0.12 BPM/год), то есть глобально важнее пики и провалы, а не общий вектор.
Теперь я аналогично строю динамику громкости: снова беру годовые агрегаты, считаю сглаживание по 3 годам (loud_roll3) и рисую две линии — «сырое» среднее по году и сглаженную кривую. Этот график нужен, чтобы увидеть, менялась ли музыка в сторону более «громкого» мастеринга: в loudness значения ближе к 0 означают более громкий звук. Дальше я оформляю график тем же стилем, сохраняю PNG и вывожу на экран.
Громкость по годам ведёт себя более «показательно»: на сглаживании видно, что со временем значения в среднем становятся ближе к 0 dB, то есть записи в среднем звучат громче и плотнее. При этом встречаются резкие исключения — например, один из самых «тихих» провалов заметен около 2005 года, а один из самых «громких» пиков — около 2019. Это похоже на сочетание общей тенденции продакшна и отдельных релизных периодов, которые выбиваются.
На этом этапе я анализирую «акустичность» не по годам, а крупнее — по десятилетиям. Для этого я беру acousticness и разбиваю её на 3 диапазона с помощью pd.cut: низкая / средняя / высокая. Дальше я строю таблицу частот: группирую по decade и ac_bin, считаю количество треков в каждом бине, а затем перевожу числа в проценты внутри каждого десятилетия — чтобы получить 100% stacked bar (у каждого столбца сумма 100%). Так становится видно не просто среднее, а именно структуру: какая доля треков была «более акустической» в разные периоды. После оформления графика я сохраняю его и вывожу.
Этот график даёт самый ясный сдвиг: доля треков с высокой acousticness заметно растёт от десятилетия к десятилетию. В 1990-х преобладает «низкая» акустичность (примерно ~60%), а к 2020-м картина разворачивается: «высокая» акустичность становится доминирующей (примерно ~60%), а «низкая» падает до ~15%.
В финале я хочу понять связь между темпом и «энергией» трека. Для этого строю scatter: по оси X — tempo, по оси Y — energy, а цветом кодирую год релиза, чтобы видеть распределение по времени. Чтобы отметить нестандартные точки, я вычисляю границы выбросов по правилу IQR отдельно для tempo и energy и помечаю треки, которые выходят за границы. Плюс я считаю условную «экстремальность» через расстояние в z-оценках (z_dist) и подписываю топ-10 самых заметных точек, чтобы график был интерпретируемым, а не просто облаком. Дальше я оформляю график: легенда для выбросов, colorbar с годом, единый стиль через polish (), сохранение и вывод.
На точечном графике видно, что связь между темпом и энергией не жёсткая: быстрый трек не обязан быть «энергичным», и наоборот — энергия может быть высокой даже при не максимальном BPM. Основная масса точек собирается в зоне умеренных темпов и средних энергий, а по краям появляются «характерные» экстремумы: очень быстрые треки (вроде Oceania) и очень энергичные (вроде Declare Independence), а также крайне спокойные/медленные лайв-треки внизу слева. Эти крайние точки помогают понять диапазон: Björk работает и с «ударным» темпом, и с почти медитативной динамикой.
Заключение
В сумме графики складываются в цельную историю: темп у Björk не становится постоянно быстрее или медленнее, он меняется «проектами» и периодами — это видно по волнам и резким годовым отклонениям. Громкость в целом тянется к более «плотному» звучанию, но с заметными выбросами, что похоже на сочетание эпохи продакшна и намеренных художественных решений. Самый уверенный долгосрочный сдвиг — это рост «акустичности»: по десятилетиям явно увеличивается доля треков, которые Spotify распознаёт как более акустические. А scatter подтверждает, что стиль не сводится к одной оси: скорость и энергия часто расходятся, и именно в этом разнообразии — ключ к звучанию Björk на дистанции 1993–2024.
Используемые инструменты
Kaggle — источник данных
Python 3 — основной язык анализа данных
Jupyter Notebook — формат работы
Pandas — загрузка CSV, очистка данных, работа с датами (to_datetime), группировки и агрегаты (groupby, agg)
NumPy — численные операции и статистика (массивы to_numpy (), сглаживание через расчёты, линейный тренд np.polyfit, IQR)
Matplotlib — визуализация (line, bar, scatter), настройка оформления и сохранение графиков (savefig)
ChatGPT 5.2
Описание применения генеративной модели
В работе использовалась нейросеть ChatGPT 5.2 для помощи в написании и корректировке кода, подборе форматов графиков и формулировке текстовых комментариев к результатам.