Definição de artistas para pesquisa

Pesquisa = c("Tiago Iorc",
             "Tulipa Ruiz",
             "Zé Ramalho",
             "Lenine",
             "Marisa Monte",
             "Alceu Valença",
             "Los Hermanos",
             "Oswaldo Montenegro",
             "Tiê",
             "Falamansa")

#Artista <- get_artists("falamansa")
Pesquisa = data.frame(Pesquisa)
colnames(Pesquisa) <- c("artista")
Pesquisa$ordem = row.names(Pesquisa)
Pesquisa_base = Pesquisa

Pesquisa API Spotify

Algoritmo de Extração: API Spotity

library(dplyr)
x <- 1:(NROW(Pesquisa$artista)-1)
artista_pesquisa = subset(filter(Pesquisa, 
                                 ordem == first(Pesquisa$ordem)),
                          select = c(artista))
Artista <- get_artists(artista_pesquisa$artista)
Artista = merge(Artista, subset(Pesquisa_base, select = c(artista,ordem)), 
                by.x="artist_name", by.y="artista")
albums = merge(get_albums(Artista$artist_uri[1]),Artista)
Indicadores_Musicais = merge(get_album_tracks(albums), albums,
               by.x="album_name", by.y="album_name")
Indicadores_Musicais = merge(get_track_audio_features(Indicadores_Musicais), Indicadores_Musicais,
                             by.x="track_uri", by.y="track_uri")
Indicadores_Musicais = merge(get_track_popularity(Indicadores_Musicais),Indicadores_Musicais,
                             by.x="track_uri", by.y="track_uri")
Indicadores_Musicais = merge(get_album_popularity(albums),Indicadores_Musicais,
                             by.x="album_uri", by.y="album_uri")

Artista_1 = Artista
Indicadores_Musicais_final_1 = Indicadores_Musicais
Pesquisa = filter(Pesquisa, artista != artista_pesquisa$artista)


for (val in x) {
  artista_pesquisa = subset(filter(Pesquisa, 
                                   ordem == first(Pesquisa$ordem)),
                            select = c(artista))
  Artista <- get_artists(artista_pesquisa$artista)
  Artista = merge(Artista, subset(Pesquisa_base, select = c(artista,ordem)), 
                  by.x="artist_name", by.y="artista")
  albums = merge(get_albums(Artista$artist_uri[1]),Artista)
  Indicadores_Musicais = merge(get_album_tracks(albums), albums,
                               by.x="album_name", by.y="album_name")
  Indicadores_Musicais = merge(get_track_audio_features(Indicadores_Musicais), Indicadores_Musicais,
                               by.x="track_uri", by.y="track_uri")
  Indicadores_Musicais = merge(get_track_popularity(Indicadores_Musicais),Indicadores_Musicais,
                               by.x="track_uri", by.y="track_uri")
  Indicadores_Musicais = merge(get_album_popularity(albums),Indicadores_Musicais,
                               by.x="album_uri", by.y="album_uri")
  
  Artista_1 = rbind(Artista,Artista_1 )
  Indicadores_Musicais_final_1 = rbind(Indicadores_Musicais_final_1,Indicadores_Musicais)
  Pesquisa = filter(Pesquisa, artista != artista_pesquisa$artista)
  
  
  {
    next
  }
  
}

Classificação da Tonalidade Musical

Indicadores_Musicais_final_1$grau = ifelse(Indicadores_Musicais_final_1$key_mode=="A minor",-6.0,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="A# minor",-6.5,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="B minor",-7.0,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="C minor",-1.0,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="C# minor",-1.5,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="D minor",-2.0,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="D# minor",-2.5,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="E minor",-3.0,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="F minor",-4.0,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="F# minor",-4.5,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="G minor",-5.0,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="G# minor",-5.5,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="A major",6.0,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="A# major",6.5,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="B major",7.0,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="C major",1.0,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="C# major",1.5,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="D major",2.0,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="D# major",2.5,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="E major",3.0,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="F major",4.0,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="F# major",4.5,
                                    ifelse(Indicadores_Musicais_final_1$key_mode=="G major",5.0,5.5)))))))))))))))))))))))

Análise de Rede

library(reshape)
Analise_Rede = subset(Indicadores_Musicais_final_1, select = c(artist_name,key_mode))
Analise_Rede$quant = 1 
Analise_Rede = cast(Analise_Rede,key_mode~artist_name)

gAnalise_Rede <- Analise_Rede[,2:NCOL(Analise_Rede)]
rownames(gAnalise_Rede) <- Analise_Rede[,1]

library(visNetwork)
library(network)
library(sna)
library(rgl)
gplot(gAnalise_Rede,gmode="twomode",displaylabels = TRUE,
      edge.col="gray",label.cex = 0.5,usearrows=FALSE,
      vertex.cex = closeness(gAnalise_Rede,gmode="twomode")*1,
      vertex.label.dist=20,vertex.size=20)

Cluster Analise

grupo_artista = summarise(group_by(Indicadores_Musicais_final_1, artist_name),
                  valence= mean(valence),
                  grau= mean(grau),
                  danceability= mean(danceability),
                  energia = mean(energy),
                  acustica = mean(acousticness),
                  instrumental = mean(instrumentalness),
                  speechiness = mean(speechiness))                                                                                                                        
grupo_artista_cluster = subset(grupo_artista, select = -c(artist_name))
row.names(grupo_artista_cluster) <- grupo_artista$artist_name
numero_cluster = round(max(as.numeric(Pesquisa_base$ordem))/3, digits = 0)
grupo_artista_cluster_km <- kmeans(grupo_artista_cluster, numero_cluster)

grupo_artista
## # A tibble: 10 x 8
##    artist_name   valence   grau danceability energia acustica instrumental
##    <chr>           <dbl>  <dbl>        <dbl>   <dbl>    <dbl>        <dbl>
##  1 Alceu Valença   0.576  0.989        0.543   0.625    0.440      0.0211 
##  2 Falamansa       0.784  2.30         0.576   0.664    0.329      0.00196
##  3 Lenine          0.522 -0.336        0.589   0.584    0.384      0.137  
##  4 Los Hermanos    0.584  0.130        0.528   0.646    0.288      0.107  
##  5 Marisa Monte    0.472  1.65         0.537   0.506    0.607      0.0554 
##  6 Oswaldo Mont~   0.370  2.06         0.485   0.354    0.679      0.0270 
##  7 Tiago Iorc      0.412  2            0.591   0.442    0.477      0.0825 
##  8 Tiê             0.556  2.45         0.612   0.412    0.637      0.0203 
##  9 Tulipa Ruiz     0.606  0.744        0.720   0.515    0.474      0.0443 
## 10 Zé Ramalho      0.583  0.650        0.584   0.591    0.372      0.0445 
## # ... with 1 more variable: speechiness <dbl>

Analise de Agrupamento

library(cluster)
clusplot(grupo_artista_cluster, 
         grupo_artista_cluster_km$cluster, 
         main='2D representation of the Cluster solution',
         color=TRUE, shade=TRUE,
         labels=2, lines=0)

Dendrograma

d <- dist(grupo_artista_cluster, method = "euclidean") 
fit <- hclust(d, method="ward") 
plot(fit) 
groups <- cutree(fit, k=numero_cluster) 
rect.hclust(fit, k=numero_cluster, border="red")

Base para correlação linear

#Correlação para entre variáveis e propriedades musicais
base_correlacao = subset(Indicadores_Musicais_final_1, 
                         select = c(album_popularity,
                                    album_uri,
                                    danceability,
                                    energy,
                                    speechiness,
                                    grau,
                                    liveness,
                                    valence,
                                    acousticness,
                                    loudness,
                                    instrumentalness,
                                    base_album_name,
                                    artist_name))

names(base_correlacao)[names(base_correlacao) == 'album_popularity'] <- 'Popularidade'
names(base_correlacao)[names(base_correlacao) == 'danceability'] <- 'Danca'
names(base_correlacao)[names(base_correlacao) == 'energy'] <- 'Energia'
names(base_correlacao)[names(base_correlacao) == 'speechiness'] <- 'Voz'
names(base_correlacao)[names(base_correlacao) == 'grau'] <- 'Tom'
names(base_correlacao)[names(base_correlacao) == 'liveness'] <- 'Alegria'
names(base_correlacao)[names(base_correlacao) == 'valence'] <- 'Valencia'
names(base_correlacao)[names(base_correlacao) == 'acousticness'] <- 'Acustica'
names(base_correlacao)[names(base_correlacao) == 'loudness'] <- 'Sonoridade'
names(base_correlacao)[names(base_correlacao) == 'instrumentalness'] <- 'Instrumental'
names(base_correlacao)[names(base_correlacao) == 'base_album_name'] <- 'album_name'

base_correlacao = summarise(group_by(base_correlacao, album_uri,Popularidade ,album_name,artist_name),
                            Danca = mean(Danca),
                            Energia = mean(Energia),
                            Voz = mean(Voz),
                            Tom = mean(Tom),
                            Alegria = mean(Alegria),
                            Valencia = mean(Valencia),
                            Acustica = mean(Acustica),
                            Sonoridade = mean(Sonoridade),
                            Instrumental = mean(Instrumental))

Estudo de Correlação - Exemplo 1

library(PerformanceAnalytics) 
chart.Correlation(subset(base_correlacao, select = -c(album_uri,album_name,artist_name)), 
                  histogram=TRUE, pch=19)

Estudo de Correlação - Exemplo 2

library(corrplot)
corrplot(round(cor(subset(base_correlacao, select = -c(album_uri,album_name,artist_name))),2), method="number")

BoxPlot

library(plotly)
library(ggplot2)
p_box = qplot(x= artist_name, 
      y= Energia , 
      data=base_correlacao , 
      geom=c("boxplot","jitter") , 
      fill=artist_name)+
        theme(
      axis.text.x=element_blank(),
      legend.text=element_text(size=7),
      plot.title = element_text(size=12.0))+ 
                      labs(x = "Artistas")+ labs(fill="")+ 
                      ggtitle("Estilos Musicais - Nivel de Energia")+ylab("% de Energia")

p_box = ggplotly(p_box)
p_box

Classificação de Segmentos na base Spotify

library(dplyr)
segmentacao = data.frame(groups)
segmentacao = add_rownames(segmentacao, "artist_name")
Indicadores_Musicais_final_1 = merge(Indicadores_Musicais_final_1,
                                     segmentacao,
                                     by.x="artist_name", by.y="artist_name")

Indicadores_Musicais_final_1$quant = 1
Indicadores_Musicais_final_1$groups = paste("Grupo = ",Indicadores_Musicais_final_1$groups)

Histograma de popularidade das faixas musicais por Cluster

dados_po <- ggplot(Indicadores_Musicais_final_1, aes(x = track_popularity, fill = groups)) + 
  geom_density(alpha = 0.2)
dados_po <- ggplotly(dados_po )
dados_po