¿De qué hablan las canciones? ¿Qué sentimiento expresan sus letras? ¿Y qué pasa con los géneros o los artistas? Este proyecto trata de arrojar un poco de luz sobre estas y otras preguntas.
Este el proyecto que he creado para mi tarea the mitad de Bootcamp en IronHack.
Tenía algunos requerimientos y restricciones como las siguientes:
- Recolectar los datos por mi mismo (no se podían descargar conjuntos de datos)
- El conjunto de datos recopilado debería de tener entre 30 and 100 observaciones (filas) y de 5 a 10 características (columnas)
- Podría enriquecer el conjunto de datos con más información obtenida con otros métodos además del tecleo manual (por ejemplo, web scraping)
- Necesidad de completar un análisis para responder las preguntas que tenía que resolver con este proyecto. También debería complementar el análisis con algún tipo de hipótesis.
Mi proyecto
Mis preguntas eran sobre las leras de las canciones que solemos escuchar cada día, estas preguntas son:
- ¿Las letras de las canciones tienen un sentimiento positivo en general?
- ¿Son las letras de las mujeres más positivas que las de los hombres?
- ¿Son las letras de las canciones pop más positivas que las de hip hop?
Mi solución
Python
- Creación del conjunto de datos usando python:
Decidí recopilar la información desde Spotify Charts porque quería analizar letras de canciones globales, así que escogí el top de artistas de la semana 47 del año 2022. El proceso que seguí fue teclear en un fichero los artistas de esa lista y además también usé Last.fm para recopilar y teclear más información como género, género musical general y si era una banda o grupo.
Entonces completé el conjunto de datos buscando las 10 canciones más populares de cada artista en Spotify usando su API.
Después usé la librería de lyricsgenius para conectar al sitio web de Genius para descargar 5 de las 10 canciones recopiladas in Spotify de cada artista (porque el nombre de las canciones en Spotify no siempre tenía correspondencia en el nombre dado en Genius).
En este momento también creé una función con Selenium para obtener el token de conexión, por si acaso el token de la conexión a Genius cambiaba.
Ahora mismo está almacenado en un fichero (secrets.txt) pero podría obtenerlo sin almacenarlo. - Análisis de sentimiento:
Una vez que descargué toda la información, necesité tratarla para realizar el análisis de sentimiento (usando la librería Flair) y procesamiento de lenguaje natural (NLTK). - Traducciones:
Puesto que la lista de canciones estaban cantadas en diferentes lenguajes, decidí traducir todo a inglés para simplificar el análisis. Para realizar esto usé la librería Fasttext con su modelo pre-entrenado para detectar el idioma de las letras y entonces traducirlas a inglés con la librería translators la cual si no puede hacer la traducción, usa el traductor de Google para realizar el trabajo. - Top palabras:
Calculé el top de palabras con las funciones de NLTK y actualicé manualmente las palabras prohibidas de la lista para incluir más de las que no me interesaban en mi análisis. - Nube de palabras:
También creé una función para generar una nube de palabras con las librerías wordcloud y PIL para mostrar diferentes silueta que he descargado. - Análisis de hipótesis:
En otro documento de Jupyter, desarrolé el análisis de hipótesis y preparé el conjunto de datos para el análisis visual con Tableau
Tableau
Usé la versión pública de Tableau para crear la presentación del proyecto y el análisis visual, lo puedes encontrar en mi Tableau
Flask
El proyecto incluye una demo en Flask que permite la búsqueda de una canción de un artista y mostrará la letra con el top de palabras traducidas, el análisis de sentimiento y una nube de palabras.
With this project, my cohort gave me the chance to participate in the Remote Hackshow of Ironhack in March of 2023.
Para resumir los enlaces de mi proyecto, aquí están:
- Visualizaciones: Mi Tableau
- Código fuente (incluida la demo en Flask): Mi Github
- Video de presentación: Mi Youtube