
Концепция

Для своего проекта по анализу данных я выбрал датасет «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 ()
Глядя на график топ-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 ()
Круговая диаграмма демонстрирует, что больше всего популярных треков (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}»)
Результаты были потрясающими — коэффициент корреляции составил 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 ()
Гистограмма рейтингов популярности показывает очень интересное распределение с двумя пиками. Основная масса треков имеет высокий рейтинг в диапазоне 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 ()
Анализ по годам 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 ()
Согласно диаграмме, 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» значительно выросла за последнее десятилетие. Это отражает изменение общественных норм и готовность аудитории воспринимать более откровенный контент. - Несмотря на доминирование новых треков в стримах, качественная музыка может оставаться популярной многие годы после релиза. Это говорит о том, что действительно хорошие композиции способны иметь долгую «жизнь» на стриминговых платформах.
Личный вывод
Этот проект позволил мне не только научиться анализировать данные и создавать интересные визуализации, но и лучше понять, какие факторы влияют на популярность музыки в эпоху стриминга.
Оказалось, что на успех трека влияет множество взаимосвязанных факторов, включая:
Попадание в плейлисты Год выпуска Наличие нецензурной лексики Проект показал, что стриминговые платформы не только отражают вкусы слушателей, но и формируют музыкальные тренды, влияя на то, какие песни становятся хитами!
Блокнот с кодом и датасет: