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.
Data diambil melalui link berikut : https://www.kaggle.com/datasets/lucascantu/top-5000-albums-of-all-time-spotify-features
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:
Data visualization menceritakan kisah dengan lebih baik
Visualisasi lebih mudah dicerna daripada angka
Data visualization memudahkan Anda menemukan dan menciptakan sasaran yang berwawasan luas
Data visualization dapat menciptakan komunikasi yang lebih baik
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)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)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"
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)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)Pengecekan duplikasi data dilakukan agar data tidak tertumpuk.
Spotify.gens <- as.data.frame(table(Spotify.clean$gens))
colnames(Spotify.gens) <- c("Genre","Frekuensi")
Spotify.gensDari analisa diatas, diketahui terdapat 1938 genre lagu pada data set spotify.
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_10Untuk menampilkan visualisasi genre musik yang terbanyak, maka digunakan package ggplot sebagai berikut:
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.
.
Melakukan subsetting untuk top 3 kategori genre musik
Spotify.top3 <- Spotify.clean [Spotify.clean$gens %in% c("Progressive Rock","Progressive Metal", "Death Metal"),]
Spotify.top3Menambahkan kolom bulan release lagu
Spotify.top3$month.rel.date <- month(Spotify.top3$rel_date, label = T, abbr = F)
Spotify.top3Melakukan 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.aggMembuat 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.