== "MX" & acousticness > 0.5, length(spotify_id)] data[country
[1] 2395
== "MX" & acousticness > 0.5, .N] data[country
[1] 2395
data.table nos permite efectuar operaciones sobre las columnas, por ejemplo, contar cuántas coincidencias tenemos para nuestros criterios aplicados.
[1] 2395
[1] 2395
Existen símbolos especiales como .N que nos cuenta el número de observaciones que cumplen nuestros criterios para el número de grupos que hemos definido. En este caso todas las observaciones pertenecen al mismo grupo.
Pregunta: ¿Cuántas canciones que se hayan publicado de antes del 2000 han estado dentro del top 50? (Utiliza .N)
[1] 6430
Por ejemplo si quisieramos saber el promedio de duración en minutos de las canciones
Además podemos combinar filtros sobre las filas y acciones sobre las columnas. Por ejemplo, si queremos calcular el promedio de popularidad de las canciones en el top 50 de México. Primero hacemos un filtro de las canciones populares en México y después obtenemos el promedio de popularidad únicamente de estas filas.
Nota: La popularidad de una canción es un valor entre 0 y 100, donde 100 indica la mayor popularidad. La popularidad se calcula mediante un algoritmo y se basa, en su mayoría, en el número total de reproducciones que ha tenido la canción y en cuán recientes han sido esas reproducciones. En términos generales, las canciones que se reproducen mucho actualmente tendrán una popularidad mayor que las canciones que se reprodujeron mucho en el pasado. Las canciones duplicadas (por ejemplo, la misma canción de un sencillo y de un álbum) se califican de manera independiente. La popularidad de los artistas y los álbumes se deriva matemáticamente de la popularidad de las canciones. Nota: el valor de popularidad puede no reflejar la popularidad real en algunos días, ya que no se actualiza en tiempo real.
Debido a que tanto el filtro como la función sobre la columna están en el mismo comando, data.table sabe el total de las operaciones y puede hacer más eficiente la velocidad y el uso de la memoria cuando las ejecuta.
Calcula el promedio y desviación estandar en los movimientos diarios de ranking (el cambio en las clasificaciones en comparación con el día anterior) en las canciones populares de México.
[1] 0.4105561 4.9231557
Hasta ahora estabamos aplicando funciones y obtuvimos vectores o números como resultado pero podemos utilizar el espacio j para crear nuevas columnas en nuestras tablas. Por ejemplo, podemos guardar la duración de cada canción en minutos.
duration_min
<num>
1: 4.194450
2: 3.506217
3: 2.621317
4: 2.924317
5: 2.848117
---
1179449: 5.174833
1179450: 2.887550
1179451: 3.079850
1179452: 2.992667
1179453: 2.205983
Ahora qué sucede si queremos generar la nueva columna dentro de nuestra tabla original. Por ejemplo si estimamos la diferencia en tiempo desde que el album fue publicado y la fecha en la que apareció entre el top 50
Nota: El operador :=
sirve para modificar tablas guardadas en la memoria directamente (modify in place)
Index: <country>
spotify_id name artists daily_rank daily_movement
<char> <char> <char> <int> <int>
1: 2plbrEY59IikOBgBGLjaoe Die With A Smile Lady Gaga, Bruno Mars 1 0
2: 6dOtVTDdiauQNBQEDOtlAB BIRDS OF A FEATHER Billie Eilish 2 0
3: 5G2f63n7IPVPPjfNIGih7Q Taste Sabrina Carpenter 3 0
4: 2HRqTpkrJO5ggZyyK6NPWz Espresso Sabrina Carpenter 4 46
5: 7tI8dRuH2Yc6RuoTjxo4dU Who Jimin 5 0
---
1179449: 0AYt6NMyyLd0rLuvr0UkMH Slime You Out (feat. SZA) Drake, SZA 46 4
1179450: 2Gk6fi0dqt91NKvlzGsmm7 SAY MY GRACE (feat. Travis Scott) Offset, Travis Scott 47 3
1179451: 26b3oVLrRUaaybJulow9kz People Libianca 48 2
1179452: 5ydjxBSUIDn26MFzU3asP4 Rainy Days V 49 1
1179453: 59NraMJsLaMCVtwXTSia8i Prada cassö, RAYE, D-Block Europe 50 0
weekly_movement country snapshot_date popularity is_explicit duration_ms album_name
<int> <char> <IDat> <int> <lgcl> <int> <char>
1: 0 2024-09-08 97 FALSE 251667 Die With A Smile
2: 0 2024-09-08 100 FALSE 210373 HIT ME HARD AND SOFT
3: 0 2024-09-08 94 FALSE 157279 Short n' Sweet
4: 46 2024-09-08 83 TRUE 175459 Short n' Sweet
5: 0 2024-09-08 94 FALSE 170887 MUSE
---
1179449: 0 AE 2023-10-18 84 TRUE 310490 For All The Dogs
1179450: 0 AE 2023-10-18 80 TRUE 173253 SET IT OFF
1179451: 0 AE 2023-10-18 88 FALSE 184791 People
1179452: 0 AE 2023-10-18 88 FALSE 179560 Layover
1179453: 0 AE 2023-10-18 94 TRUE 132359 Prada
album_release_date danceability energy key loudness mode speechiness acousticness instrumentalness liveness
<IDat> <num> <num> <int> <num> <int> <num> <num> <num> <num>
1: 2024-08-16 0.521 0.592 6 -7.777 0 0.0304 0.30800 0.00e+00 0.122
2: 2024-05-17 0.747 0.507 2 -10.171 1 0.0358 0.20000 6.08e-02 0.117
3: 2024-08-23 0.674 0.907 3 -4.086 1 0.0640 0.10100 0.00e+00 0.297
4: 2024-08-23 0.699 0.776 0 -5.282 1 0.0293 0.13100 5.36e-06 0.205
5: 2024-07-19 0.660 0.756 0 -3.743 0 0.0320 0.00289 0.00e+00 0.193
---
1179449: 2023-10-06 0.483 0.408 5 -9.243 0 0.0502 0.50800 0.00e+00 0.259
1179450: 2023-10-13 0.773 0.635 10 -5.060 1 0.0452 0.05850 0.00e+00 0.132
1179451: 2022-12-06 0.573 0.422 10 -7.621 0 0.0678 0.55100 1.31e-05 0.102
1179452: 2023-08-11 0.633 0.454 9 -8.016 0 0.0875 0.73900 0.00e+00 0.148
1179453: 2023-08-11 0.638 0.717 8 -5.804 1 0.0375 0.00100 1.79e-06 0.113
valence tempo time_signature date_dif
<num> <num> <int> <int>
1: 0.535 157.969 3 23
2: 0.438 104.978 4 114
3: 0.721 112.964 4 16
4: 0.708 103.963 4 16
5: 0.838 116.034 4 51
---
1179449: 0.105 88.880 3 12
1179450: 0.476 121.879 4 5
1179451: 0.693 124.357 5 316
1179452: 0.282 74.828 4 68
1179453: 0.422 141.904 4 68
Para agregar múltiples columnas en la tabla original se utiliza la siguientes sintaxis
dt[,`:=`(col1 = funcion, col2 = funcion)]
dt[, c("col1","col2","col3") := list(val1,val2,val3)]
Agrega una nueva columna (year_release
) a la tabla original que solo muestre el año de publicación del album de la canción
En un solo comando: genera una columna de diferencia entre la fecha de publicación y la fecha en la que la canción apareció en el top50. Además generar una columna de duración de la canción en minutos
[1] "spotify_id" "name" "artists" "daily_rank" "daily_movement"
[6] "weekly_movement" "country" "snapshot_date" "popularity" "is_explicit"
[11] "duration_ms" "album_name" "album_release_date" "danceability" "energy"
[16] "key" "loudness" "mode" "speechiness" "acousticness"
[21] "instrumentalness" "liveness" "valence" "tempo" "time_signature"
[26] "date_dif" "year_release"
year_release
<char>
1: 2024
2: 2024
3: 2024
4: 2024
5: 2024
6: 2024
[1] "spotify_id" "name" "artists" "daily_rank" "daily_movement"
[6] "weekly_movement" "country" "snapshot_date" "popularity" "is_explicit"
[11] "duration_ms" "album_name" "album_release_date" "danceability" "energy"
[16] "key" "loudness" "mode" "speechiness" "acousticness"
[21] "instrumentalness" "liveness" "valence" "tempo" "time_signature"
[26] "date_dif" "year_release" "days_until_top50" "duration_min"
days_until_top50 duration_min
<int> <num>
1: 23 4.194450
2: 114 3.506217
3: 16 2.621317
4: 16 2.924317
5: 51 2.848117
---
1179449: 12 5.174833
1179450: 5 2.887550
1179451: 316 3.079850
1179452: 68 2.992667
1179453: 68 2.205983