Свой Spotify Wrapped: как извлечь и проанализировать данные о прослушиваниях
Последние пару лет Spotify Wrapped оставляет меня разочарованным. Инсайты, которые он предоставляет, едва ли кажутся содержательными, что странно, учитывая, что Spotify обладает огромным массивом данных о моих привычках прослушивания. В итоге я решил получить доступ к этим данным и собрать свой собственный Spotify Wrapped. Я запросил полную историю прослушиваний и обработал её самостоятельно в Excel, чтобы выявить те закономерности, которые никогда не показывает официальный отчёт.

Загрузка данных из Spotify: это проще, чем кажется
Первый шаг — получить доступ к информации. Стандартный путь предполагает использование API Spotify. Если вы разработчик или достаточно технически подкованы, чтобы знать, как это работает, инструкции вам не нужны. Однако, если вы хотите избежать лишней технической сложности, существует более простой вариант для обычных пользователей.
Откройте веб-плеер Spotify по адресу open.spotify.com, кликните на иконку профиля и перейдите в настройки аккаунта. В разделе «Конфиденциальность и безопасность» выберите «Конфиденциальность аккаунта». Прокрутите страницу вниз до опции «Загрузить ваши данные». По умолчанию выбраны только «Данные аккаунта» — снимите эту галочку и отметьте «Расширенная история стриминга». Именно этот файл содержит вашу историю прослушиваний за всё время, что открывает доступ к полезным аналитическим возможностям.











Нажмите «Запросить данные» — на почту придет письмо с подтверждением запроса. Хотя на сайте указано, что процесс может занять до 30 дней, по моему опыту, ждать пришлось значительно меньше. Я запросил расширенную историю 26 августа в 4:30 утра, а ссылка на скачивание пришла уже на следующий день, 27 августа, в 4:36 утра. Скорость, вероятно, зависит от объема данных. Мой аккаунт был создан в марте 2019 года и содержит более 133 000 записей — это довольно большой объем, но обработка заняла всего сутки.

Импорт данных Spotify в Excel
Файлы, которые присылает Spotify, нельзя прочитать напрямую: это архив с набором JSON-файлов. Готовой таблицы нет, поэтому следующая задача — импортировать всё это в Excel. Проще всего воспользоваться инструментом Power Query.

Если вы не знакомы с ним, выполните следующие действия: создайте новый файл Excel, сохраните его (например, под названием «Spotify Wrapped»), перейдите на вкладку «Данные» и выберите «Получить данные» -> «Из других источников» -> «Пустой запрос». В открывшемся окне Power Query нажмите «Главная» -> «Расширенный редактор», удалите всё содержимое и вставьте код, который я привожу в конце этой статьи.

Этот этап критически важен. Перед тем как нажать «ОК», необходимо изменить две переменные в коде. Во-первых, укажите в `FolderPath` путь к папке, где хранятся ваши JSON-файлы Spotify. Во-вторых, задайте значение `TZ_OffsetHours` — оно определяет смещение вашего часового пояса относительно UTC. Без этого корректирования время прослушивания будет отображаться неверно. Например, для Восточного побережья США это -5, для Тихоокеанского — -8.

После настройки нажмите «Готово», затем на вкладке «Главная» выберите «Закрыть и загрузить» -> «Закрыть и загрузить в…», укажите «Таблица» и «Новый лист». Если ваша история обширна, подождите пару минут. У меня процесс занял около 90 секунд, после чего все 133 999 записей, накопленные с марта 2019 года, оказались в таблице.

Мой личный Spotify Wrapped на базе Excel
Пусть это выглядит не слишком изящно, зато данные получились максимально полными. Имея массив в Excel, я смог обработать его с помощью сводных таблиц (PivotTables). Я не дизайнер и не претендую на креативность в визуализации, но у меня было четкое представление о том, что я хочу увидеть.

На листе с обзором я отобразил общее количество прослушиваний, общее время в часах, соотношение музыки и подкастов, долю пропусков (skip rates) и годовую разбивку всех показателей. Также я добавил «часы прослушивания» — график, показывающий время суток, в которое я слушал музыку по годам. Например, в 2022 году основная активность приходилась на период с 19:00 до 23:00.

Аналогичный анализ был проведен для разбивки по дням. Если взглянуть на мой график, может показаться, что я слушаю Spotify круглосуточно. На самом деле это побочный эффект агрегации данных. Из-за специфики моей работы циклы сна постоянно сдвигаются: иногда я сплю днем и работаю ночью, иногда наоборот. Агрегируя эти данные за годы, график создает иллюзию непрерывного прослушивания. Чтобы это исправить, я создал лист «циркадного дрейфа» (circadian drift), визуализирующий, как именно мой график активности смещается с течением времени.

Анализ прослушиваний и работа с данными Spotify
Помимо базовой статистики, я создал отдельное представление, позволяющее отслеживать, на каких именно устройствах я слушал Spotify и в каком объеме. Также я подготовил список топ-артистов с указанием времени их прослушивания, конкретных лет и общего количества воспроизведений. Стоит признать, что эти данные выглядят не так эстетично, как официальный «Spotify Wrapped», однако они предоставляют гораздо больше полезной аналитики — именно этого я и добивался. Если же вас интересует визуальная составляющая, вы всегда можете перенести ключевые цифры в сервис вроде Canva, чтобы оформить их в привлекательную графику.

Использование ИИ и готовых инструментов для обработки данных
Вам не обязательно быть экспертом в работе со сводными таблицами или глубоко знать Excel, чтобы анализировать свои данные. Для тех, кто не силен в инструментах электронной таблицы, я делюсь собственным файлом: Spotify Wrapped Excel Sheet with Built-in Pivot Tables. Это XLSX-файл, размещенный на Google Диске. Рекомендую обязательно скачивать его на свое устройство и открывать непосредственно в приложении Excel, чтобы избежать возможных ошибок и сбоев в работе.

Если вам необходима специфическая метрика, которую я не предусмотрел, а навыков создания сводных таблиц не хватает, можно обратиться к искусственному интеллекту. Часть сводных таблиц в моем файле была создана с помощью нейросети Claude. Вы можете подключить Claude к Excel, чтобы он построил их за вас. Альтернативный вариант — просто передать Claude исходную таблицу с данными, которую мы импортировали ранее, и попросить проанализировать ее, рассчитать нужные показатели или выделить конкретные интересующие вас инсайты.

Настройка Power Query в Excel
Как и обещал, публикую код Power Query, который необходимо вставить в расширенный редактор (Advanced Editor) Excel:

let
// ======== ОТРЕДАКТИРУЙТЕ ЭТИ ДВЕ СТРОКИ ========
FolderPath = «C:\Users\YOU\Documents\Spotify Extended Streaming History»,
TZ_OffsetHours = 5.5,
// ======================================
Source = Folder.Files(FolderPath),
OnlyAudio = Table.SelectRows(Source, each Text.Lower([Extension]) = «.json» and Text.StartsWith([Name], «Streaming_History_Audio»)),
Parsed = Table.AddColumn(OnlyAudio, «Data», each Json.Document([Content])),
KeepData = Table.SelectColumns(Parsed, {«Data»}),
ToRows = Table.ExpandListColumn(KeepData, «Data»),
Expanded = Table.ExpandRecordColumn(ToRows, «Data», {«ts», «platform», «ms_played», «conn_country», «master_metadata_track_name», «master_metadata_album_artist_name», «master_metadata_album_album_name», «spotify_track_uri», «episode_name», «episode_show_name», «reason_start», «reason_end», «shuffle», «skipped», «offline», «incognito_mode»}, {«ts», «Platform», «ms_played», «Country», «Track», «Artist», «Album», «Track URI», «Episode», «Show», «Reason Start», «Reason End», «Shuffle», «Skipped Flag», «Offline», «Incognito»}),
UTC = Table.AddColumn(Expanded, «UTC», each DateTime.FromText(Text.Replace([ts], «Z», «»)), type datetime),
PlayedAt = Table.AddColumn(UTC, «Played At», each [UTC] + #duration(0, 0, 0, TZ_OffsetHours * 3600), type datetime),
Mins = Table.AddColumn(PlayedAt, «Minutes», each [ms_played] / 60000, type number),
Yr = Table.AddColumn(Mins, «Year», each Date.Year([Played At]), Int64.Type),
Mo = Table.AddColumn(Yr, «Month», each Date.Month([Played At]), Int64.Type),
Dw = Table.AddColumn(Mo, «Weekday», each Date.DayOfWeekName([Played At]), type text),
Hr = Table.AddColumn(Dw, «Hour», each Time.Hour([Played At]), Int64.Type),
Kind = Table.AddColumn(Hr, «Content», each if [Track] <> null then «Music» else if [Episode] <> null then «Podcast» else «Other», type text),
Device = Table.AddColumn(Kind, «Device», each let p = Text.Lower([Platform]) in if Text.Contains(p, «android») then «Android» else if Text.Contains(p, «ios») then «iOS» else if Text.Contains(p, «osx») or Text.Contains(p, «mac») then «macOS» else if Text.Contains(p, «windows») then «Windows» else if Text.Contains(p, «linux») then «Linux» else if Text.Contains(p, «web») then «Web Player» else if Text.Contains(p, «cast») or Text.Contains(p, «partner») then «Speaker / TV» else «Other», type text),
Skip = Table.AddColumn(Device, «Skipped», each if [Reason End] = «fwdbtn» then 1 else 0, Int64.Type),
ShortPlay = Table.AddColumn(Skip, «Short Play», each if [ms_played] < 30000 then 1 else 0, Int64.Type),
Cleaned = Table.RemoveColumns(ShortPlay, {«ts», «UTC»})
in Cleaned





