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.
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.
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.
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.
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).
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”.
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.
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.
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()
ft2batidas_por_minuto | media | desvio.padrao | media2 | desvio.padrao2 | tamanho |
muita batida | 69.7 | 15.7 | 69.67097 | 15.68476 | 775 |
pouca batida | 70.5 | 16.0 | 70.51039 | 15.96210 | 770 |
11 |
ft2 %>% theme_tron()batidas_por_minuto | media | desvio.padrao | media2 | desvio.padrao2 | tamanho |
muita batida | 69.7 | 15.7 | 69.67097 | 15.68476 | 775 |
pouca batida | 70.5 | 16.0 | 70.51039 | 15.96210 | 770 |
11 |
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.
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.
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.
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.