python

Есть ли что-то общее у разных песен-хитов?

  • четверг, 18 июля 2019 г. в 00:20:18
https://habr.com/ru/post/460313/
  • Python
  • Big Data
  • Визуализация данных
  • Социальные сети и сообщества
  • Звук


image

Если выполнить вход на Spotify.me, то можно получить персонализированную сводку того, как Spotify понимает вас через музыку, которую вы слушаете на этом сайте Spotify. Это круто!

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

Мне было очень любопытно, существуют ли какие-то конкретные ингредиенты, из которых составлены хитовые песни. Что делает их крутыми? Почему нам нравятся хиты, и есть ли у них определённая «ДНК»?

Задача


Это привело меня к попытке ответить при помощи данных Spotify на два вопроса:

  1. На что похож мой музыкальный плейлист?
  2. Существуют ли конкретные атрибуты аудио, общие для всех хитовых композиций?

Инструменты


К счастью, есть очень простые инструменты, позволяющие подключиться к Spotify, получить данные, а затем визуализировать их.

Мы будем работать с языком программирования Python 3, библиотекой Python Spotipy, позволяющую подключаться к Spotify Web API, а визуализировать данные будем с помощью plot.ly и Seaborn.

Массив данных


В конце каждого кода Spotify компилирует плейлист из 100 самых часто воспроизводимых песен. Использованный мной массив данных уже выложен на Kaggle: Top Spotify Tracks of 2018. Список 100 самых популярных песен со Spotify кажется вполне разумным массивом данных для изучения хитов, не правда ли?

Приступим!


Для начала нужно создать аккаунт на developer.spotify.com. После этого можно получить прямой доступ к Spotify Web API Console и начать исследовать различные конечные точки API.

Примечание: ссылка на код, который я использовал для проекта, находится в конце поста.

После подключения к Spotify Web API мы создадим при помощи Spotipy Python Library объект Spotify, который затем будем использовать для передачи запросов к конечной точке Spotify.

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
from spotipy import util
cid =”Your-client-ID” 
secret = “Your-Secret”
client_credentials_manager = SpotifyClientCredentials(client_id=cid, client_secret=secret) 
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)

Анализ данных моего плейлиста


Это один из самых важных этапов в data science. Наша цель здесь — понять тип музыки в моём плейлисте, извлечь любые интересные наблюдения и сравнить их с характеристиками аудио сотни популярных композиций 2018 года.

График частоты исполнителей



Частота появления исполнителей в моём плейлисте

Взглянув на эту гистограмму, я могу понять, насколько часто исполнители встречаются в одном из моих плейлистов.

Характеристики аудио


Теперь давайте взглянем на характеристики аудио (audio features) песен из плейлиста. Spotify составил список характеристик аудио для каждой композиции на Spotify! Вот краткое описание характеристик, которые мы будем использовать в этой статье:

Instrumentalness (инструментальность): прогнозирует, что в треке нет вокала. В этом контексте звуки «оу» и «а-а-а» считаются инструментальными. Рэп или треки со словами очевидно являются «вокальными». Чем ближе значение инструментальности к 1.0, тем выше вероятность того, что в треке не содержится голоса.

Energy (энергия): это величина в интервале от 0.0 до 1.0, характеризующая критерий восприятия «яркости» и «активности» песни. Обычно энергичные композиции быстрые, громкие и шумные. Например, высокой энергией обладает death metal, а прелюдия Баха имеет по этой шкале низкие показатели.

Acousticness (акустика): мера уверенности в том, что композиция является акустической в интервале от 0.0 до 1.0. Значение 1.0 обозначает высокую уверенность в том, что композиция акустическая.

Liveness (живое исполнение): распознаёт присутствие в записи слушателей. Чем больше значения liveness, тем выше вероятность того, что песня исполнялась вживую. Значение выше 0.8 даёт серьёзную уверенность в живом исполнении.

Speechiness (текст): Speechiness обнаруживает присутствие текста в песне. Если speechiness композиции выше 0.66, то она скорее всего состоит из текста, значение от 0.33 до 0.66 означает, что песня может содержать и музыку, и слова, а значение ниже 0.33 означает, что в песне нет никаких слов.

Danceability (танцевальность): Danceability описывает пригодность дорожки для танцев на основании таких музыкальных элементов, как темп, стабильность ритма, сила долей и общее постоянство. Композиции со значением 0.0 наименее танцевальные, со значением 1.0 — наиболее танцевальные.

Valence: эта величина в интервале от 0.0 до 1.0 описывает музыкальную позитивность, передаваемую песней. Песни с высокой valence звучат более позитивно (т.е. они передают счастье, радость или эйфорию), а перни с низкой valence звучат негативнее (т.е. они печальные, депрессивные или гневные).




Распределение музыкальных стилей в моём плейлисте

Результаты наблюдений:

  • Большинство композиций в моём плейлисте имеет широкое распределение танцевальности и в нём не так много «счастливых» песен, что видно из высокой частотности композиций со значениями ниже 0.5 valence. Поэтому можно сказать, что мне нравятся песни, под которые можно танцевать (и это правда!)
  • На графике есть крутой спуск вниз для speechiness, instrumentalness и немного liveness. Это говорит нам, что в музыке из моего плейлиста обычно редко бывают слова, в нём мало инструментальных композиций и песен, исполняемых вживую.
  • Acousticness распределена приблизительно равномерно между 0 и 1, то есть в этом атрибуте у меня нет предпочтений. (Обычно мне нравятся акустические песни, но я не стал бы искать акустические каверы для каждой песни).
  • Наконец, energy распределена нормально и имеет небольшие хвосты с обоих концов, что означает меньшую вероятность добавления в мой плейлист. То есть по сути мне нравятся композиции со средней энергией.
  • Мои композиции не так уж популярны

Анализ данных Top 100 Songs 2018 года


Скачав и импортировав массив данных с Kaggle в моё приложение, я начал с анализа самых популярных исполнителей, определённых по количеству попаданий в этот список.


Исполнители в Top 100 Songs 2018 года по частоте

Исполнители, чаще всего встречающиеся в Top 100 Songs 2018


Фрагмент кода




Post Malone и XXXTENTACION

Теперь давайте исследуем характеристики аудио ста самых популярных композиций в нашем массиве данных, и посмотрим, как они выглядят! Мы создадим такую же гистограмму, как и для моего плейлиста, чтобы можно было позже их сравнить.




Распределение музыкальных стилей в top 100 songs 2018

Взглянув на гистограмму, мы можем увидеть, что композиции top 100 обладают следующими характеристиками:

  • Очень высокая танцевальность и энергия, но низкая вероятность живого исполнения, наличия текста и акустичности (мы уже видим некоторые признаки того, что мой плейлист не такой крутой, как top 100 ).

Например, песня «In My Feelings» Дрейка из нашего массива данных имеет высокую danceable и относительно высокое значение energy.


Наконец, я решил создать лепестковую диаграмму песен top 100 и наложить на неё характеристики аудио моего плейлиста.

Песни из Top 100 показаны синим, а мои песни — оранжевым.


Заключение


Итак, похоже, у меня есть ответы на оба вопроса из начала поста. Мне удалось увидеть, как выглядит моя музыка и я нашёл ДНК хитовых композиций. Характеристики аудио из моего плейлиста немного похожи на top 100, но у меня больше акустических песен и меньше живого исполнения.

Хотите написать хитовую песню? Сделайте её танцевальной, с большой энергией и долей позитивности.

Я доволен получившимися результатами, но хочу продолжить исследования.

Код всего проекта выложен на GitHub.

Вот что я рекомендую сделать дальше:

  • Изучите, как можно использовать ваш плейлист, чтобы определить персональные предпочтения и рекомендуемую рекламу, которая вам может понравиться.
  • Использовать алгоритм кластеризации машинного обучения «K-среднее», чтобы узнать, какие песни похожи на ваши. Так можно искать новые песни, которые вам могут понравиться.
  • Использовать машинное обучение для прогнозирования «популярности» песен на основании их характеристик аудио



Благодарю Элвина Чуна, Ashrith и Джона Коха за полезные статьи по этой теме. Spotify и Spotipy, спасибо за потрясающие API и библиотеку!