- Título del Proyecto: Hipótesis
- Enlaces de interés:
- Objetivo:
- Preparar la información de la base de datos que corresponde a los datos de las reproducciones de canciones más escuchadas en el año 2023 en la plataforma Spotify, Deezer y Apple, para comprender, respaldar y conocer el comportamiento que hace que una canción sea más o menos escuchada en una plataforma. Analizar los datos para convertirlos en información respaldada por cálculos estadísticos.
- Se pretende obtener las respuestas para validar o refutar las siguientes hipótesis:
- Las canciones con un mayor BPM (Beats Por Minuto) tienen más éxito en términos de cantidad de streams en Spotify.
- Las canciones más populares en el ranking de Spotify también tienen un comportamiento similar en otras plataformas como Deezer.
- La presencia de una canción en un mayor número de playlists se relaciona con un mayor número de streams.
- Los artistas con un mayor número de canciones en Spotify tienen más streams.
- Las características de la música influyen en el éxito en términos de cantidad de streams en Spotify.
- Equipo: Julieta Salto - Osiris Berbesia
- Herramientas y Tecnologías:
- Google BigQuery para el procesamiento de datos
- PowerBi para configurar un dashboard
- Google Colab y Python para realizar pruebas estadísticas
- Documentación de Google Console
- Documentación Python
- OpenAI - ChatGPT
- Figma para la presentación final
-
-
Nulos:
(SELECT COUNT(*) FROM `saltoproyecto2hipotesis.datos_hipotesis.track_in_spotify` WHERE track_id is null) AS null_id, (SELECT COUNT(*) FROM `saltoproyecto2hipotesis.datos_hipotesis.track_in_spotify` WHERE track_name is null) AS null_track, (SELECT COUNT(*) FROM `saltoproyecto2hipotesis.datos_hipotesis.track_in_spotify` WHERE artist_name is null) AS null_name, (SELECT COUNT(*) FROM `saltoproyecto2hipotesis.datos_hipotesis.track_in_spotify` WHERE artist_count is null) AS null_count, (SELECT COUNT(*) FROM `saltoproyecto2hipotesis.datos_hipotesis.track_in_spotify` WHERE released_year is null) AS null_year, (SELECT COUNT(*) FROM `saltoproyecto2hipotesis.datos_hipotesis.track_in_spotify` WHERE released_month is null) AS null_month, (SELECT COUNT(*) FROM `saltoproyecto2hipotesis.datos_hipotesis.track_in_spotify` WHERE released_day is null) AS null_day, (SELECT COUNT(*) FROM `saltoproyecto2hipotesis.datos_hipotesis.track_in_spotify` WHERE in_spotify_playlists is null) AS null_playlists, (SELECT COUNT(*) FROM `saltoproyecto2hipotesis.datos_hipotesis.track_in_spotify` WHERE in_spotify_charts is null) AS null_charts, (SELECT COUNT(*) FROM `saltoproyecto2hipotesis.datos_hipotesis.track_in_spotify` WHERE streams is null) AS null_streams
-
Duplicados:
SELECT track_name, artist_name, count(*) AS cantidad FROM `saltoproyecto2hipotesis.datos_hipotesis.track_in_spotify` GROUP BY track_name, artist_name HAVING COUNT(*) > 1```
-
Fuera del alcance:
SELECT * EXCEPT(key, mode) FROM `saltoproyecto2hipotesis.datos_hipotesis.track_technical_info`
-
Máximos, mínimos, promedios:
SELECT MAX(`speechiness_%`) AS `max_speechiness_%`, MIN(`speechiness_%`) AS `min_speechiness_%`, AVG(`speechiness_%`) AS `avg_speechiness_%`, MAX(`danceability_%`) AS `max_danceability_%`, MIN(`danceability_%`) AS `min_danceability_%`, AVG(`danceability_%`) AS `avg_danceability_%`, MAX(`valence_%`) AS `max_valence_%`, MIN(`valence_%`) AS `min_valence_%`, AVG(`valence_%`) AS `avg_valence%`, MAX(`energy_%`) AS `max_energy_%`, MIN(`energy_%`) AS `min_energy_%`, AVG(`energy_%`) AS `avg_energy_%`, FROM `saltoproyecto2hipotesis.datos_hipotesis.track_technical_info```
-
Unión de tablas:
SELECT spotify.* EXCEPT(track_name, artist_name, released_year, released_month, released_day, streams), REGEXP_REPLACE(track_name, r'[\p{So}\p{Cn}]', '') AS cleaned_track_name, REGEXP_REPLACE(artist_name, r'[\p{So}\p{Cn}]', '') AS cleaned_artist_name, CONCAT (CAST(released_year AS string),"-", CAST(released_month AS string),"-", CAST(released_day AS string)) AS released_date, CAST(streams AS integer) AS new_streams, techical_info.* EXCEPT(track_id), track_in_competition.* EXCEPT(track_id), FROM `saltoproyecto2hipotesis.datos_hipotesis.track_in_spotify` AS spotify LEFT JOIN `saltoproyecto2hipotesis.datos_hipotesis.track_technical_info` AS techical_info ON spotify.track_id = techical_info.track_id LEFT JOIN `saltoproyecto2hipotesis.datos_hipotesis.track_in_competition` AS track_in_competition ON spotify.track_id = track_in_competition.track_id WHERE streams NOT LIKE "%B%" AND NOT track_name IN("SNAP", "About Damn Time", "Take My Breath", "SPIT IN MY FACE!")
-
Cuartiles:
WITH cuartiles AS( SELECT new_streams, NTILE(4) OVER(ORDER BY new_streams) AS cuartiles_streams FROM `datos_hipotesis.view_unificado_3` ) SELECT unificado.*, cuartiles.cuartiles_streams, IF(cuartiles.cuartiles_streams = 4, "alto", if(cuartiles.cuartiles_streams = 3, "medio alto", if(cuartiles.cuartiles_streams = 2, "medio bajo", "bajo"))) as categoria_streams FROM `datos_hipotesis.view_unificado_3` unificado LEFT JOIN! cuartiles ON unificado.new_streams=cuartiles.new_streams```
La query para la tabla consolidada que usé para la mayoría de los hitos se ve así
- Correlaciones:
SELECT CORR(new_streams, sum_playlists) AS correlation_value FROM `saltoproyecto2hipotesis.datos_hipotesis.4_view_unificado```
-
-
Las canciones con un mayor BPM (Beats Por Minuto) tienen más éxito en términos de cantidad de streams en Spotify.
-
Las canciones más populares en el ranking de Spotify también tienen un comportamiento similar en otras plataformas como Deezer.
-
La presencia de una canción en un mayor número de playlists se relaciona con un mayor número de streams.
-
Correlación: 0.783680301078940
SELECT CORR(sum_playlists, new_streams) as corr_playlists, FROM `saltoproyecto2hipotesis.datos_hipotesis.4_view_unificado`
-
Test Shapiro Wilk
Se visualiza en la distribución que no tienen una configuración normal
-
Test Mann Whitney U:
-
Regresión lineal:
-
-
Los artistas con un mayor número de canciones en Spotify tienen más streams.
-
Correlación:
WITH track_count AS ( SELECT cleaned_artist_name, COUNT(track_id) AS track_count, SUM(new_streams) AS total_streams FROM `saltoproyecto2hipotesis.datos_hipotesis.4_view_unificado` GROUP BY cleaned_artist_name ) SELECT *, CORR(track_count.track_count, track_count.total_streams) OVER () AS correlation_value, FROM track_count
-
Test Shapiro Wilk:
-
Test Mann Whitney U:
-
-
Las características de la música influyen en el éxito en términos de cantidad de streams en Spotify.
-
Correlación: - Danceability: -0.1056358995505 - Valence: -0.04179795486959 - Energy: -0.025738176754 - Liveness: -0.051147025245 - Speechiness: -0.11277393515058 - Acoustciness: -0.00498576864951 - Instrumentalness: -0.044039985415
SELECT CORR(new_streams, danceability) AS corr_danceability, CORR(new_streams, valence) AS corr_valence, CORR(new_streams, energy) AS corr_energy, CORR(new_streams, liveness) AS corr_liveness, CORR(new_streams, speechiness) AS corr_speechiness, CORR(new_streams, acousticness) AS corr_acousticness, CORR(new_streams, instrumentalness) AS corr_instrumentalness, FROM `saltoproyecto2hipotesis.datos_hipotesis.4_view_unificado`
-
Test Shapiro Wilk:
-
-
Consideramos que al lanzar un track debería poder estar en la mayor cantidad de plataformas posible.
-
Observamos, además, que los tracks más escuchados (60%) fueron de artistas solistas
-
La escala major es la que predomina en toda la muestra de datos, por lo tanto sugerimos considerarla al momento de la composición de un track.
-
Las características de la canción no tienen mayor influencia que la que podría llegar a tener el hecho de que los artistas que lideran las cantidades de reproducciones son conocidos/as a nivel mundial.
-
Sobre las hipótesis: en general, los datos no reflejan una distribución normal, por lo que considero necesario revisar outliers, tamaño de la muestra, entre otros.
-
Limitaciones/Próximos Pasos:
- Explorar otros modelos a los que se puedan ajustar variables continuas que no tienen una distribución normal.
- Profundizar en las nociones de hipótesis y pruebas de hipótesis.