Análisis de Popularidad de Canciones en la Era Digital – Proyecto Módulo 2
Proyecto de análisis de datos musicales desarrollado por el Equipo 2 formado por Camila López, Arantxa Barea y María Granero.
El objetivo es estudiar la evolución de la popularidad de diferentes géneros, artistas, colaboraciones y tendencias globales utilizando datos de Spotify y Last.fm entre 2020 y 2024.
| Miembro | Rol | Tareas principales |
|---|---|---|
| Camila López | Scrum Master / Data Analyst | Organización, tablero Kanban, definición de milestones, API Last.fm, extracción y limpieza de datos, desarrollo de queries SQL y revisión |
| María Granero | Data Analyst | API Spotify, extracción de datos, integración y validación de datasets, creación y carga de la base de datos, desarrollo de queries SQL y revisión |
| Arantxa Barea | Data Analyst | API Spotify, extracción de datos, integración y validación de datasets, creación y carga de la base de datos, desarrollo de queries SQL y revisión |
Analizar la evolución de la música entre 2020 y 2024, centrándose en los géneros pop, latin, indie y hip-hop.
- Analizar la popularidad media de cada género a lo largo del tiempo
- Identificar artistas dominantes por género y año
- Estudiar colaboraciones e hibridación entre géneros
- Explorar tendencias globales mediante tags, playcounts y oyentes
- Extracción de datos desde las APIs de Spotify y Last.fm mediante Python.
- Limpieza, normalización y cruce de datos para crear datasets coherentes.
- Exportación de los datos a CSV.
- Volcado de los datasets en MySQL Workbench utilizando SQLAlchemy.
- Análisis de los datos mediante queries SQL.
- Obtención de insights sobre popularidad, tendencias y colaboraciones.
- Consumo de APIs con
requests - Manejo de respuestas en formato JSON
- Manipulación de datos con pandas
- Control de errores con
try/except - Funciones personalizadas para parsing y limpieza
- Exportación de datos a CSV
- Diseño y carga de datos en MySQL
- Queries SQL para análisis exploratorio
- Integración Python–MySQL mediante SQLAlchemy
El proyecto se estructura en dos notebooks principales y scripts SQL:
-
Notebook 1 – Extracción y limpieza de datos
Incluye:- Llamadas a las APIs
- Procesamiento y limpieza de datos
- Normalización y matching entre fuentes
- Exportación de datasets finales a CSV
-
Notebook 2 – Carga en MySQL y análisis SQL
Incluye:- Lectura de los CSV generados
- Conexión con MySQL mediante SQLAlchemy
- Volcado de los datos a la base de datos
-
SQL Scripts – Esquema y queries
Incluye:Schema_RhythmIQ.sql: creación completa de la base de datos y tablasScript_queries_RhythmIQ.sql: todas las queries utilizadas para análisis y extracción de insights
proyecto-da-promo-64-modulo-2-team-2/ ← raíz del repo
├─ README.md
├─ .gitignore
├─ .env.example
├─ Presentación_análisis_movimiento_musica_streaming_2020_2024.pdf
└─ docs_equipo/
├─ Documentos_BBDD_queries/
│ ├─ Exportación_resultados/
│ ├─ Diagrama_entidad_relación_(DER).mwb
│ ├─ Script_queries_RhythmIQ.sql
│ └─ Schema_RhythmIQ.sql
└─ Documentos_extracción_datos/
├─ dataset_spotify_tracks.csv
├─ dataset_unificado.csv
├─ df_lastfm.csv
├─ maestro_artistas.csv
├─ Fase1_Extracción_datos.ipynb
└─ Fase2_Manipulación_carga_datos.ipynb
- Python 3.9+
- MySQL Workbench
- Librerías principales:
pandasrequestsspotipysqlalchemypymysqlpython-dotenv
Para proteger credenciales en un repositorio público, las claves de las APIs no se incluyen. Se utiliza un archivo local .env para cargar las variables de entorno.
# -----------------------------------------------------------------------------------------------------------------------
# ARCHIVO DE EJEMPLO DE VARIABLES DE ENTORNO
# -----------------------------------------------------------------------------------------------------------------------
# Copiar este archivo a .env y rellenar con tus propias claves de API.
# -----------------------------------------------------------------------------------------------------------------------
# Clave de API de Spotify
spotipy_api_key=TU_API_KEY
# Client Secret de Spotify
spotipy_client_secret=TU_CLIENT_SECRET
# Clave de API de Last.fm
lastfm_api_key=TU_LASTFM_KEY- Copiar
.env.examplea.enven la raíz del proyecto:
# Linux / Mac
cp .env.example .env
# Windows
copy .env.example .env- Abrir
.envy rellenar con tus propias claves de API. Ejemplo:
spotipy_api_key=abcd1234
spotipy_client_secret=efgh5678
lastfm_api_key=ijkl9012
- Ejecutar los notebooks normalmente; el código cargará las variables con
python-dotenvyos.getenv().
.env con sus credenciales. El archivo .env no se sube al repositorio, solo .env.example.
La conexión a MySQL se realiza mediante variables locales:
# Ejemplo de configuración de variables locales para MySQL
mysql_user = "tu_usuario"
mysql_password = "tu_contraseña"
mysql_host = "localhost"Cada persona puede configurar sus propios valores localmente sin que queden expuestos en el repositorio.
El proyecto ofrece dos formas de trabajar con los datos: ejecutar todo desde cero o usar los CSVs ya generados para explorar los resultados directamente.
- Configurar un archivo
.envcon tus claves de API propias para Spotify y Last.fm. - Ejecutar el Notebook de extracción de datos. Este Notebook:
- Realiza todas las llamadas a las APIs.
- Procesa y limpia los datos.
- Hace matching y normalización entre las fuentes.
- Genera los CSVs finales (
dataset_unificado.csvymaestro_artistas.csv).
- Ejecutar el Notebook de manipulación de la carga de datos, que:
- Lee los CSVs generados.
- Conecta con MySQL mediante SQLAlchemy.
- Crea la base de datos ejecutando primero
Schema_RhythmIQ.sql. - Vuelca los datos en la base de datos.
- Analizar los datos ejecutando las queries mediante
Script_queries_RhythmIQ.sql.
- Descargar los CSVs finales (
dataset_unificado.csvymaestro_artistas.csv) y mantenerlos en la misma carpeta que el Notebook de manipulación y carga de datos. - Ejecutar el Notebook de manipulación de la carga de datos:
- Conectar con MySQL mediante SQLAlchemy.
- Crear la base de datos ejecutando primero
Schema_RhythmIQ.sql. - Volcar los CSVs en la base de datos.
- Ejecutar el Script_queries_RhythmIQ.sql para realizar los análisis y explorar los resultados directamente.
| Escenario | Manejo |
|---|---|
| Track no encontrado en Last.fm | Se captura el error y el proceso continúa |
| Track sin tags | Se devuelve una lista vacía |
| Diferentes formatos de URL | Se parsean correctamente |
| Inconsistencias entre fuentes | Normalización de nombres |
| Gran volumen de datos | Guardado parcial y control de progreso |
- Paralelización de llamadas a APIs para reducir tiempos de extracción
- Inclusión de más géneros y subgéneros
- Análisis de tendencias emergentes
- Automatización completa del pipeline de datos
- Mejor manejo de Hip-Hop: normalizar subgéneros para reflejar mejor el impacto real, ya que Spotify asigna géneros a los artistas y no a los tracks.
- Ampliación de visualizaciones interactivas en Tableau
La presentación incluye:
- Contexto y objetivos del proyecto
- Flujo completo de extracción y limpieza de datos
- Ejemplo de carga y query en MySQL
- Visualizaciones y principales insights obtenidos
Proyecto académico desarrollado en el marco del bootcamp de Adalab.
Uso educativo.
Autoras:
Este trabajo ha sido realizado de forma colaborativa por: