1. Introdução

O Spotify é um serviço de streaming de áudio. Com ele podemos escutar músicas, elaborar playlists, acompanhar podcasts, dentre muitos serviços. Nesse meu trabalho procuro descobrir certas relações entre determinadas variáveis musicais, e considero como algo de considerável importância, tendo em conta que são esses fatores que, aliados a outras questões, decidem se uma música será de um estilo ou de outro, será mais ou menos famosa, enfim, com esses dados temos parte da estrutura que sustenta o funcionamento da indústria musical, sendo, por isso, interessante a possibilidade de explorar mais a fundo essas relações.

2. Objetivo

Nesse trabalho final, tenho como objetivo analisar a relação de algumas variáveis específicas que selecionei com uma variável que será a principal: A Popularidade. Também tenho como objetivo analisar outras duas variáveis e suas correlações, no caso as variáveis “energia” e “barulho”. Além disso, será realizado um Boxplot e também uma tabela em que observo se há diferença na popularidade de músicas com muita batida em relação àquelas com pouca batida. Também exploramos a relação entre mais duas variáveis: Acústico(que mede o quão acústica a música é) e Energia, que mede a intensidade.

3. Metodologia

Inicialmente carreguei a base de dados para o R. Minha base de dados escolhida se encontra no site Kaggle. A base de dados do meu trabalho contém informações sobre as principais músicas dos anos 2020 e 2021, apresentando as variáveis musicais de cada uma delas. O ano em que essa base de dados foi lançada é 2021.

Dicionário de dados

O dicionário de dados é o seguinte:

library(readr)
spotify_dataset <- read_csv("C:/Users/mtbor/Downloads/Base_de_dados-master/spotify_dataset.csv")
## 
## -- Column specification --------------------------------------------------------
## cols(
##   .default = col_double(),
##   `Week of Highest Charting` = col_character(),
##   `Song Name` = col_character(),
##   Streams = col_number(),
##   Artist = col_character(),
##   `Song ID` = col_character(),
##   Genre = col_character(),
##   `Release Date` = col_character(),
##   `Weeks Charted` = col_character(),
##   Chord = col_character()
## )
## i Use `spec()` for the full column specifications.

As variáveis que selecionei da base de dados para utilizar em meu trabalho foram: A popularidade, a energia(que representa o quão intensa é a música), a “valence”(que se refere ao quão positiva é a música), “loudness”(barulho), danceabilidade(mede o quão boa a música é para dançar enquanto a escuta), e também utilizamos a variável “tempo”(que é medido através de BPM, ou seja, batidas por minuto).

Para os dados faltantes, utilizei o na.omit, para que dessa forma pudesse trabalhar corretamente com os códigos. Além disso, fiz uma alteração na variável “Tempo”, que é quantitativa, e a transformei em uma variável qualitativa, que chamei de “Batidas_por_minuto”. Fiz essa tranformação para explorar se existia alguma relação entre as músicas com muita ou pouca batida na forma como impactam a variável popularidade.

Método

Nesse trabalho, utlizei a Matriz de correlação, o Diagrama de Dispersão, o Boxplot, o Flextable e o Teste de Hipótese (Teste de Shapiro e Teste de Spearman).

4. Análise de Resultados e Discussão:

Matriz de Correlação

Através da Matriz de Correlação, procurei analisar a relação entre as variáveis “Danceabilidade”, “Energia”, “Barulho” e “Valência” com a variável “popularidade”.

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(corrplot)
## corrplot 0.90 loaded
library(rio)
library(flextable) 
library(reactable) 
library(RColorBrewer)

class(spotify_dataset$Popularity)
## [1] "numeric"
names(spotify_dataset)
##  [1] "Index"                     "Highest Charting Position"
##  [3] "Number of Times Charted"   "Week of Highest Charting" 
##  [5] "Song Name"                 "Streams"                  
##  [7] "Artist"                    "Artist Followers"         
##  [9] "Song ID"                   "Genre"                    
## [11] "Release Date"              "Weeks Charted"            
## [13] "Popularity"                "Danceability"             
## [15] "Energy"                    "Loudness"                 
## [17] "Speechiness"               "Acousticness"             
## [19] "Liveness"                  "Tempo"                    
## [21] "Duration (ms)"             "Valence"                  
## [23] "Chord"
MC2<-spotify_dataset %>% select(Popularity,Danceability,Energy,Loudness,Valence)

MC2 <- na.omit(MC2)
MC2 %>% cor() %>% corrplot.mixed()

Podemos observar que não há causalidade entre nenhuma dessas outras variáveis quando comparadas com a variável “popularidade”. Também é possível observar que há uma relação significativa entre as variáveis “Energia” e “Barulho”.

Diagrama de Dispersão

Para analisar de outra forma a causalidade percebida entre as variáveis “energia” e “barulho”, utilizaremos o diagrama de dispersão.

plot(spotify_dataset$Energy, spotify_dataset$Loudness,pch=19,col="darkblue",
     main="Gráfico Energia/Barulho")
abline(lsfit(spotify_dataset$Energy, spotify_dataset$Loudness),col="red")
## Warning in lsfit(spotify_dataset$Energy, spotify_dataset$Loudness): 11 missing
## values deleted

cor(spotify_dataset$Energy, spotify_dataset$Loudness)
## [1] NA

Através do Gráfico, pode-se observar que há uma linha crescente, configurando uma correlação positiva entre essas variáveis.

Boxplot

Agora vamos utilizar o Boxplot para analisar se existe alguma diferença entre músicas com muita batida por minuto e aquelas com pouca batida em relação ao impacto que elas podem ter na popularidade.

summary(spotify_dataset$Tempo)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   46.72   97.96  122.01  122.81  143.86  205.27      11
spotify_dataset$batidas_por_minuto <- ifelse(spotify_dataset$Tempo<122,"pouca batida","muita batida")

boxplot(spotify_dataset$Popularity~spotify_dataset$batidas_por_minuto,col=c("red","blue"))

Percebemos, através do Boxplot, que não há relação entre esses fatores.

Tabela com Flextable

Agora, para analisar essa ausência de causalidade desses fatores “muita batida” e “pouca batida” de outra maneira, vamos utilizar o Flextable e relacionar a variável quantitativa “popularidade” por grupos da variável qualitativa “batidas_por_minuto”.

ft2 <- spotify_dataset %>% select(batidas_por_minuto,Popularity) %>%
  group_by(batidas_por_minuto) %>%
  summarise(media=round(mean(Popularity),1),
            desvio.padrao=round(sd(Popularity),1),
            media2=mean(Popularity),
            desvio.padrao2=sd(Popularity),
            tamanho=n()) %>%
  data.frame() %>% flextable()
ft2
ft2 %>% theme_tron()

Novamente, precebemos que não há diferença relevante entre esses fatores, não existindo, portanto, diferença se a música possui mais ou menos batidas para que ela seja popular.

Teste de Hipótese

Já analisamos as variáveis “barulho” e “energia” de duas formas: através da matriz de correlação e através do diagrama de dispersão. Vamos agora utilizar o Teste de Hipótese para verificar se o resultado seguirá de acordo com os anteriores.

Para realizar o teste de correlação entre duas variáveis quantitativas, precisamos, inicialmente, verificar a normalidade da distribuição, para saber qual teste devemos utilizar.

Para verificar a normalidade da distribuição das variáveis, utilizamos o Teste de Shapiro Wilk.

Vamos estabelecer as hipóteses e o alpha.

Hipótese nula: Os dados são normalmente distribuídos Hipótese alternativa: Os dados não são normalmente distribuídos

alpha 0,05

Se pvalor menor que 0,05 rej H0 Se pvalor maior que 0,05 Não rej H0

shapiro.test(spotify_dataset$Energy)
## 
##  Shapiro-Wilk normality test
## 
## data:  spotify_dataset$Energy
## W = 0.98345, p-value = 2.464e-12
shapiro.test(spotify_dataset$Loudness)
## 
##  Shapiro-Wilk normality test
## 
## data:  spotify_dataset$Loudness
## W = 0.90974, p-value < 2.2e-16

Podemos observar que o p-valor de ambas as variáveis é menor que 0,05, o que significa que ambas rejeitam a hipótese nula e, portanto, não possuem distribuição normal.

Como as variáveis não possuem distribuição normal, utilizaremos o teste de correlação de Spearman.

Novamente estabelecemos as hipóteses.

Hipótese Nula: Não há associação monotônica entre as duas variáveis

Hipótese alternativa: Há associação monotônica entre as duas variáveis

Se pvalor for menor que 0,05, a hipótese nula é rejeitada.

cor.test(spotify_dataset$Energy,spotify_dataset$Loudness,method = "spearman")
## Warning in cor.test.default(spotify_dataset$Energy, spotify_dataset$Loudness, :
## Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  spotify_dataset$Energy and spotify_dataset$Loudness
## S = 186077315, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.6972672

Através do teste, descobrimos que o pvalor é menor que 0,05 e que, portanto, existe associação monotônica entre essas duas varáveis, o que vai de acordo com os resultados obtidos na Matriz de Correlação e no Diagrama de Dispersão.

Segunda Matriz de Correlação e segundo Diagrama de Dispersão

A última análise que realizaremos é entre as variáveis “Acústico” e “Energia”. A ideia é descobrir se há uma relação oposta entre essas variáveis. Para isso, utilizaremos a matriz de correlação e o diagrama de dispersão.

Primeiramente, vamos fazer através da Matriz de Correlação.

summary(spotify_dataset$Acousticness)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
## 0.000026 0.048500 0.161000 0.248695 0.388000 0.994000       11
class(spotify_dataset$Popularity)
## [1] "numeric"
names(spotify_dataset)
##  [1] "Index"                     "Highest Charting Position"
##  [3] "Number of Times Charted"   "Week of Highest Charting" 
##  [5] "Song Name"                 "Streams"                  
##  [7] "Artist"                    "Artist Followers"         
##  [9] "Song ID"                   "Genre"                    
## [11] "Release Date"              "Weeks Charted"            
## [13] "Popularity"                "Danceability"             
## [15] "Energy"                    "Loudness"                 
## [17] "Speechiness"               "Acousticness"             
## [19] "Liveness"                  "Tempo"                    
## [21] "Duration (ms)"             "Valence"                  
## [23] "Chord"                     "batidas_por_minuto"
MC2<-spotify_dataset %>% select(Acousticness,Energy)

MC2 <- na.omit(MC2)
MC2 %>% cor() %>% corrplot.mixed()

Podemos observar que há sim uma relação inversa entre essas duas variáveis, com a Matriz nos entregando o valor de -0.54.

Agora, para analisar de outra maneira, vamos utilizar o digrama de dispersão.

plot(spotify_dataset$Energy, spotify_dataset$Acousticness,pch=19,col="darkblue",
     main="Gráfico Energia/Acústica")
abline(lsfit(spotify_dataset$Energy, spotify_dataset$Acousticness),col="red")
## Warning in lsfit(spotify_dataset$Energy, spotify_dataset$Acousticness): 11
## missing values deleted

cor(spotify_dataset$Energy, spotify_dataset$Acousticness)
## [1] NA

Podemos observar, através do diagrama de dispersão, que essas variáveis se encontram em uma linha decrescente, o que configura uma correlação negativa. Ou seja, enquanto a variável “Energia” aumenta, a variável “barulho” diminui, e vice-versa.

5. Conclusão:

Sobre a relação das variáveis selecionadas com a popularidade, tive uma certa surpresa. Imaginava que haveria relação significativa entre todas essas variáveis com a popularidade. Porém, foi exatamente o contrário que ocorreu. Nenhuma das variáveis selecionadas apresentou correlação significativa com a variável principal “popularidade”. Não só isso, como também o coeficiente de correlação se mostrou baixíssimo.

Uma reflexão que pude extrair foi a de que existem inúmeros outros fatores que somos, às vezes, incapazes de pensar e que realmente interferem em tal variável. E que,muitas vezes, pensamos estar convictos sobre determinada relação e, ao analisar, vemos que esta relação não existe. Também pude perceber que a variável popularidade é consideravelmente complexa, não sendo facilmente identificáveis os fatores que de fato possuem impacto nela.

Por outro lado, A relação entre as variáveis “energia” e “barulho” e a relação entre as variáveis “Energia” e “Acústica” se mostraram de acordo com o que eu já havia previamente esperado delas. No caso em questão, a primeira correlação foi, de forma considerável, mais forte que a segunda. Finalizando a conclusão, posso afirmar também que uma das minhas pretensões, no caso a de descobrir como fazer uma música popular apenas avaliando algumas variáveis, se mostrou de certa forma ingênua.