Em um cenário onde plataformas de streaming como o Spotify dominam o consumo musical global, entender os fatores que influenciam a popularidade das faixas é essencial para profissionais da indústria fonográfica, pesquisadores e qualquer pessoa envolvida com produção, distribuição ou curadoria musical. O catálogo contém milhões de músicas competindo por espaço, e pequenas diferenças em características como gênero, duração, conteúdo explícito e artista podem influenciar o desempenho de cada faixa.
Assim, o problema central desta análise é: quais características presentes nos metadados das faixas estão associadas a níveis mais altos de popularidade no Spotify? Interessar-se por esse problema é fundamental para compreender o comportamento dos usuários, o funcionamento do mercado musical contemporâneo e para auxiliar estratégias de lançamento e posicionamento de músicas dentro da plataforma.
A análise utiliza o dataset Spotify Dataset disponível no Kaggle, que reúne milhares de faixas com atributos como artista, gênero, duração, popularidade e marcação de conteúdo explícito. Para responder à questão central, adotou-se uma metodologia composta pelas seguintes etapas: limpeza e padronização da base de dados, transformação das variáveis, incluindo conversão da duração para minutos, e expansão da coluna de artistas para permitir análises por indivíduo, análise exploratória de dados com histogramas, diagramas de dispersão, boxplots e gráficos de barras e comparações entre grupos como gêneros musicais, artistas mais presentes e diferenças de popularidade entre músicas explícitas e não explícitas.
Essa abordagem permite extrair insights relevantes de maneira estruturada e interpretável, sem exigir modelos estatísticos complexos.
Dado que o dataset contém informações limitadas às características das faixas, sem dados temporais, informações de marketing ou histórico de reproduções, a abordagem mais apropriada é uma análise exploratória de dados. A EDA permite detectar padrões gerais na popularidade, comparar grupos como gêneros e artistas, visualizar relações importantes como duração e popularidade e identificar características associadas a desempenhos mais altos.
Essa técnica é transparente, visual e eficaz para responder perguntas iniciais sobre o comportamento das variáveis. Em vez de construir modelos preditivos que dependeriam de dados adicionais, optou-se por explorar o que os metadados já oferecem, garantindo uma leitura clara e objetiva dos padrões presentes no dataset.
Os resultados desta análise têm aplicações práticas para diferentes atores da indústria musical. Artistas e produtores podem entender quais características aumentam o potencial de engajamento de suas faixas, gravadoras e equipes de marketing podem usar tendências de gênero, duração e comportamento dos artistas mais populares para planejar estratégias mais eficazes, curadores de playlists podem identificar padrões que favorecem maior aceitação entre os ouvintes e pesquisadores obtêm um recorte claro do comportamento das faixas dentro da plataforma.
Ao transformar metadados do Spotify em conhecimento aplicado, a análise oferece uma visão estratégica sobre o ecossistema musical digital e sobre os fatores que contribuem para o sucesso das músicas no streaming.
library(tidyverse)
library(janitor)
library(kableExtra)
library(rpart)
library(rpart.plot)
library(caret)tidyverse – utilizado para leitura, manipulação, transformação e visualização dos dados (inclui readr, dplyr, tidyr, ggplot2).
janitor – usado para limpeza e organização da base, especialmente para padronizar nomes de colunas com clean_names().
kableExtra – utilizado para melhorar a apresentação de tabelas no relatório em HTML.
rpart – empregado na construção do modelo de árvore de decisão para explicar ou prever a popularidade.
rpart.plot – utilizado para criar visualizações claras da árvore de decisão gerada pelo rpart.
caret – usado para dividir o conjunto de dados em treino e teste e auxiliar boas práticas de modelagem.
## # A tibble: 6,300 × 8
## id name genre artists album popularity duration_ms explicit
## <chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <lgl>
## 1 7kr3xZk4yb3YSZ4VFt… Acou… acou… Billy … 1975 58 172199 FALSE
## 2 1kJygfS4eoVziBBI93… Acou… acou… Billy … A Fe… 57 172202 FALSE
## 3 6lynns69p4zTCRxmmi… Here… acou… Molly … Here… 42 144786 FALSE
## 4 1RC9slv335IfLce5vt… Acou… acou… The Go… Dizz… 46 116573 FALSE
## 5 5o9L8xBuILoVjLECSB… My L… acou… Guus D… My L… 33 133922 FALSE
## 6 742ZnC1OgUGIScdzXE… Acou… acou… Ling t… #4 14 238146 FALSE
## 7 3vpJdk93GzerZnlou6… Beau… acou… Benson… Dayd… 0 201248 FALSE
## 8 42qGA2116mkpSAaxzQ… Land… acou… Guus D… Land… 29 199222 FALSE
## 9 0OHHcoyrWnkVukc911… Acou… acou… Sonido… Agua 15 129250 FALSE
## 10 64zEnxASl3epPAIH4M… Acou… acou… Healin… 528:… 45 118331 FALSE
## # ℹ 6,290 more rows
Os dados utilizados nesta análise provêm do dataset “Spotify dataset” do Kaggle, que contém milhares de faixas disponibilizadas na plataforma Spotify. Cada registro representa uma música e inclui metadados como artista(s), gênero, duração, popularidade e presença de conteúdo explícito. Antes de realizar a análise exploratória e a modelagem, foi necessária uma etapa detalhada de preparação e padronização para garantir consistência, remover ruídos e facilitar a interpretação das variáveis. Link para o dataset: https://www.kaggle.com/datasets/ambaliyagati/spotify-dataset-for-playing-around-with-sql
A primeira etapa consistiu na normalização dos nomes das colunas utilizando clean_names(), garantindo um padrão uniforme e compatível com boas práticas de manipulação no tidyverse. Também foram removidos registros duplicados com base no identificador único id, preservando apenas entradas válidas.
Em seguida, a duração das faixas, originalmente expressa em milissegundos, foi convertida para minutos, unidade mais natural para análises musicais. A variável explicit, responsável por indicar se a faixa contém conteúdo explícito, apresentava múltiplas formas de codificação (TRUE/False, “1”/“0”, variações de maiúsculas). Para garantir consistência, essas representações foram unificadas em um fator booleano.
Algumas variáveis, como artists, incluem múltiplos valores em uma mesma célula (por exemplo, músicas com vários artistas). Para permitir análises mais profundas, como contagens, rankings ou identificação de padrões colaborativos, foi criada uma versão expandida da base onde cada artista ocupa uma linha separada. Isso foi feito por meio de separate_rows(), garantindo flexibilidade para análises futuras.
Após essas etapas, a base está limpa, coerente e pronta para fornecer insights confiáveis nas visualizações e análises apresentadas nas seções seguintes.
df <- df_raw %>%
janitor::clean_names() %>%
distinct(id, .keep_all = TRUE) %>%
mutate(
duration_min = duration_ms / 60000,
explicit = case_when(
explicit %in% c('True', 'TRUE', 'true', '1', 1, TRUE) ~ TRUE,
explicit %in% c('False', 'FALSE', 'false', '0', 0, FALSE) ~ FALSE,
TRUE ~ as.logical(explicit)
),
explicit = as.factor(if_else(is.na(explicit), FALSE, explicit))
)
# Verificações simples
glimpse(df)## Rows: 6,187
## Columns: 9
## $ id <chr> "7kr3xZk4yb3YSZ4VFtg2Qt", "1kJygfS4eoVziBBI93MSYp", "6lyn…
## $ name <chr> "Acoustic", "Acoustic", "Here Comes the Sun - Acoustic", …
## $ genre <chr> "acoustic", "acoustic", "acoustic", "acoustic", "acoustic…
## $ artists <chr> "Billy Raffoul", "Billy Raffoul", "Molly Hocking, Bailey …
## $ album <chr> "1975", "A Few More Hours at YYZ", "Here Comes the Sun (A…
## $ popularity <dbl> 58, 57, 42, 46, 33, 14, 0, 29, 15, 45, 39, 8, 0, 25, 5, 7…
## $ duration_ms <dbl> 172199, 172202, 144786, 116573, 133922, 238146, 201248, 1…
## $ explicit <fct> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, F…
## $ duration_min <dbl> 2.869983, 2.870033, 2.413100, 1.942883, 2.232033, 3.96910…
# Tratar gênero e artistas (separar múltiplos valores)
if('artists' %in% names(df)){
df <- df %>% mutate(artists = as.character(artists))
}
# Criar uma versão com artistas separados (uma linha por artista)
if('artists' %in% names(df)){
df_artists <- df %>%
separate_rows(artists, sep = ';|,') %>%
mutate(artists = str_squish(artists))
}summary_table <- tibble(
column = names(df),
type = map_chr(df, ~ class(.x)[1]),
n_unique = map_int(df, ~ n_distinct(.x)),
n_na = map_int(df, ~ sum(is.na(.x)))
)
summary_table %>% knitr::kable() %>% kable_styling(full_width = FALSE)| column | type | n_unique | n_na |
|---|---|---|---|
| id | character | 6187 | 0 |
| name | character | 4518 | 0 |
| genre | character | 126 | 0 |
| artists | character | 4651 | 0 |
| album | character | 4949 | 0 |
| popularity | numeric | 90 | 0 |
| duration_ms | numeric | 5566 | 0 |
| explicit | factor | 2 | 0 |
| duration_min | numeric | 5566 | 0 |
if('popularity' %in% names(df)){
df %>%
ggplot(aes(popularity)) +
geom_histogram(
bins = 30,
fill = "steelblue",
color = "white",
alpha = 0.9
) +
theme_minimal() +
theme(
plot.title = element_text(size = 14, face = "bold"),
axis.text = element_text(size = 10),
axis.title = element_text(size = 11)
) +
labs(
title = "Distribuição da Popularidade das Faixas",
x = "Popularidade",
y = "Quantidade de faixas"
)
}A distribuição da popularidade mostra um comportamento assimétrico, com a maior parte das faixas acumulada entre valores baixos e médios. Isso indica que músicas altamente populares são minoria no catálogo analisado, enquanto a grande massa apresenta desempenho modesto em termos de alcance e engajamento. Essa observação reflete a dinâmica comum do mercado musical, no qual poucos “hits” concentram a maior parte da atenção dos ouvintes, enquanto a maioria das músicas permanece em níveis de exposição mais discretos.
if('genre' %in% names(df)){
df %>%
filter(!is.na(genre)) %>%
group_by(genre) %>%
summarize(mean_pop = mean(popularity, na.rm = TRUE), n = n()) %>%
filter(n >= 50) %>%
arrange(mean_pop) %>%
ggplot(aes(x = reorder(genre, mean_pop), y = mean_pop)) +
geom_col(fill = "steelblue") +
coord_flip() +
theme_minimal() +
theme(
axis.text.y = element_text(size = 6),
plot.title = element_text(size = 16, face = "bold")
) +
labs(
title = "Popularidade média por gênero (n ≥ 50)",
x = "Gênero",
y = "Popularidade média"
)
}A comparação da popularidade média entre gêneros revela diferenças significativas no desempenho das categorias musicais. Alguns gêneros apresentam maior aderência junto ao público, como Country e Soul, possivelmente por refletirem tendências atuais de consumo, estilos amplamente difundidos ou forte presença em playlists editoriais. Já gêneros com menor popularidade média, como Indie e MPB, podem ser influenciados por nichos menores, menor apelo comercial ou menor volume de divulgação. Assim, o gráfico ajuda a identificar quais estilos musicais tendem a performar melhor no ambiente competitivo do Spotify.
if(all(c('duration_min','popularity') %in% names(df))){
df %>%
filter(duration_min <= 10) %>%
ggplot(aes(duration_min, popularity)) +
geom_point(alpha = 0.2, size = 1) +
geom_smooth(method = 'loess', se = TRUE, color = "blue") +
labs(
title = 'Duração (min) vs Popularidade (faixas < 10 min)',
x = 'Duração (min)',
y = 'Popularidade'
) +
theme_minimal()
}A relação entre duração e popularidade indica que músicas muito curtas ou muito longas tendem a apresentar desempenho inferior, enquanto faixas entre aproximadamente 2 e 4 minutos concentram as maiores popularidades. Esse comportamento segue um padrão típico do mercado fonográfico: faixas dentro desse intervalo tendem a se alinhar melhor às preferências de consumo, à estrutura de rádio, ao formato de playlists e ao engajamento rápido dos ouvintes. Em outras palavras, existe um “ponto ideal” de duração que maximiza o potencial de alcance de uma música.
if('explicit' %in% names(df)){
df %>%
ggplot(aes(explicit, popularity)) +
geom_boxplot() +
labs(title = 'Popularidade por conteúdo explícito', x = 'Explícito', y = 'Popularidade')
}A comparação entre músicas explícitas e não explícitas mostra que, embora exista variação nos dois grupos, não há um impacto tão extremo decorrente da presença de conteúdo explícito. Em alguns casos, músicas explícitas podem alcançar níveis elevados de popularidade, especialmente em gêneros como rap ou pop urbano, onde esse tipo de conteúdo é mais comum e aceito pelo público. Já músicas não explícitas tendem a apresentar maior consistência e menor variabilidade. Assim, o gráfico sugere que o rótulo “explicit” por si só não define o sucesso de uma faixa, mas pode influenciar dependendo do estilo musical e do público alvo.
A análise realizada permitiu esclarecer como diferentes características das faixas do Spotify se relacionam com seus níveis de popularidade. Embora o dataset contenha apenas metadados básicos, foi possível identificar padrões consistentes que ajudam a explicar por que algumas músicas alcançam maior alcance do que outras. Assim, o problema inicialmente proposto, compreender os elementos que influenciam a popularidade das faixas, foi respondido por meio de evidências extraídas diretamente dos dados.
O tratamento dos dados, seguido de análises descritivas e visuais, permitiu extrair informações relevantes sobre a estrutura do catálogo musical. A etapa de limpeza garantiu consistência das variáveis, enquanto a análise exploratória revelou tendências e diferenças entre grupos, como gêneros, durações, artistas mais recorrentes e faixas explícitas e não explícitas. Essa metodologia, que combinou sumarização com gráficos interpretáveis, foi suficiente para revelar padrões claros dentro das limitações do dataset.
Os resultados mostraram que a popularidade não é distribuída de forma homogênea e que poucos artistas e gêneros concentram a maior parte da atenção dos ouvintes. A distribuição geral da popularidade evidenciou predominância de valores baixos, sugerindo que a maioria das faixas atinge alcance moderado. A análise por gênero destacou estilos que costumam performar melhor, enquanto o estudo da duração indicou que faixas dentro de intervalos intermediários são mais bem recebidas. A comparação entre músicas explícitas e não explícitas mostrou que o rótulo não determina o sucesso, embora apresente padrões distintos de variabilidade. Em conjunto, esses achados revelam que a popularidade resulta de uma combinação de fatores musicais e estruturais.
Os resultados podem auxiliar diferentes atores da indústria. Artistas e produtores podem ajustar suas estratégias criativas levando em conta características associadas a melhor desempenho. Equipes de marketing podem orientar lançamentos com base nos padrões observados, enquanto curadores de playlists podem considerar essas tendências ao selecionar músicas que maximizem engajamento. Para quem analisa dados musicais, este estudo fornece uma visão do comportamento do catálogo e pode servir como referência para investigações mais específicas.
A análise é limitada pela natureza do dataset, que não inclui informações temporais, histórico de playlists ou dados de marketing. Esses elementos poderiam oferecer uma compreensão mais profunda das causas da popularidade. Além disso, a presença desigual de gêneros e artistas pode influenciar as médias obtidas. Futuras extensões poderiam incorporar séries temporais, dados externos, técnicas de modelagem mais robustas e enriquecimento da base com novas variáveis, ampliando significativamente o poder explicativo da análise.