¡Bienvenidos, muy buenos días tardes o noches , según donde me leas !
En el fascinante mundo de los datos, la visualización y el análisis de información se han convertido en pilares fundamentales para la toma de decisiones informadas. La creación de informes efectivos puede marcar la diferencia en la comprensión y explotación de datos complejos. Hoy, vamos a explorar un emocionante viaje tecnológico que nos llevará desde la recreación de un informe original hasta la optimización de este con herramientas y lógica de programación.
Recreando el informe de Inja Park de su canal de YouTube, se observan diferencias notables en el enfoque del diseño. Mientras que el fichero utilizado por Inja es un archivo CSV, el mío se encuentra en formato XLSX.
La fuente de descarga que utilizaremos para acceder a los datos necesarios es Kaggle. Puedes obtener el conjunto de datos desde el siguiente enlace: enlace de Kaggle, donde podrás descargarlo de manera sencilla.
El objetivo principal es obtener las imágenes de portada de cada una de las canciones listadas en el conjunto de datos utilizando la API de Spotify y generar un código en Python para realizar esta tarea.
Para llevar a cabo este proceso, sigue estos pasos:
- Descarga Python desde python.org e instálalo. Es importante asegurarse de marcar la casilla ‘Add to Path’ durante la instalación.
- Si aún no tienes instalada la biblioteca Pandas, puedes hacerlo abriendo la terminal de tu máquina y ejecutando el siguiente comando:
pip install requests pandas
. Pandas es una biblioteca que nos permitirá trabajar con los datos de manera eficiente. - Regístrate de forma gratuita en Spotify Developer Platform a través de este enlace: registro en Spotify Developer. Lo más importante aquí es obtener tus credenciales:
client_id
yclient_secret
.
El código que he desarrollado sigue una lógica diferente, ya que se encarga de procesar los datos creados con Python. El código realiza una verificación y un análisis de los caracteres especiales y distintos que puedan estar presentes en los datos.
A continuación, explicaré la lógica que apliqué, aunque no es necesario seguirla al pie de la letra:
Lógica del Código Paso a Paso:
Objetivo General: El código tiene como objetivo, a partir de una lista de canciones contenida en un archivo CSV, buscar la imagen de portada de cada canción en Spotify y añadir la URL de la imagen en el mismo archivo CSV.
- Autenticación en Spotify: Antes de interactuar con la API de Spotify y recuperar información, es necesario autenticarse. La API de Spotify utiliza OAuth para la autenticación, por lo que se requiere un «token» para este propósito.
- Se utilizan las credenciales
client_id
yclient_secret
(proporcionadas al registrarse en el portal de desarrolladores de Spotify) para obtener dicho token. - Para lograrlo, se efectúa una solicitud POST a la API de Spotify, enviando las credenciales codificadas en base64.
- En caso de una autenticación exitosa, Spotify devuelve un token que será usado en las solicitudes posteriores.
- Se utilizan las credenciales
- Búsqueda de Portadas de Canciones:
- Para cada canción listada en el archivo CSV, se busca su portada en Spotify.
- Se crea una consulta de búsqueda combinando el nombre de la canción y el nombre del artista.
- Utilizando este criterio de búsqueda, se efectúa una solicitud GET a la API de Spotify, incluyendo el token obtenido previamente para la autenticación.
- Si se encuentra la canción en Spotify, se extrae la URL de la imagen de portada de la respuesta.
- Actualización del archivo CSV:
- Una vez se obtiene la URL de la imagen de portada para una canción, se añade esta información al archivo CSV.
- Para ello, se crea o actualiza una columna denominada
url_portada_spotify
en el archivo CSV y se asigna la URL de la imagen de portada correspondiente. - Este proceso se repite para todas las canciones en el archivo CSV.
- Al completar el procesamiento de todas las canciones, se guardan las actualizaciones en el mismo archivo CSV.
Procedo a explicar el código creado
¡Por supuesto! Vamos a analizar el código línea por línea:
- Importaciones
«`python
import pandas as pd
import requests
import base64
«`
– pandas: Es una biblioteca popular en Python para la manipulación y análisis de datos. En este caso, se utiliza para leer y escribir el archivo CSV.
– requests: Permite realizar peticiones HTTP en Python. Se usa para hacer llamadas a la API de Spotify.
– base64: Módulo que permite codificar y decodificar datos usando la codificación base64, que es requerida para obtener el token de Spotify.
- Variables de cliente
«`python
client_id = «»
client_secret = «»
«`
Estas dos variables contienen las credenciales del cliente proporcionadas por Spotify para acceder a su API.
- Función obtener_token_spotify()
Esta función solicita un token de acceso a la API de Spotify.
«`python
def obtener_token_spotify(client_id, client_secret):
auth_url = «https://accounts.spotify.com/api/token»
«`
Se define la URL a la que se va a hacer la petición para obtener el token.
«`python
headers = {
«Authorization»: f»Basic {base64.b64encode(f'{client_id}:{client_secret}’.encode()).decode()}»,
«Content-Type»: «application/x-www-form-urlencoded»
}
«`
Se configuran las cabeceras para la petición. La cabecera de `Authorization` lleva una codificación en base64 del `client_id` y `client_secret`.
«`python
data = {
«grant_type»: «client_credentials»
}
«`
Se define el tipo de autorización que se solicita. En este caso, es `client_credentials` que es para aplicaciones sin usuario final.
«`python
r = requests.post(auth_url, headers=headers, data=data)
if r.status_code == 200:
return r.json().get(«access_token»)
else:
return None
«`
Se realiza una petición POST y, si es exitosa, se devuelve el token de acceso. Si no, se devuelve `None`.
- Función obtener_portada_spotify()
Esta función busca la portada de una canción en Spotify.
«`python
def obtener_portada_spotify(token, track_name, artists_name):
«`
Se pasan como argumentos el token, el nombre de la canción y el nombre del artista.
«`python
search_url = «https://api.spotify.com/v1/search»
query = f»{track_name} {artists_name}»
«`
Se define la URL de búsqueda de Spotify y se crea la consulta.
«`python
headers = {
«Authorization»: f»Bearer {token}»
}
«`
Se establecen las cabeceras para la petición.
«`python
params = {
«q»: query,
«type»: «track»,
«limit»: 1
}
«`
Se configuran los parámetros de la búsqueda.
«`python
r = requests.get(search_url, headers=headers, params=params)
try:
return r.json()[«tracks»][«items»][0][«album»][«images»][0][«url»]
except (KeyError, IndexError):
print(f»No se encontró portada para: {track_name} de {artists_name}»)
return None
«`
Se realiza una petición GET y, si se encuentra una coincidencia, se devuelve la URL de la portada. Si no, se devuelve `None`.
- Obtención del token y verificación
«`python
token = obtener_token_spotify(client_id, client_secret)
if not token:
print(«Error obteniendo el token de acceso.»)
exit()
«`
Se obtiene el token de acceso y, si no se recibe, se termina la ejecución.
- Lectura del archivo CSV y búsqueda de portadas
«`python
ruta_csv = r»C:\Users\a2139\Documents\00_PERSONAL\spotify bonito\spotify-2023.csv»
df = pd.read_csv(ruta_csv, encoding=»ISO-8859-1″)
df[‘url_portada_spotify’] = df.apply(lambda x: obtener_portada_spotify(token, x[‘track_name’], x[‘artist(s)_name’]), axis=1)
Se lee el archivo CSV, y para cada fila, se utiliza la función
Ahora procedemos a crear el diseño de fondo en PowerPoint. Creamos diferentes diseños personalizados para la distribución visual, similar a la del diseño original, excepto por los filtros. Deseo crear una opción de menú desplegable para que puedan filtrar por las categorías que deseen. La imagen de fondo que utilicé se encuentra en este repositorio. En estas imágenes, deseamos validar los procesos. Creamos una única imagen de fondo para tenerla de fondo. Realizamos una creación diferente del panel y del menú de navegación. También creamos una portada para la imagen.
Ahora llevamos nuestros diseños directamente a Power BI. Comenzamos a modelar los datos y creamos un calendario con los datos existentes. En este ejemplo, se explica cómo hacerlo usando ‘Bravo’, pero no es obligatorio; es una manera más de crear una tabla de calendario. Primero, creamos una columna de fecha en la tabla de eventos, con la cual tenemos las fechas de nuestro conjunto de datos. Luego, con esta columna, creamos una tabla de calendario utilizando la función ‘calendar’.
Ahora bien, para la creación de los primeros gráficos, recomiendo utilizar medidas explícitas en lugar de implícitas. Arrastrar y soltar columnas no es la práctica correcta; lo correcto es tener el control de las medidas.
Lo primero será crear una tabla de medidas, comenzando con la primera medida llamada «suma de streams» para el gráfico de barras. Luego creamos otras medidas básicas para el gráfico de líneas. Añadimos los filtros, que en mi caso los ubicaré en el lado izquierdo. Empezamos a crear el KPI del cuadro en el cual estamos trabajando, para lo cual utilizamos las medidas de la parte superior izquierda. Para organizar estas medidas, las agrupamos en una sola carpeta para tenerlas ordenadas. La medida para calcular la cantidad de streams por año, es decir, la suma de la columna ‘stream’ dividida por la cantidad de filas de ese año, que se refiere a la cantidad de canciones lanzadas ese año. Usamos la función ‘ALLEXCEPT’ para eliminar todos los filtros excepto el de año del calendario.
Ahora procedemos a explicar la medida llamada ‘TOP CANCIONES vs AVERAGE’, para la cual utilizaremos una de las actualizaciones de este año llamada ‘Formato Dinámico’, con la cual podemos dar formato personalizado a nuestras medidas.
Ahora entramos en la fase de HTML o la visualización de HTML contenido en el cual trabajaremos
. En este caso, usaremos la siguiente imagen con el siguiente código para usar las imágenes descargadas. Pasamos a hacer el código de Deneb. Lo primero será, claro está, descargar Deneb. En este repositorio, encontramos el código base con el cual podremos trabajar: enlace del repositorio. Esto es muy interesante de desarrollar; desde que conocí Deneb Vega Lite hace ya casi un año y medio, ¡es súper divertido trabajar con ello y encontrar desarrollos tan geniales como este!
Ahora vamos al siguiente diseño, que es un heatmap realizado con Deneb. También tenemos otro desarrollador con el cual debemos gestionar este proceso, en el cual manejamos los cambios. Pero como lo creamos a mano, los nombres de los meses, días de la semana y cantidades son importantes.
Ahora vamos a los pasos de gestión en los cuales manejaremos los temas de visualización. Para la paleta de colores, puedes encontrarla en el siguiente enlace: enlace de la paleta de colores.
Este viaje tecnológico nos ha llevado desde la obtención de datos hasta la creación de visualizaciones impactantes en Power BI. A lo largo de este artículo, exploramos tecnologías como Python, Pandas, y la API de Spotify, así como técnicas avanzadas para la visualización de datos. El mundo de los datos es vasto y apasionante, y con las herramientas adecuadas, las posibilidades son infinitas.
Portafolio: https://www.novypro.com/project/informe-spotify
Informe en power bi: https://app.powerbi.com/view?r=eyJrIjoiYjY4ZjZiODEtOGQ4NC00MDlmLTkzMTEtMTQ4NmRiMGY1MWIwIiwidCI6IjkxMTVmY2FmLWE5NGQtNDBiMS1hM2JhLWIwNjJjODA1NTVlMCIsImMiOjl9
Video del informe:https://youtu.be/A43cP3Mordw
Repositorio con el código:https://github.com/vicente2121/Codigos_usados_spotify
Business Intelligence Technical.
Perfil linkedin