Original size 1140x1600

Анализ данных о самых прослушиваемых песнях Spotify 2024

PROTECT STATUS: not protected

Концепция

big
Original size 1280x720

Для своего проекта по анализу данных я выбрал датасет «Most Streamed Spotify Songs 2024». Нашел я его на Kaggle.

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

О датасете

В датасете содержится много полезной информации:

-Названия треков -Имена исполнителей -Даты релиза -Количество прослушиваний -Рейтинги популярности -Пометки «Explicit» для треков с ненормативной лексикой -Другие статистические данные

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

Визуализация данных

Для анализа и визуализации я создал следующие графики:

1.Столбчатая диаграмма — топ-10 исполнителей по количеству стримов, чтобы сразу понять, кто сейчас рулит на платформе.

2.Круговая диаграмма — распределение треков по году выпуска, чтобы узнать, насколько новые треки доминируют в стримах и какая доля приходится на каждый год.

3.Диаграмма рассеяния — зависимость количества прослушиваний от количества плейлистов, с линией тренда и расчетом коэффициента корреляции, чтобы проверить связь между включением в плейлисты и популярностью трека.

4.Гистограмма — распределение треков по рейтингу популярности на Spotify, чтобы понять, как распределяется популярность контента на платформе.

5.Круговая диаграмма — доля треков с пометкой «Explicit» на Spotify, чтобы оценить, какой процент популярного контента содержит ненормативную лексику.

6.Линейный график — процент «Explicit» треков по годам выпуска, чтобы проследить, как менялась доля такого контента со временем.

Оформил я всё в фирменном стиле Spotify — черно-зеленая цветовая схема с использованием фирменного зеленого цвета Spotify (#1DB954), что придало визуализациям аутентичный вид и связало их с брендом, который я исследовал.

Импорт библиотек и загрузка данных

Начал я с подготовки окружения и импорта всех нужных библиотек:

Импорт необходимых библиотек import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from datetime import datetime

Настройка стиля Spotify (черно-зеленый) plt.style.use ('dark_background') # Черный фон spotify_green = '#1DB954' # Фирменный зеленый цвет Spotify spotify_black = '#191414' # Черный цвет Spotify

Установка параметров шрифта plt.rcParams['font.size'] = 12

Затем загрузил данные и провел первичный анализ:

Загрузка данных df = pd.read_csv ('Most Streamed Spotify Songs 2024.csv', encoding='latin1')

Получение базовой информации о датасете print («Информация о датасете Spotify:») print (f"Количество строк: {df.shape[0]}») print (f"Количество столбцов: {df.shape[1]}»)

Просмотр первых 5 строк print («\nПример данных:») display (df.head ())

Проверка типов данных и пропущенных значений print («\nИнформация о типах данных:») df.info ()

Количество пропущенных значений print («\nПропущенные значения:») print (df.isnull ().sum ())

Информация о датасете Spotify

Информация о типах данных:

RangeIndex: 4600 entries, 0 to 4599 Data columns (total 29 columns):

Оказалось, что в датасете 4600 строк и 29 столбцов! Но при этом много пропусков в различных колонках. Например, столбец TIDAL Popularity полностью пустой, а в SoundCloud Streams пропущено больше половины данных.

Предобработка данных

Здесь пришлось потрудиться, так как данные требовали серьезной очистки:

Преобразование даты релиза в формат datetime df['Release Date'] = pd.to_datetime (df['Release Date'], errors='coerce')

Извлечение года из даты релиза df['Release Year'] = df['Release Date'].dt.year

Преобразование строковых числовых данных в числовой формат Для Spotify Streams, удаляем запятые и конвертируем в числа df['Spotify Streams'] = df['Spotify Streams'].str.replace (', ', '').astype (float)

Аналогично для других числовых столбцов представленных как строки columns_to_convert = ['Spotify Playlist Count', 'Spotify Playlist Reach', 'YouTube Views', 'YouTube Likes'] for col in columns_to_convert: df[col] = df[col].str.replace (', ', '').astype (float)

Заполнение пропущенных значений df['Artist'].fillna ('Unknown Artist', inplace=True) df['Spotify Streams'].fillna (df['Spotify Streams'].median (), inplace=True) df['Spotify Playlist Count'].fillna (df['Spotify Playlist Count'].median (), inplace=True) df['Spotify Playlist Reach'].fillna (df['Spotify Playlist Reach'].median (), inplace=True)

Удаление полностью пустой колонки df.drop ('TIDAL Popularity', axis=1, inplace=True)

На этом этапе возникла еще одна проблема — числовые данные часто хранились в виде строк с запятыми (например, «1,234,567»). Пришлось удалять запятые и преобразовывать в числовой формат. Также в столбце с датами были разные форматы, что затрудняло их обработку.

Анализ топ-исполнителей по стримам

Теперь я мог приступить к визуализации. Начал с самого интересного — кто же самые популярные исполнители:

Группировка данных по исполнителям и суммирование стримов artist_streams = df.groupby ('Artist')['Spotify Streams'].sum ().sort_values (ascending=False) top_artists = artist_streams.head (10)

Создание столбчатой диаграммы plt.figure (figsize=(14, 8)) bars = plt.bar (top_artists.index, top_artists.values / 1e9, color=spotify_green)

Добавление значений над столбцами for bar in bars: height = bar.get_height () plt.text (bar.get_x () + bar.get_width ()/2, height + 0.05 * max (top_artists) / 1e9, f'{height:.1f}B', ha='center', va='bottom', color='white')

Оформление графика plt.title ('Топ-10 исполнителей по количеству прослушиваний на Spotify', fontsize=16, color='white') plt.xlabel ('Исполнитель', fontsize=14, color='white') plt.ylabel ('Количество прослушиваний (млрд)', fontsize=14, color='white') plt.xticks (rotation=45, ha='right') plt.grid (True, axis='y', alpha=0.3) plt.tight_layout () plt.show ()

Original size 1384x784

Глядя на график топ-10 исполнителей, можно увидеть, что абсолютными лидерами стриминга являются The Weeknd (37.2B) и Bad Bunny (37.1B), которые идут практически вровень. Далее следуют Drake (35.2B) и Taylor Swift (34.5B). Интересно отметить, что между четверкой лидеров и остальными артистами существует значительный разрыв — у Post Malone (5-е место) уже 26.1B прослушиваний, что на 8.4 миллиарда меньше, чем у Taylor Swift. Это говорит о том, что в музыкальной индустрии существует явная «большая четверка» исполнителей, которые значительно опережают всех остальных по популярности.

Анализ распределения треков по году выпуска

Далее я хотел понять, насколько «свежие» треки доминируют в стримах:

Группировка треков по году выпуска year_counts = df['Release Year'].value_counts ().sort_index () recent_years = year_counts[year_counts.index >= 2015] # Фокусируемся на недавних годах

Создание круговой диаграммы plt.figure (figsize=(12, 8)) plt.pie (recent_years, labels=recent_years.index, autopct='%1.1f%%', colors=[spotify_green, '#1ed760', '#1aa34a', '#166d3b', '#11492b', '#0d2e1f', '#0a1f16'], wedgeprops={'edgecolor': 'black', 'linewidth': 1})

plt.title ('Распределение популярных треков по году выпуска (с 2015)', fontsize=16, color='white') plt.axis ('equal') plt.tight_layout () plt.show ()

Original size 1184x792

Круговая диаграмма демонстрирует, что больше всего популярных треков (27%) выпущено в 2023 году. Годы 2022 и 2024 делят второе место с одинаковой долей в 16,2%. В целом, треки последних трех лет (2022-2024) составляют почти 60% от всего популярного контента на платформе. Однако примечательно, что даже треки 2015–2019 годов (в сумме около 28%) до сих пор сохраняют высокую популярность, что говорит о «долгоиграющем» характере некоторых хитов.

Анализ связи между стримами и включением в плейлисты

Здесь я хотел проверить, связаны ли напрямую количество плейлистов и количество стримов:

Создание диаграммы рассеяния plt.figure (figsize=(10, 8)) plt.scatter (df['Spotify Playlist Count'], df['Spotify Streams'] / 1e6, color=spotify_green, alpha=0.7, edgecolor='white', s=50)

Добавление линии тренда z = np.polyfit (df['Spotify Playlist Count'], df['Spotify Streams'] / 1e6, 1) p = np.poly1d (z) plt.plot (df['Spotify Playlist Count'], p (df['Spotify Playlist Count']), linestyle='--', color='white', linewidth=2)

Оформление графика plt.title ('Зависимость количества прослушиваний от количества плейлистов', fontsize=16, color='white') plt.xlabel ('Количество плейлистов', fontsize=14, color='white') plt.ylabel ('Количество прослушиваний (млн)', fontsize=14, color='white') plt.grid (True, alpha=0.3) plt.tight_layout () plt.show ()

Расчет коэффициента корреляции Пирсона correlation = df['Spotify Playlist Count'].corr (df['Spotify Streams']) print (f"Коэффициент корреляции между количеством плейлистов и прослушиваний: {correlation:.2f}»)

Original size 980x784

Результаты были потрясающими — коэффициент корреляции составил 0.8! Это очень сильная зависимость, которая подтверждает, что количество плейлистов действительно сильно влияет на популярность трека (или наоборот — популярные треки чаще добавляют в плейлисты).

Анализ распределения по рейтингу популярности

Чтобы понять, как распределяются треки по популярности, я создал гистограмму:

Гистограмма распределения по рейтингу популярности plt.figure (figsize=(12, 7)) plt.hist (df['Spotify Popularity'].dropna (), bins=20, color=spotify_green, edgecolor='black') plt.title ('Распределение треков по рейтингу популярности на Spotify', fontsize=16, color='white') plt.xlabel ('Рейтинг популярности', fontsize=14, color='white') plt.ylabel ('Количество треков', fontsize=14, color='white') plt.grid (True, alpha=0.3) plt.tight_layout () plt.show ()

Original size 1182x684

Гистограмма рейтингов популярности показывает очень интересное распределение с двумя пиками. Основная масса треков имеет высокий рейтинг в диапазоне 60-75, что ожидаемо для популярных композиций. Однако наблюдается также небольшой пик в области очень низких рейтингов (0-10). Это может означать, что среди стримящихся треков есть как «мейнстримные» хиты, так и «нишевые» композиции с преданной, но небольшой аудиторией.

Анализ доли «явных» (explicit) треков

Мне стало интересно, какая доля популярных треков имеет пометку «Explicit» (нецензурная лексика):

Анализ доли «явных» треков explicit_counts = df['Explicit Track'].value_counts ()

plt.figure (figsize=(8, 8)) plt.pie (explicit_counts, labels=['Clean', 'Explicit'], autopct='%1.1f%%', colors=['#1DB954', '#116e33'], wedgeprops={'edgecolor': 'black', 'linewidth': 1}) plt.title ('Доля треков с пометкой «Explicit» на Spotify', fontsize=16, color='white') plt.axis ('equal') plt.tight_layout () plt.show ()

Original size 784x784

Анализ по годам explicit_by_year = df.groupby ('Release Year')['Explicit Track'].mean () * 100

plt.figure (figsize=(8, 8)) plt.plot (explicit_by_year.index[-10:], explicit_by_year.values[-10:], marker='o', color=spotify_green, linewidth=3) plt.title ('Процент «Explicit» треков по годам выпуска', fontsize=16, color='white') plt.xlabel ('Год выпуска', fontsize=14, color='white') plt.ylabel ('Процент треков с пометкой «Explicit"', fontsize=14, color='white') plt.grid (True, alpha=0.3) plt.tight_layout () plt.show ()

Original size 784x784

Согласно диаграмме, 35,9% популярных треков имеют пометку «Explicit», что означает наличие ненормативной лексики или взрослого содержания. Это существенная доля, показывающая, что треки с «откровенным» содержанием составляют более трети популярной музыки. Особенно интересен график изменения доли «Explicit» треков по годам. Он показывает значительный рост с примерно 18% в 2015 году до пика около 42% в 2020 году. После этого наблюдается небольшое снижение, но показатель остается на уровне 35-36% в 2024 году. Это отражает общую тенденцию к большей свободе самовыражения в современной музыке и готовность аудитории принимать более откровенный контент.

Итоговый анализ данных Spotify 2024

Анализ данных Spotify 2024 года позволяет сделать несколько важных выводов о современной музыкальной индустрии:

- Существует явная «элита» исполнителей (The Weeknd, Bad Bunny, Drake, Taylor Swift), которые значительно опережают остальных по популярности. - Актуальность музыки имеет определенный срок — большинство популярных треков выпущены за последние 2-3 года, но при этом около 30% составляют композиции, выпущенные 5 и более лет назад. - Рейтинги популярности показывают, что существуют разные категории слушателей:  — Одни предпочитают мейнстримные хиты с высокими рейтингами.  — Другие выбирают нишевые композиции, не входящие в основные чарты. - Доля музыки с пометкой «Explicit» значительно выросла за последнее десятилетие. Это отражает изменение общественных норм и готовность аудитории воспринимать более откровенный контент. - Несмотря на доминирование новых треков в стримах, качественная музыка может оставаться популярной многие годы после релиза. Это говорит о том, что действительно хорошие композиции способны иметь долгую «жизнь» на стриминговых платформах.

Личный вывод

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

Оказалось, что на успех трека влияет множество взаимосвязанных факторов, включая:

Попадание в плейлисты Год выпуска Наличие нецензурной лексики Проект показал, что стриминговые платформы не только отражают вкусы слушателей, но и формируют музыкальные тренды, влияя на то, какие песни становятся хитами!

Блокнот с кодом и датасет:

Анализ данных о самых прослушиваемых песнях Spotify 2024
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