Autor: Jeremy Tello
Fecha: 20/12/2023
# Para limpiar el workspace, por si hubiera algun dataset
# o informacion cargada
rm(list = ls())
# Cambiar el directorio de trabajo
setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
getwd()
## [1] "C:/Users/jerem/OneDrive/Documentos/Computación e informatica/CICLO 4/Estadística Aplicada a la Computación/Tema 10"
Spotify Technology S.A
Misión: Ofrecer acceso ilimitado a la música y al entretenimiento para todas las personas en todo el mundo.
Este conjunto de datos contiene una lista completa de las canciones más famosas de 2023 enumeradas en Spotify. El conjunto de datos ofrece una gran cantidad de características más allá de las que normalmente están disponibles en conjuntos de datos similares. Proporciona información sobre los atributos, la popularidad y la presencia de cada canción en varias plataformas de música. El conjunto de datos incluye información como el nombre de la pista, el nombre del artista, la fecha de lanzamiento, las listas de reproducción y gráficos de Spotify, estadísticas de transmisión, presencia de Apple Music, presencia de Deezer, gráficos de Shazam y varias funciones de audio.
Datos obtenidos de: https://www.kaggle.com/datasets/nelgiriyewithana/top-spotify-songs-2023
Analizar el comportamiento de los usuarios en Spotify para comprender mejor sus preferencias musicales, patrones de escucha y cómo la plataforma puede mejorar la experiencia del usuario.
El objetivo de este análisis estadístico es explorar y comprender los patrones y tendencias en el comportamiento de las canciones en Spotify. Se busca identificar factores clave que influyen en la popularidad y éxito de las canciones en la plataforma.
La población de estudio comprende todas las canciones disponibles en Spotify.
Para llevar a cabo este análisis, se utilizará una muestra aleatoria estratificada que incluirá una variedad de géneros musicales y períodos de lanzamiento para garantizar representatividad.
La unidad de análisis en este estudio será las canciones mas escuchadas en este año 2023
El tipo de muestreo seleccionado para este análisis será muestreo aleatorio estratificado. Esta elección se basa en la necesidad de garantizar una representación equitativa de diferentes géneros musicales y períodos de lanzamiento en la muestra. Al estratificar la muestra por género musical y año de lanzamiento, se busca capturar la diversidad y variabilidad de la música disponible en Spotify.
Para llevar a cabo el análisis, primero importaremos el conjunto de datos al entorno de trabajo de R.
spotify <- read.csv("spotify-2023.csv", sep=",", stringsAsFactors = TRUE, encoding = "latin1")
head(spotify)
## track_name artist.s._name artist_count
## 1 Seven (feat. Latto) (Explicit Ver.) Latto, Jung Kook 2
## 2 LALA Myke Towers 1
## 3 vampire Olivia Rodrigo 1
## 4 Cruel Summer Taylor Swift 1
## 5 WHERE SHE GOES Bad Bunny 1
## 6 Sprinter Dave, Central Cee 2
## released_year released_month released_day in_spotify_playlists
## 1 2023 7 14 553
## 2 2023 3 23 1474
## 3 2023 6 30 1397
## 4 2019 8 23 7858
## 5 2023 5 18 3133
## 6 2023 6 1 2186
## in_spotify_charts streams in_apple_playlists in_apple_charts
## 1 147 141381703 43 263
## 2 48 133716286 48 126
## 3 113 140003974 94 207
## 4 100 800840817 116 207
## 5 50 303236322 84 133
## 6 91 183706234 67 213
## in_deezer_playlists in_deezer_charts in_shazam_charts bpm key mode
## 1 45 10 826 125 B Major
## 2 58 14 382 92 C# Major
## 3 91 14 949 138 F Major
## 4 125 12 548 170 A Major
## 5 87 15 425 144 A Minor
## 6 88 17 946 141 C# Major
## danceability_. valence_. energy_. acousticness_. instrumentalness_.
## 1 80 89 83 31 0
## 2 71 61 74 7 0
## 3 51 32 53 17 0
## 4 55 58 72 11 0
## 5 65 23 80 14 63
## 6 92 66 58 19 0
## liveness_. speechiness_.
## 1 8 4
## 2 10 4
## 3 31 6
## 4 11 15
## 5 11 6
## 6 8 24
released_year: Año de lanzamiento de la canción.
released_month: Mes de lanzamiento de la canción.
track_name: Nombre de la canción.
artist_name: Nombre del artista.
artist_count: Número de artistas en la canción.
released_day: Día de lanzamiento de la canción.
in_spotify_playlists: Número de playlists de Spotify en las que la
canción está incluida.
in_spotify_charts: Indicador de si la canción está en las listas de
éxitos de Spotify.
streams: Número de transmisiones de la canción.
in_apple_playlists: Número de playlists de Apple Music en las que la
canción está incluida.
in_apple_charts: Indicador de si la canción está en las listas de éxitos
de Apple Music.
in_deezer_playlists: Indicador de si la canción está en playlists de
Deezer.
in_deezer_charts: Indicador de si la canción está en las listas de
éxitos de Deezer.
in_shazam_charts: Indicador de si la canción está en las listas de
éxitos de Shazam.
bpm: Ritmos por minuto de la canción.
key: Tonalidad de la canción.
mode: Modo de la canción (mayor o menor).
danceability: Índice de capacidad de baile.
valence_: Índice de valencia.
energy_: Índice de energía.
acousticness_: Índice de acústica.
liveness_: Índice de vivacidad.
instrumentalness: Índice de instrumentalidad.
speechiness_: Índice de hablabilidad.
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.2
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.2
##
## 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(modeest)
## Warning: package 'modeest' was built under R version 4.3.2
library(fBasics)
## Warning: package 'fBasics' was built under R version 4.3.2
##
## Attaching package: 'fBasics'
## The following objects are masked from 'package:modeest':
##
## ghMode, ghtMode, gldMode, hypMode, nigMode, skewness
head(spotify)
## track_name artist.s._name artist_count
## 1 Seven (feat. Latto) (Explicit Ver.) Latto, Jung Kook 2
## 2 LALA Myke Towers 1
## 3 vampire Olivia Rodrigo 1
## 4 Cruel Summer Taylor Swift 1
## 5 WHERE SHE GOES Bad Bunny 1
## 6 Sprinter Dave, Central Cee 2
## released_year released_month released_day in_spotify_playlists
## 1 2023 7 14 553
## 2 2023 3 23 1474
## 3 2023 6 30 1397
## 4 2019 8 23 7858
## 5 2023 5 18 3133
## 6 2023 6 1 2186
## in_spotify_charts streams in_apple_playlists in_apple_charts
## 1 147 141381703 43 263
## 2 48 133716286 48 126
## 3 113 140003974 94 207
## 4 100 800840817 116 207
## 5 50 303236322 84 133
## 6 91 183706234 67 213
## in_deezer_playlists in_deezer_charts in_shazam_charts bpm key mode
## 1 45 10 826 125 B Major
## 2 58 14 382 92 C# Major
## 3 91 14 949 138 F Major
## 4 125 12 548 170 A Major
## 5 87 15 425 144 A Minor
## 6 88 17 946 141 C# Major
## danceability_. valence_. energy_. acousticness_. instrumentalness_.
## 1 80 89 83 31 0
## 2 71 61 74 7 0
## 3 51 32 53 17 0
## 4 55 58 72 11 0
## 5 65 23 80 14 63
## 6 92 66 58 19 0
## liveness_. speechiness_.
## 1 8 4
## 2 10 4
## 3 31 6
## 4 11 15
## 5 11 6
## 6 8 24
summary(spotify)
## track_name artist.s._name
## About Damn Time : 2 Taylor Swift : 34
## Daylight : 2 The Weeknd : 22
## Die For You : 2 Bad Bunny : 19
## Flowers : 2 SZA : 19
## Let It Snow! Let It Snow! Let It Snow!: 2 Harry Styles : 17
## Miss You : 2 Kendrick Lamar: 12
## (Other) :941 (Other) :830
## artist_count released_year released_month released_day
## Min. :1.000 Min. :1930 Min. : 1.000 Min. : 1.00
## 1st Qu.:1.000 1st Qu.:2020 1st Qu.: 3.000 1st Qu.: 6.00
## Median :1.000 Median :2022 Median : 6.000 Median :13.00
## Mean :1.556 Mean :2018 Mean : 6.034 Mean :13.93
## 3rd Qu.:2.000 3rd Qu.:2022 3rd Qu.: 9.000 3rd Qu.:22.00
## Max. :8.000 Max. :2023 Max. :12.000 Max. :31.00
##
## in_spotify_playlists in_spotify_charts streams in_apple_playlists
## Min. : 31 Min. : 0.00 1223481149: 2 Min. : 0.00
## 1st Qu.: 875 1st Qu.: 0.00 156338624 : 2 1st Qu.: 13.00
## Median : 2224 Median : 3.00 395591396 : 2 Median : 34.00
## Mean : 5200 Mean : 12.01 723894473 : 2 Mean : 67.81
## 3rd Qu.: 5542 3rd Qu.: 16.00 100409613 : 1 3rd Qu.: 88.00
## Max. :52898 Max. :147.00 1007612429: 1 Max. :672.00
## (Other) :943
## in_apple_charts in_deezer_playlists in_deezer_charts in_shazam_charts
## Min. : 0.00 0 : 24 Min. : 0.000 0 :344
## 1st Qu.: 7.00 15 : 23 1st Qu.: 0.000 1 : 73
## Median : 38.00 13 : 20 Median : 0.000 : 50
## Mean : 51.91 5 : 20 Mean : 2.666 2 : 35
## 3rd Qu.: 87.00 12 : 18 3rd Qu.: 2.000 3 : 21
## Max. :275.00 2 : 18 Max. :58.000 4 : 19
## (Other):830 (Other):411
## bpm key mode danceability_. valence_.
## Min. : 65.0 C# :120 Major:550 Min. :23.00 Min. : 4.00
## 1st Qu.:100.0 G : 96 Minor:403 1st Qu.:57.00 1st Qu.:32.00
## Median :121.0 : 95 Median :69.00 Median :51.00
## Mean :122.5 G# : 91 Mean :66.97 Mean :51.43
## 3rd Qu.:140.0 F : 89 3rd Qu.:78.00 3rd Qu.:70.00
## Max. :206.0 B : 81 Max. :96.00 Max. :97.00
## (Other):381
## energy_. acousticness_. instrumentalness_. liveness_.
## Min. : 9.00 Min. : 0.00 Min. : 0.000 Min. : 3.00
## 1st Qu.:53.00 1st Qu.: 6.00 1st Qu.: 0.000 1st Qu.:10.00
## Median :66.00 Median :18.00 Median : 0.000 Median :12.00
## Mean :64.28 Mean :27.06 Mean : 1.581 Mean :18.21
## 3rd Qu.:77.00 3rd Qu.:43.00 3rd Qu.: 0.000 3rd Qu.:24.00
## Max. :97.00 Max. :97.00 Max. :91.000 Max. :97.00
##
## speechiness_.
## Min. : 2.00
## 1st Qu.: 4.00
## Median : 6.00
## Mean :10.13
## 3rd Qu.:11.00
## Max. :64.00
##
ggplot(spotify, aes(x = `artist_count`, fill = `artist_count`, group = `artist_count`)) +
geom_bar(color = "black") +
labs(title = "Gráfico de Barras para Artistas de Canciones en Spotify") +
theme_minimal()
ggplot(spotify, aes(x = factor(1), fill = in_spotify_charts, group = in_spotify_charts)) +
geom_bar(width = 1, color = "black") +
coord_polar(theta = "y") +
labs(title = "Gráfico Circular (Pastel) para Presencia en Listas de Éxitos en Spotify") +
theme_void()
ggplot(spotify, aes(x = released_year)) +
geom_bar(fill = "lightcoral", color = "black") +
labs(title = "Gráfico de Barras para Año de Lanzamiento de Canciones en Spotify") +
theme_minimal()
ggplot(spotify, aes(x = factor(1), fill = key, group = key)) +
geom_bar(width = 1, color = "black") +
coord_polar(theta = "y") +
labs(title = "Gráfico Circular (Pastel) para Tonalidad de Canciones en Spotify") +
theme_void()
ggplot(spotify, aes(x = streams)) +
geom_bar(fill = "gold", color = "black") +
labs(title = "Gráfico de Barras para Número de Streams de Canciones en Spotify") +
theme_minimal()
ggplot(spotify, aes(x = energy_.)) +
geom_histogram(binwidth = 1, fill = "lightblue", color = "black") +
labs(title = "Histograma para Nivel de Energía de Canciones en Spotify") +
theme_minimal()
ggplot(spotify, aes(x = danceability_.)) +
geom_histogram(binwidth = 5, fill = "lightgreen", color = "black") +
labs(title = "Histograma para Índice de Capacidad de Baile de Canciones en Spotify") +
theme_minimal()
ggplot(spotify, aes(y = valence_.)) +
geom_boxplot(fill = "lightblue", color = "black") +
labs(title = "Diagrama de Caja para Positividad de Canciones en Spotify") +
theme_minimal()
ggplot(spotify, aes(x = acousticness_.)) +
geom_density(alpha = 0.5, fill = "orange") +
labs(title = "Gráfico de Densidad para acústica de Canciones en Spotify") +
theme_minimal()
mean_speechiness<- mean(spotify$speechiness_.)
median_speechiness <- median(spotify$speechiness_.)
table_speechiness <- table(spotify$speechiness_.)
moda_speechiness <- as.numeric(names(table_speechiness)[table_speechiness == max(table_speechiness)])
range_speechiness <- max(spotify$speechiness_.) - min(spotify$speechiness_.)
var_speechiness <- var(spotify$speechiness_.)
sd_speechiness <- sd(spotify$speechiness_.)
cv_speechiness <- sd_speechiness / mean_speechiness * 100
cat("Medidas estadísticas de Speechines\n")
## Medidas estadísticas de Speechines
cat("Media:", mean_speechiness, "\n")
## Media: 10.13116
cat("Mediana:", median_speechiness, "\n")
## Mediana: 6
cat("Moda:", moda_speechiness, "\n")
## Moda: 4
cat("Rango:", range_speechiness, "\n")
## Rango: 62
cat("Varianza:", var_speechiness, "\n")
## Varianza: 98.26534
cat("Desviación Estándar:", sd_speechiness, "\n")
## Desviación Estándar: 9.912888
cat("Coeficiente de Variación:", cv_speechiness, "%\n")
## Coeficiente de Variación: 97.84549 %
str(spotify)
## 'data.frame': 953 obs. of 24 variables:
## $ track_name : Factor w/ 943 levels "'Till I Collapse",..: 700 423 879 175 910 753 243 160 298 409 ...
## $ artist.s._name : Factor w/ 645 levels "(G)I-DLE","21 Savage, Gunna",..: 331 409 438 563 39 125 181 476 219 458 ...
## $ artist_count : int 2 1 1 1 1 2 2 1 1 2 ...
## $ released_year : int 2023 2023 2023 2019 2023 2023 2023 2023 2023 2023 ...
## $ released_month : int 7 3 6 8 5 6 3 7 5 3 ...
## $ released_day : int 14 23 30 23 18 1 16 7 15 17 ...
## $ in_spotify_playlists: int 553 1474 1397 7858 3133 2186 3090 714 1096 2953 ...
## $ in_spotify_charts : int 147 48 113 100 50 91 50 43 83 44 ...
## $ streams : Factor w/ 949 levels "100409613","1007612429",..: 157 126 152 865 500 281 832 738 934 718 ...
## $ in_apple_playlists : int 43 48 94 116 84 67 34 25 60 49 ...
## $ in_apple_charts : int 263 126 207 207 133 213 222 89 210 110 ...
## $ in_deezer_playlists : Factor w/ 348 levels "0","1","1,003",..: 218 263 338 51 331 332 211 169 229 292 ...
## $ in_deezer_charts : int 10 14 14 12 15 17 13 13 11 13 ...
## $ in_shazam_charts : Factor w/ 199 levels "","0","1","1,021",..: 187 120 195 151 127 194 125 61 197 110 ...
## $ bpm : int 125 92 138 170 144 141 148 100 130 170 ...
## $ key : Factor w/ 12 levels "","A","A#","B",..: 4 5 9 2 2 5 9 9 5 6 ...
## $ mode : Factor w/ 2 levels "Major","Minor": 1 1 1 1 2 1 2 1 2 2 ...
## $ danceability_. : int 80 71 51 55 65 92 67 67 85 81 ...
## $ valence_. : int 89 61 32 58 23 66 83 26 22 56 ...
## $ energy_. : int 83 74 53 72 80 58 76 71 62 48 ...
## $ acousticness_. : int 31 7 17 11 14 19 48 37 12 21 ...
## $ instrumentalness_. : int 0 0 0 0 63 0 0 0 0 0 ...
## $ liveness_. : int 8 10 31 11 11 8 8 11 28 8 ...
## $ speechiness_. : int 4 4 6 15 6 24 3 4 9 33 ...
cuartiles_speechines <- quantile(spotify$speechiness_., probs = c(0, 0.25, 0.5, 0.75, 1))
cuartiles_speechines
## 0% 25% 50% 75% 100%
## 2 4 6 11 64
Resultado /## 0% 25% 50% 75% 100%
/## 2 4 6 11 64
El valor minimo de cantidad de ‘speechiness_.’ es 2.
El 25% de las canciones tienen ‘speechiness_.’ iguales o inferiores al cuartil 1 (4).
El 50% de las canciones tienen ‘speechiness_.’ iguales o inferiores al cuartil 2 (6).
El 75% de las canciones tienen ‘speechiness_.’ iguales o inferiores al cuartil 3 (11).
El valor máximo de speechiness_% es el cuartil 4 (64).
deciles_speechiness <- data.frame(
Deciles = seq(0, 1, 0.1),
Valor = quantile(spotify$speechiness_., probs = seq(0, 1, 0.1))
)
deciles_speechiness_ordenado <- deciles_speechiness[order(deciles_speechiness$Deciles), ]
deciles_speechiness_ordenado
## Deciles Valor
## 0% 0.0 2
## 10% 0.1 3
## 20% 0.2 4
## 30% 0.3 4
## 40% 0.4 5
## 50% 0.5 6
## 60% 0.6 7
## 70% 0.7 9
## 80% 0.8 14
## 90% 0.9 26
## 100% 1.0 64
percentiles_speechiness <- data.frame(
Percentiles = seq(0, 1, 0.01),
Valor = quantile(spotify$speechiness_., probs = seq(0, 1, 0.01))
)
percentiles_speechiness_ordenado <- percentiles_speechiness[order(percentiles_speechiness$Percentiles), ]
percentiles_speechiness_ordenado
## Percentiles Valor
## 0% 0.00 2.00
## 1% 0.01 3.00
## 2% 0.02 3.00
## 3% 0.03 3.00
## 4% 0.04 3.00
## 5% 0.05 3.00
## 6% 0.06 3.00
## 7% 0.07 3.00
## 8% 0.08 3.00
## 9% 0.09 3.00
## 10% 0.10 3.00
## 11% 0.11 3.00
## 12% 0.12 3.00
## 13% 0.13 3.00
## 14% 0.14 3.00
## 15% 0.15 3.00
## 16% 0.16 3.00
## 17% 0.17 4.00
## 18% 0.18 4.00
## 19% 0.19 4.00
## 20% 0.20 4.00
## 21% 0.21 4.00
## 22% 0.22 4.00
## 23% 0.23 4.00
## 24% 0.24 4.00
## 25% 0.25 4.00
## 26% 0.26 4.00
## 27% 0.27 4.00
## 28% 0.28 4.00
## 29% 0.29 4.00
## 30% 0.30 4.00
## 31% 0.31 4.00
## 32% 0.32 4.00
## 33% 0.33 4.00
## 34% 0.34 4.00
## 35% 0.35 5.00
## 36% 0.36 5.00
## 37% 0.37 5.00
## 38% 0.38 5.00
## 39% 0.39 5.00
## 40% 0.40 5.00
## 41% 0.41 5.00
## 42% 0.42 5.00
## 43% 0.43 5.00
## 44% 0.44 5.00
## 45% 0.45 5.00
## 46% 0.46 5.00
## 47% 0.47 5.00
## 48% 0.48 5.00
## 49% 0.49 6.00
## 50% 0.50 6.00
## 51% 0.51 6.00
## 52% 0.52 6.00
## 53% 0.53 6.00
## 54% 0.54 6.00
## 55% 0.55 6.00
## 56% 0.56 6.00
## 57% 0.57 7.00
## 58% 0.58 7.00
## 59% 0.59 7.00
## 60% 0.60 7.00
## 61% 0.61 7.00
## 62% 0.62 8.00
## 63% 0.63 8.00
## 64% 0.64 8.00
## 65% 0.65 8.00
## 66% 0.66 8.00
## 67% 0.67 9.00
## 68% 0.68 9.00
## 69% 0.69 9.00
## 70% 0.70 9.00
## 71% 0.71 10.00
## 72% 0.72 10.00
## 73% 0.73 10.00
## 74% 0.74 11.00
## 75% 0.75 11.00
## 76% 0.76 12.00
## 77% 0.77 12.00
## 78% 0.78 13.00
## 79% 0.79 14.00
## 80% 0.80 14.00
## 81% 0.81 16.00
## 82% 0.82 17.00
## 83% 0.83 18.00
## 84% 0.84 20.00
## 85% 0.85 21.00
## 86% 0.86 22.00
## 87% 0.87 23.00
## 88% 0.88 24.00
## 89% 0.89 25.00
## 90% 0.90 26.00
## 91% 0.91 28.00
## 92% 0.92 29.00
## 93% 0.93 31.00
## 94% 0.94 32.00
## 95% 0.95 33.00
## 96% 0.96 35.00
## 97% 0.97 36.44
## 98% 0.98 39.00
## 99% 0.99 43.48
## 100% 1.00 64.00
asimetria_speechiness <- skewness(spotify$speechiness_.)
cat("Asimetría:", asimetria_speechiness, "\n")
## Asimetría: 1.928582
curtosis_speechiness <- kurtosis(spotify$speechiness_.)
cat("Curtosis:", curtosis_speechiness, "\n")
## Curtosis: 3.337138
Si el valor de asimetría es positivo, la distribución es asimétrica positiva, lo que significa que los valores están concentrados en los puntos mínimos. Si es negativo, sería asimétrica negativa, indicando concentración en puntos máximos.
Para la curtosis, si el valor es mayor que 3, la distribución es leptocúrtica, lo que implica que los datos están muy concentrados alrededor de las medidas de tendencia central.
hist(spotify$speechiness_., col = "skyblue", main = "Histograma de speechiness_.", xlab = "speechiness_.")