Skip to content

Commit 71e9939

Browse files
authored
Merge pull request #31 from FEFO2/new-feature
world bank proyect designed
2 parents 6f7dcd1 + 336ae52 commit 71e9939

8 files changed

Lines changed: 599 additions & 324 deletions

File tree

INSTRUCTIONS.es.md

Lines changed: 82 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1,143 +1,129 @@
1-
# Interactuando con la API de Spotify
1+
# Interactuando con la API v2 del World Bank
22

3-
Spotify se puede utilizar como fuente de datos para varios proyectos de ciencia de datos. En este ejercicio, aprenderemos a interactuar con la API de esta red social. `Spotipy` es una librería de código abierto y para Python que permite hacer un uso a alto nivel de la API de Spotify.
3+
En este proyecto vas a construir un flujo de datos completo: consumo de API, transformacion a DataFrame, analisis visual y carga a base de datos SQL.
44

5-
## Paso 1: Crear una cuenta de desarrollador de Spotify
5+
## Contexto del ejercicio
66

7-
Antes de comenzar a programar, necesitas acceso a las credenciales de desarrollador de Spotify. Visita [developer.spotify.com](https://developer.spotify.com/documentation/web-api).
7+
Trabajaras con la API publica del World Bank v2 (sin autenticacion). El objetivo es analizar la evolucion socioeconomica y ambiental de 5 paises elegidos por ti entre 2010 y 2024.
88

9-
- Inicia sesión con tu cuenta de Spotify (o crea una si aún no tienes una).
9+
### Seleccion del dataset
1010

11-
- Ve a Dashboard y haz clic en Create an App. Completa los campos requeridos. En Redirect URI, escribe: `http://localhost/`
11+
1. Elige 5 paises (ISO3) que te interesen.
12+
2. Elige los indicadores que quieras analizar.
13+
3. Recomendacion de indicadores (opcional):
1214

15+
- `SP.POP.TOTL`: Poblacion total
16+
- `NY.GDP.PCAP.CD`: PIB per capita (USD actuales)
17+
- `EN.ATM.CO2E.PC`: Emisiones de CO2 per capita (toneladas metricas)
18+
- `SP.DYN.LE00.IN`: Esperanza de vida al nacer (anios)
1319

14-
![Spotify create app](https://github.com/4GeeksAcademy/interacting-with-api-python-project-tutorial/blob/main/assets/spotify_1.PNG?raw=true)
20+
API base: `https://api.worldbank.org/v2`
1521

22+
## Requisitos tecnicos
1623

17-
Una vez creada la app, dirígete a la sección **Settings** para copiar tu `Client ID` y `Client Secret`. Los usarás más adelante para autenticarte ante la API.
24+
Debes trabajar en un archivo `.ipynb` y usar:
1825

19-
## Paso 2: Configuración inicial
26+
- `requests`
27+
- `pandas`
28+
- `matplotlib` y/o `seaborn`
29+
- `sqlalchemy`
2030

21-
- Abre la terminal y asegúrate de tener instalada la librería `Spotipy`, que es la que usaremos para conectarnos con la API de Spotify:
31+
## Paso 1: Preparar entorno
2232

23-
```bash
24-
pip install spotipy
25-
```
33+
Instala dependencias:
2634

27-
## Paso 3: Variables de entorno
28-
29-
Ya tienes el archivo `.env` en la raíz del proyecto. Asegúrate de que contenga las siguientes variables con tus credenciales de Spotify (reemplaza el contenido con tus propios datos):
30-
31-
```env
32-
CLIENT_ID=your_client_id
33-
CLIENT_SECRET=your_client_secret
35+
```bash
36+
pip install requests pandas matplotlib seaborn sqlalchemy
3437
```
3538

36-
> ⚠️ Es importante que coloques tus datos en las variables de entorno para evitar exponer tus credenciales si subes el proyecto a un repositorio.
37-
38-
Ahora, en el archivo `app.py`, agrega el siguiente código para leer las variables de entorno:
39-
40-
```python
41-
import os
42-
import pandas as pd
43-
import seaborn as sns
44-
from dotenv import load_dotenv
45-
46-
# load the .env file variables
47-
load_dotenv()
39+
Crea un notebook, por ejemplo: `src/world_bank_analysis.ipynb`.
4840

49-
# Get credential values
50-
client_id = os.environ.get("CLIENT_ID")
51-
client_secret = os.environ.get("CLIENT_SECRET")
52-
```
41+
## Paso 2: Explorar la API
5342

54-
Con esto, tus credenciales estarán listas para ser utilizadas en la autenticación con la API de Spotify.
43+
Revisa estos endpoints de referencia:
5544

45+
- Paises: `https://api.worldbank.org/v2/country`
46+
- Indicadores: `https://api.worldbank.org/v2/indicator`
5647

57-
## Paso 4: Inicializar la biblioteca Spotipy
48+
Verifica la estructura de respuesta. La API pagina resultados (habitualmente hasta `per_page=50`), asi que debes pensar una estrategia para recorrer paginas y almacenar toda la informacion necesaria.
5849

59-
- Importar Spotipy.
60-
- Realizar la conexión con la API. Para ello, puedes utilizar la función `spotipy.Spotify()`.
50+
Request de ejemplo en Python (plantilla):
6151

6252
```python
63-
import spotipy
64-
from spotipy.oauth2 import SpotifyClientCredentials
65-
66-
auth_manager = SpotifyClientCredentials(client_id=client_id, client_secret=client_secret)
67-
spotify = spotipy.Spotify(auth_manager=auth_manager)
53+
import requests
54+
55+
url = "https://api.worldbank.org/v2/country"
56+
params = {
57+
"format": "json",
58+
"per_page": 50,
59+
"page": 1
60+
}
61+
62+
response = requests.get(url, params=params, timeout=30)
63+
response.raise_for_status()
64+
payload = response.json()
65+
66+
# payload[0] -> metadatos de paginacion
67+
# payload[1] -> datos de la pagina actual
68+
print("Metadatos:", payload[0])
69+
print("Primer elemento:", payload[1][0])
6870
```
6971

70-
> 💡 NOTA: Utiliza la siguiente documentación como guía sobre los parámetros: https://spotipy.readthedocs.io/en/2.22.1
71-
72-
## Paso 5: Realizar solicitudes a la API
73-
74-
- Comienza a interactuar con la API de Spotify: Obtén de tu artista favorito, el top 10 de sus canciones. Para ello, tendrás que buscar el `ID` del artista para usarlo en la librería. Este identificador es la dirección web que tiene el artista en Spotify:
75-
76-
![Buscar el identificador del artista en Spotify](https://github.com/4GeeksAcademy/interacting-with-api-python-project-tutorial/blob/main/assets/spotify_2.png?raw=true)
77-
78-
- Una vez tengas la respuesta de la API, quédate con el elemento `tracks`, que contendrá las canciones con más reproducciones del artista, quédate con el nombre de la canción, la popularidad y la duración (en minutos).
79-
80-
> ⚠️ **NOTA** sobre posibles mensajes al ejecutar el código. Es posible que al finalizar la ejecución del script aparezca un mensaje como:
81-
82-
```
83-
Exception ignored in: <function Spotify.__del__ ...>
84-
TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union
85-
```
86-
87-
Este mensaje proviene de la librería `spotipy` y **no afecta la funcionalidad de tu código ni los resultados de la API**. Puedes ignorarlo de forma segura; se trata de un detalle interno de limpieza de objetos (**garbage collection**) que no interrumpe tu análisis.
88-
89-
90-
## Paso 6: Transformar a Pandas DataFrame
9172

92-
Puesto que el resultado obtenido en estos pasos es susceptible de tener formato de tabla, conviértelo en un DataFrame importando los datos en su formato de diccionario. A continuación, ordena las canciones por popularidad creciente y muestra el top 3 resultante.
73+
*IMPORTANTE:* El código mencionado arriba es orientativo. En el link de abajo tienes toda la información necesaria para llevar a cabo un llamado a la API:
9374

94-
## Paso 7: Analizar relación estadística
75+
https://datahelpdesk.worldbank.org/knowledgebase/articles/898581
9576

96-
¿Tiene relación la duración con la popularidad? ¿Podríamos decir que una canción que dure poco tiempo puede ser más popular que otra que dure más? Analízalo graficando un `scatter plot` y argumenta tu respuesta.
77+
## Paso 3: Descargar datos
9778

79+
Descarga series temporales 2010-2024 para los paises e indicadores que elegiste.
9880

99-
## ¿Te sientes con ganas de profundizar? 😎
100-
**Exploración avanzada de atributos musicales - Análisis extendido con enfoque interpretativo**
81+
Objetivo:
10182

102-
Si ya lograste conectarte a la API de Spotify, extraer información de tu artista favorito y representar datos básicos como popularidad y duración, te invitamos a realizar esta versión extendida del proyecto. Esta actividad opcional te permitirá incorporar nuevas variables musicales, aplicar pensamiento analítico y redactar conclusiones claras y bien fundamentadas a partir de los datos.
83+
- Consumir la API para varios paises e indicadores
84+
- Manejar paginacion cuando aplique
85+
- Guardar respuestas en una estructura temporal (lista de diccionarios)
10386

104-
---
87+
## Paso 4: Transformar respuesta a DataFrames
10588

106-
### Propuesta 🚀
107-
Aprovecha que ya tienes acceso a los datos del artista para profundizar en el análisis incluyendo nuevas métricas que ofrece la API. El objetivo es detectar patrones o características interesantes y expresarlas en un lenguaje comprensible para cualquier lector.
89+
Crea una tabla (DataFrame) por indicador para facilitar comparaciones entre paises.
10890

109-
#### Variables recomendadas para explorar:
91+
Columnas sugeridas por tabla:
11092

111-
- **Danceability**: Qué tan fácil es bailar la canción.
112-
- **Valence**: Qué tan positiva o feliz suena.
113-
- **Energy**: Intensidad o fuerza general.
114-
- **Tempo**: Velocidad (en BPM).
93+
- `country`
94+
- `year`
95+
- `value`
11596

116-
---
97+
Limpieza minima:
11798

118-
1. **Recupera los atributos adicionales:** Utiliza el método `audio_features()` para obtener los atributos musicales de las canciones de tu artista:
99+
- Eliminar filas con `value` nulo cuando sea necesario
100+
- Convertir `year` a entero
101+
- Convertir `value` a numerico
119102

120-
```python
121-
track_ids = [track["id"] for track in results["tracks"]]
122-
features = sp.audio_features(track_ids)
123-
```
103+
## Paso 5: Analisis y visualizaciones
124104

125-
2. **Crea un nuevo DataFrame con la información completa:** Combina los datos obtenidos anteriormente (`nombre, popularidad, duración`) con las nuevas métricas.
105+
Genera al menos 2 graficos y explica hallazgos en celdas Markdown.
126106

127-
3. **Realiza un análisis sencillo:** Explora los valores promedio, busca extremos, identifica correlaciones visuales o estadísticamente.
107+
Ejemplos:
128108

129-
- ¿Qué valores destacan en este artista?
109+
1. Line chart: evolucion de un indicador por pais (2010-2024)
110+
2. Scatter plot: relacion entre dos indicadores para un anio reciente
130111

131-
- ¿Existe alguna tendencia entre popularidad y otro atributo?
112+
## Paso 6: Cargar resultados a base de datos SQL
132113

133-
- ¿Hay algo que no esperabas encontrar?
114+
Usa SQLite con SQLAlchemy para persistir datos:
134115

135-
Crea una gráfica sencilla que complemente tu conclusión.
116+
- Base de datos: `world_bank_analysis.db`
117+
- Recomendacion didactica: una tabla por indicador (ejemplo: `indicator_gdp_per_capita`, `indicator_life_expectancy`, etc.)
136118

137-
4. **Haz visible tu trabajo:** Con base en el análisis, redacta una o dos frases que sinteticen lo que descubriste y publicalo en LinkedIn. El objetivo es comunicar tu hallazgo de forma objetiva, breve y con respaldo en los datos.
119+
Flujo recomendado:
138120

139-
> **Ejemplo:**
140-
>
141-
> "Las canciones más populares del artista analizado tienen un nivel de “danceability” promedio de > 0.82, lo que sugiere una clara orientación hacia lo bailable. 🕺💃 #SpotifySecrets"
121+
1. Crear engine con SQLAlchemy
122+
2. Guardar cada DataFrame con `to_sql(..., if_exists="replace")`
123+
3. Leer una muestra con `pd.read_sql()` para validar carga
142124

125+
## Cierre
143126

127+
¡Ya tienes todo para comenzar!
128+
Tomate tu tiempo para investigar la documentacion de la API y entender bien la estructura de las respuestas.
129+
Si te surge cualquier duda durante el proceso, contacta a tus mentores.

0 commit comments

Comments
 (0)