1 Introduction

1.1 Data Introduction

Data-data penggunaan spotify memiliki potensi yang besar untuk dijadikan sebagai bahan pertimbangan dalam menganalisa pasar. Baik genre lagu maupun penyanyi yang sedang diminati oleh pendengar spotify. Kali ini, akan dilakukan analisis mengenai data-data spotify untuk contoh penggunaan data visualisasi.

  1. Mengetahui jumlah genre musik yang paling banyak.
  2. Mengetahui rating genre musik yang paling banyak.

Data diambil melalui link berikut : https://www.kaggle.com/datasets/lucascantu/top-5000-albums-of-all-time-spotify-features

1.2 Data visualisasi

Data visualization atau visualisasi data adalah representasi grafis dari informasi dan data. Dengan kata lain, data visualization mengubah kumpulan data besar dan kecil menjadi visual, sehingga lebih mudah dipahami dan diproses oleh otak manusia.

Data visualization adalah rahasia untuk membuat data mudah dicerna. Ada lima alasan mengapa memvisualkan data sangat penting untuk menjadikan data lebih gampang dipahami dan menarik:

  1. Data visualization menceritakan kisah dengan lebih baik

  2. Visualisasi lebih mudah dicerna daripada angka

  3. Data visualization memudahkan Anda menemukan dan menciptakan sasaran yang berwawasan luas

  4. Data visualization dapat menciptakan komunikasi yang lebih baik

2 Persiapan Data

2.1 Setting-up

Setting library yang akan digunakan pada analisis ini. Library yang akan digunakan pada kali ini ialah lubridate dan ggplot2.

library(lubridate)
library(ggplot2)
library(dplyr)
library(scales)

2.2 Input data

Data spotify yang digunakan pada kali ini diambil dari kaggle.com dengan format data csv. Input data dilakukan seabagai berikut:

Spotify <- read.csv("Top5000.csv")
head(Spotify)

2.3 Checking struktur data

str(Spotify)
#> 'data.frame':    4402 obs. of  20 variables:
#>  $ X               : int  0 1 2 3 4 5 6 7 8 9 ...
#>  $ ars_name        : chr  "Radiohead" "Pink Floyd" "King Crimson" "Radiohead" ...
#>  $ rel_date        : chr  "16 June 1997" "12 September 1975" "10 October 1969" "3 October 2000" ...
#>  $ gens            : chr  "Alternative Rock, Art Rock" "Progressive Rock, Art Rock" "Progressive Rock, Art Rock" "Art Rock, Experimental Rock, Electronic" ...
#>  $ descs           : chr  "melancholic, anxious, futuristic, alienation, existential, male vocals, atmospheric, lonely, cold, introspective" "melancholic, atmospheric, progressive, male vocals, concept album, introspective, serious, longing, bittersweet, meditative" "fantasy, epic, progressive, philosophical, complex, surreal, poetic, male vocals, melancholic, technical" "cold, melancholic, futuristic, atmospheric, anxious, cryptic, sombre, abstract, introspective, male vocals" ...
#>  $ avg_rat         : num  4.23 4.29 4.3 4.21 4.27 4.24 4.2 4.25 4.23 4.26 ...
#>  $ num_rat         : chr  "70,382" "48,662" "44,943" "58,590" ...
#>  $ num_revs        : int  1531 983 870 734 379 1223 1549 961 929 721 ...
#>  $ album           : chr  "OK Computer" "Wish You Were Here" "In the Court of the Crimson King" "Kid A" ...
#>  $ acousticness    : num  0.136 0.603 0.298 0.123 0.323 ...
#>  $ danceability    : num  0.288 0.374 0.341 0.601 0.591 ...
#>  $ energy          : num  0.566 0.41 0.37 0.677 0.708 ...
#>  $ instrumentalness: num  0.1610528 0.36304 0.327265 0.000669 0.0000108 ...
#>  $ liveness        : num  0.159 0.385 0.149 0.311 0.318 ...
#>  $ loudness        : num  -9.1 -12.69 -14.87 -7.81 -5.8 ...
#>  $ speechiness     : num  0.0563 0.0397 0.0435 0.2683 0.2942 ...
#>  $ tempo           : num  115 130 119 116 103 ...
#>  $ valence         : num  0.292 0.259 0.279 0.398 0.487 ...
#>  $ duration_ms     : num  268436 530512 507644 325380 296226 ...
#>  $ time_signature  : num  4 3.6 3.88 4.06 3.81 ...
colnames(Spotify)
#>  [1] "X"                "ars_name"         "rel_date"         "gens"            
#>  [5] "descs"            "avg_rat"          "num_rat"          "num_revs"        
#>  [9] "album"            "acousticness"     "danceability"     "energy"          
#> [13] "instrumentalness" "liveness"         "loudness"         "speechiness"     
#> [17] "tempo"            "valence"          "duration_ms"      "time_signature"

2.4 Pengaturan format sesuai dengan data

Pengaturan format data

Spotify$gens <- as.factor(Spotify$gens)

Pengaturan format tanggal (date) kali ini menggunakan packages lubridate sebagai berikut:

Spotify$rel_date <- dmy(Spotify$rel_date)
head(Spotify)

2.5 Missing value

anyNA(Spotify)
#> [1] TRUE
colSums(is.na(Spotify))
#>                X         ars_name         rel_date             gens 
#>                0                0             1658                0 
#>            descs          avg_rat          num_rat         num_revs 
#>                0                0                0                0 
#>            album     acousticness     danceability           energy 
#>                0                0                0                0 
#> instrumentalness         liveness         loudness      speechiness 
#>                0                0                0                0 
#>            tempo          valence      duration_ms   time_signature 
#>                0                0                0                0

Terdapat data kosong pada kolom rel_date sebanyak 1658 data. Karena data rel_date yang kosong sebanyak 37.7% dari keseluruhan data, maka baris data yang kosong dapat dihapus.

Spotify.clean <- na.omit(Spotify)
colSums(is.na(Spotify.clean))
#>                X         ars_name         rel_date             gens 
#>                0                0                0                0 
#>            descs          avg_rat          num_rat         num_revs 
#>                0                0                0                0 
#>            album     acousticness     danceability           energy 
#>                0                0                0                0 
#> instrumentalness         liveness         loudness      speechiness 
#>                0                0                0                0 
#>            tempo          valence      duration_ms   time_signature 
#>                0                0                0                0

Setelah menghapus dan memastikan tidak ada data yang kosong, maka dilakukan pengecekkan berapa jumlah data observasi yang tersisa.

dim(Spotify.clean)
#> [1] 2744   20

Menampilkan data yang sudah dibersihkan.

head(Spotify.clean)

3 Study Cases

3.1 Genre music yang paling banyak di spotify

3.1.1 Eliminasi data yang terduplikasi

Pengecekan duplikasi data dilakukan agar data tidak tertumpuk.

Spotify.gens <- as.data.frame(table(Spotify.clean$gens))
colnames(Spotify.gens) <- c("Genre","Frekuensi")
Spotify.gens

Dari analisa diatas, diketahui terdapat 1938 genre lagu pada data set spotify.

3.1.2 Pemilihan top 10 genre

Pemilihan top 10 genre berdasarkan jumlah genre lagu terbanyak, yang menempati 10 peringkat teratas akan jumlah tipe genre lagu.

Spotify_10 <- head(Spotify.gens[order(Spotify.gens$Frekuensi,decreasing = T),],10)
Spotify_10

3.1.3 visualisasi top 10 genre

Untuk menampilkan visualisasi genre musik yang terbanyak, maka digunakan package ggplot sebagai berikut:

3.1.3.1 Menampilkan ggplot

ggplot(data = Spotify_10, mapping = aes(x= Frekuensi, y= reorder(Genre, Frekuensi))) +
  geom_col(aes(fill= Frekuensi))+
  labs(
    title = "SPOTIFY TOP GENRE MUSIK",
    X= "Frekuensi genre musik",
    y= "Genre musik") +
  scale_fill_gradient(low = "#4dc1bf", high = "#e7615d") +
  geom_label(mapping = aes(label=Frekuensi, 
            col = "black",
            nudge_x = -8)) + 
  theme_classic() +
    theme(legend.position = "none")

Dari grafik spotify top genre musik diatas, didapatkan bahwa genre progressive rock merupakan genre yang paling banyak di aplikasi spotify. .

3.2 Mengetahui perubahan minat pendengar pada top 3 genre musik.

Melakukan subsetting untuk top 3 kategori genre musik

Spotify.top3 <- Spotify.clean [Spotify.clean$gens %in% c("Progressive Rock","Progressive Metal", "Death Metal"),]
Spotify.top3

Menambahkan kolom bulan release lagu

Spotify.top3$month.rel.date <- month(Spotify.top3$rel_date, label = T, abbr = F)
Spotify.top3

Melakukan agregasi data berdasarkan rata-rata rating tiap bulannya

Spotify.top3.agg <- aggregate(avg_rat ~ gens + month.rel.date, data = Spotify.top3, FUN = mean)
Spotify.top3.agg

Membuat grafik perubahan rating setiap gens

ggplot(data = Spotify.top3.agg, mapping = aes(x = month.rel.date, y = avg_rat)) +
  geom_line(aes(group = gens,
                col = gens), size = 1.5) +
   labs(
    title = "SPOTIFY TOP 3 RATING GENRE MUSIC",
    x= "Month of release",
    y= "Average rating") +
  geom_point(aes(col = gens)) +
  
  theme_minimal()

Berdasarkan hasil analisa diatas, didapatkan bahwa perubahan rata-rata rating dari 3 genre terbanyak di spotify dengan rata-rata rating meningkat ialah pada genre Death Metal.