Исходный размер 564x796

Анализ данных Spotify

PROTECT STATUS: not protected

Вводная часть

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

Причины выбора:

1.Популярность платформы: Spotify — одна из самых популярных стриминговых сервисов в мире. Анализ данных этой платформы позволяет получить представление о текущих музыкальных трендах и предпочтениях слушателей.

2.Разнообразие метрик: Данные Spotify включают множество метрик, таких как количество прослушиваний, популярность треков, характеристики аудио (темп, тональность, громкость и т. д.), что позволяет проводить комплексный анализ.

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

4.Интересные инсайты: Данные Spotify могут раскрыть неожиданные паттерны и связи между различными жанрами, исполнителями и слушателями, что делает проект более увлекательным и информативным.

блокнот с кодом https://colab.research.google.com/drive/1C705I3sghxMV5fAEMMkhtGFpPaXIyfl7#scrollTo=U5jqlOFQeeJ6

файл для анализа https://drive.google.com/file/d/1XRcWYuX8rvFrhLRSg1fTQRHZ9uRkJrlb/view?usp=sharing

Ссылка на используемые данные—https://www.kaggle.com/datasets/nelgiriyewithana/top-spotify-songs-2023?resource=download

Вид графиков—Столбчатые и многомерный (3d)

Основные этапы анализа:

1.Загрузка и предобработка данных. 2.Общий статистический анализ. 3.Визуализация ключевых параметров. 4.Анализ зависимости между характеристиками треков.

import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import plotly.express as px

pd.set_option («display.max_columns», None)

file_path = «spotify-2023.csv» df = pd.read_csv (file_path, encoding='latin1')

percentage_columns = [ «danceability_%», «valence_%», «energy_%», «acousticness_%», «instrumentalness_%», «liveness_%», «speechiness_%» ] df[percentage_columns] = df[percentage_columns].apply (pd.to_numeric, errors='coerce') df.head ()

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

  1. Импорт библиотек: Здесь импортирую необходимые библиотеки для работы с данными (pandas), визуализации (matplotlib, seaborn, plotly.express).

  2. Настройка отображения: Эта строка устанавливает опцию в pandas, чтобы отображать все столбцы DataFrame при выводе, что полезно для анализа данных.

  3. Чтение данных: Задаю путь к файлу CSV и загружаете его в DataFrame df с помощью функции pd.read_csv (). Параметр encoding='latin1' используется для корректного чтения файла с определенной кодировкой.

  1. Определение процентных столбцов: Создаю список percentage_columns, который содержит названия столбцов, представляющих процентные значения различных характеристик песен.

  2. Преобразование данных: Применяю метод apply () к указанным столбцам, чтобы преобразовать их в числовой формат. Параметр errors='coerce' означает, что если преобразование не удастся (например, если в ячейках будут некорректные данные), то соответствующие значения будут заменены на NaN.

(сама таблица представлена в файле блокнота)

Статистическое описание данных

numeric_columns = [ «released_year», «bpm», «danceability_%», «valence_%», «energy_%», «acousticness_%», «instrumentalness_%», «liveness_%», «speechiness_%» ]

colors = [»#FFADAD», «#FFD6A5», «#FDFFB6», «#CAFFBF», «#9BF6FF», «#A0C4FF», «#BDB2FF»]

background_color = «#2C2C2C» spine_color = «#E0E0E0» label_color = «#E0E0E0» figure_background = «#1E1E1E»

fig = plt.figure (figsize=(14, 9)) fig.patch.set_facecolor (figure_background)

for i, col in enumerate (numeric_columns): ax = plt.subplot (3, 3, i + 1) sns.histplot (df[col], kde=True, bins=30, color=colors[i % len (colors)])

ax.set_facecolor (background_color)
ax.spines[«top»].set_color (spine_color)
ax.spines[«right»].set_color (spine_color)
ax.set_xlabel (col, color=label_color)
ax.set_ylabel (col, color=label_color)

ax.spines[«left»].set_color (spine_color)
ax.spines[«bottom»].set_color (spine_color)
ax.set_title (f"Распределение {col}», color=label_color)
ax.tick_params (axis='x', colors=label_color)
ax.tick_params (axis='y', colors=label_color)

plt.tight_layout () plt.show ()

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

Исходный размер 1388x889

На графиках можно заметить следующее:

-Год выпуска: большинство треков выпущены после 2015 года. -BPM: распределение почти равномерное, с пиками около 100-140 BPM -Танцевальность: большая часть треков имеет высокую танцевальность (60–80%). -Энергия: большинство треков энергичные (50–80%). -Инструментальность: почти все треки вокальные. -Акустичность: есть как полностью электронные треки, так и с высокой акустичностью. -Speechiness: большинство треков содержат мало речевых элементов.

Корреляция аудиохарактеристик

import matplotlib.pyplot as plt import seaborn as sns

background_color = «#2C2C2C» spine_color = «#E0E0E0» label_color = «#E0E0E0» figure_background = «#1E1E1E»

cmap_colors = [»#FFADAD», «#FFD6A5», «#FDFFB6», «#CAFFBF», «#9BF6FF», «#A0C4FF», «#BDB2FF»]

fig, ax = plt.subplots (figsize=(10, 8)) fig.patch.set_facecolor (figure_background) ax.set_facecolor (background_color)

heatmap = sns.heatmap ( df[percentage_columns].corr (), annot=True, cmap=cmap_colors, fmt=».2f», linewidths=0.5,

)

plt.title («Корреляция аудиохарактеристик», fontsize=14, color=label_color)

plt.xticks (color=label_color, rotation=45, ha="right») plt.yticks (color=label_color, rotation=0)

cbar = heatmap.collections[0].colorbar cbar.ax.yaxis.label.set_color (label_color) cbar.ax.tick_params (colors=label_color)

plt.show ()

Исходный размер 902x778

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

Выводы из корреляционного анализа:

-BPM слабо коррелирует с другими параметрами, что означает, что темп трека не сильно влияет на его танцевальность или энергию. -Энергия и танцевальность имеют положительную корреляцию (0.54), что ожидаемо: чем энергичнее трек, тем выше его танцевальность. -Акустичность и энергия имеют сильную отрицательную корреляцию (-0.73), что логично — акустические треки часто менее энергичные. -Инструментальность и танцевальность почти не связаны, что подтверждает наличие танцевальной инструментальной музыки. -Speechiness (наличие речи в треке) не сильно зависит от других параметров, но слабо коррелирует с акустичностью.

Средняя танцевальность по годам

background_color = «#2C2C2C» spine_color = «#E0E0E0» label_color = «#E0E0E0» figure_background = «#1E1E1E»

bar_colors = [»#FFADAD», «#FFD6A5», «#FDFFB6», «#CAFFBF», «#9BF6FF», «#A0C4FF», «#BDB2FF»]

yearly_danceability = df.groupby («released_year»)[«danceability_%»].mean ()

fig, ax = plt.subplots (figsize=(10, 5)) fig.patch.set_facecolor (figure_background) ax.set_facecolor (background_color)

sns.barplot ( x=yearly_danceability.index, y=yearly_danceability.values, palette=bar_colors, ax=ax )

ax.set_title («Средний процент танцевальности по годам», fontsize=14, color=label_color) ax.set_xlabel («Год выпуска», fontsize=12, color=label_color) ax.set_ylabel («Танцевальность (%)», fontsize=12, color=label_color)

ax.spines[«top»].set_color (spine_color) ax.spines[«right»].set_color (spine_color) ax.spines[«left»].set_color (spine_color) ax.spines[«bottom»].set_color (spine_color) ax.tick_params (axis='x', colors=label_color, rotation=45) ax.tick_params (axis='y', colors=label_color)

plt.show ()

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

Исходный размер 855x496

Средняя энергичность по годам

background_color = «#2C2C2C» spine_color = «#E0E0E0» label_color = «#E0E0E0» figure_background = «#1E1E1E» line_color = «#FF5733» marker_color = «#FFD700»

yearly_energy = df.groupby («released_year»)[«energy_%»].mean ()

fig, ax = plt.subplots (figsize=(11, 5)) fig.patch.set_facecolor (figure_background) ax.set_facecolor (background_color)

sns.lineplot ( x=yearly_energy.index, y=yearly_energy.values, marker="o», markersize=8, markerfacecolor=marker_color, markeredgecolor=spine_color, color=line_color, linewidth=2, ax=ax )

ax.set_title («Средняя энергичность треков по годам», fontsize=14, color=label_color) ax.set_xlabel («Год выпуска», fontsize=12, color=label_color) ax.set_ylabel («Энергичность (%)», fontsize=12, color=label_color)

ax.spines[«top»].set_color (spine_color) ax.spines[«right»].set_color (spine_color) ax.spines[«left»].set_color (spine_color) ax.spines[«bottom»].set_color (spine_color) ax.tick_params (axis='x', colors=label_color, rotation=45) ax.tick_params (axis='y', colors=label_color)

plt.show ()

Исходный размер 923x496

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

Анализ данных Spotify
Проект создан 02.04.2025
Мы используем файлы cookies для улучшения работы сайта и большего удобства его использования. Более подробную информац...
Показать больше