1. Introducció

Origen del conjunt

El conjunt de dades provĆ© d’un perĆ­ode qualsevol d’escolta de mĆŗsica. Les escoltes totals estĆ n comptabilitzades per last.fm i les globals estĆ n comptabilitzades per Spotify. El gĆØnere Ć©s el de l’àlbum al que pertany cada cançó.

Objectiu

L’objectiu principal que tenim Ć©s analitzar les dades adquirides i trobar relacions entre elles.

Per exemple: la durada de cada cançó en relació amb el seu gènere.

Adequació de les dades

Al tenir dades musicals per artista, popularitat, durada i gĆØnere podem establir relacions interessants entre la durada (o altres valors) i el gĆØnere.

2. Importació de les dades

Mostreu com heu importat el fitxer i quin nom tĆ© l’objecte carregat.

musica <- read.csv("musica_separat_genere.csv", header = TRUE, stringsAsFactors = FALSE)
save(musica, file = "musica.RData") # El nom de l'objecte Ʃs musica

Format original i tractament previ

El format original de les dades era originalment en .csv, en el que vam haver de canviar el format de les dates, ja que no era adequat, hem afegit: - Any de publicació - Data - Durada - Gènere - Reproduccions globals - Reproduccions

3. Dimensions del dataset

dim(musica)
## [1] 50  9
glimpse(musica)
## Rows: 50
## Columns: 9
## $ Artista              <chr> "Oques Grasses", "Arctic Monkeys", "Arctic Monkey…
## $ ƀlbum                <chr> "A tope amb la vida", "AM", "AM", "Amics Tiets i …
## $ TĆ­tol                <chr> "TalismĆ ", "I Wanna Be Yours", "R U Mine?", "Amic…
## $ Any_pub              <int> 2021, 2013, 2013, 2021, 2015, 2015, 2015, 2015, 2…
## $ Data                 <chr> "19 Mar 2025 06:49", "18 Mar 2025 17:26", "18 Mar…
## $ Durada               <chr> "03:03:00", "03:03:00", "03:21:00", "03:37:00", "…
## $ GĆØnere               <chr> "rock catalĆ ", "sheffield indie", "sheffield indi…
## $ ReproduccionsGlobals <dbl> 5080936, 3417053862, 1297535685, 6632381, 3486176…
## $ Reproduccions        <int> 5, 37, 58, 4, 15, 33, 16, 11, 41, 8, 11, 7, 11, 6…

El dataset tĆ© 50 files i 9 columnes La unitat d’anĆ lisi Ć©s una reproducció.

4. Diccionari de variables

Descriviu cada variable del dataset.

Variable Tipus Descripció Valors possibles / rang
Artista Categòrica Artista de la cançó escoltada string
ƀlbum Categòrica ƀlbum de la cançó escoltada string
Títol Categòrica Títol de la cançó escoltada string
Any_pub NumĆØrica Any de publicació de l’àlbum/single 1993 - 2025
Data NumĆØrica Data i hora de l’escolta de la cançó 18 Mar 2025 18:32 - 05 Jul 2025 10:23
Durada Numèrica Durada de la cançó escoltada 01:30:00 - 05:38:00
GĆØnere Categòrica GĆØnere de l’àlbum/single string
ReproduccionsGlobals Numèrica Reproduccions (spotify) de la cançó escoltada 0 - INF
Reproduccions Numèrica Reproduccions de la cançó escoltada 1 - INF
 tibble(
   variable = names(musica),
   tipus = sapply(musica, class)
 )
## # A tibble: 9 Ɨ 2
##   variable             tipus    
##   <chr>                <chr>    
## 1 Artista              character
## 2 ƀlbum                character
## 3 TĆ­tol                character
## 4 Any_pub              integer  
## 5 Data                 character
## 6 Durada               character
## 7 GĆØnere               character
## 8 ReproduccionsGlobals numeric  
## 9 Reproduccions        integer

5. EstadĆ­stiques descriptives

summary(musica)
##    Artista             ƀlbum              Tƭtol              Any_pub    
##  Length:50          Length:50          Length:50          Min.   :1993  
##  Class :character   Class :character   Class :character   1st Qu.:2013  
##  Mode  :character   Mode  :character   Mode  :character   Median :2016  
##                                                           Mean   :2015  
##                                                           3rd Qu.:2020  
##                                                           Max.   :2024  
##      Data              Durada             GĆØnere          ReproduccionsGlobals
##  Length:50          Length:50          Length:50          Min.   :8.706e+05   
##  Class :character   Class :character   Class :character   1st Qu.:1.180e+07   
##  Mode  :character   Mode  :character   Mode  :character   Median :8.434e+07   
##                                                           Mean   :3.712e+08   
##                                                           3rd Qu.:2.813e+08   
##                                                           Max.   :3.417e+09   
##  Reproduccions  
##  Min.   : 3.00  
##  1st Qu.: 8.25  
##  Median :14.50  
##  Mean   :19.78  
##  3rd Qu.:30.50  
##  Max.   :60.00

En aquest conjunt de dades no hi ha valors perduts.

Les dates s’han de passar a format data, la llibreria lubridate ho pot fer sense problemes.

6. Visualització inicial

Incloeu una o dues gràfiques exploratòries.

musica$GĆØnere <- factor(musica$GĆØnere, levels = sort(unique(musica$GĆØnere)))

# Defineix els colors per a cada categoria
colors <- c(
  "j-rock" = "red",
  "lo-fi" = "blue",
  "punk rock" = "green",
  "rock " = "purple",
  "rock alternatiu" = "orange",
  "rock catalĆ " = "pink",
  "sheffield indie" = "brown",
  "trap catalĆ " = "cyan",
  "visual kei" = "magenta"
)

# Crea el primer grĆ fic de barres
grafic1 <- ggplot(musica, aes(y = GĆØnere, fill = GĆØnere)) +
  geom_bar() +
  scale_fill_manual(values = colors) +
  theme_minimal() +
  labs(title = "Distribució de Gèneres Musicals", x = "Gènere", y = "Freqüència") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Calcula les durades mitjanes per gĆØnere
durada_mitjana <- musica %>%
  group_by(GĆØnere) %>%
  summarise(Durada_Mitjana = mean(Durada))
## Warning: There were 9 warnings in `summarise()`.
## The first warning was:
## ℹ In argument: `Durada_Mitjana = mean(Durada)`.
## ℹ In group 1: `GĆØnere = j-rock`.
## Caused by warning in `mean.default()`:
## ! l'argument no és «numeric» ni «logical»: es retorna NA
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 8 remaining warnings.
grafic2 <- ggplot(durada_mitjana, aes(x = GĆØnere, y = Durada_Mitjana, fill = GĆØnere)) +
  geom_bar(stat = "identity") +
  scale_fill_manual(values = colors) +
  theme_minimal() +
  labs(title = "Durada Mitjana per GĆØnere", x = "GĆØnere", y = "Durada Mitjana") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Mostra els dos grĆ fics en una sola finestra
grid.arrange(grafic1, grafic2, ncol = 2)
## Warning: Removed 9 rows containing missing values or values outside the scale range
## (`geom_bar()`).