Ce projet vise à extraire des données de musique depuis l'API Spotify, à filtrer les chansons par date de sortie, et à visualiser les tendances des morceaux populaires pour les périodes choisies. Nous allons effectuer le scraping des données musicales (titres, artistes, albums, popularité) puis visualiser les résultats dans un tableau de bord Power BI.
Récupérer les chansons populaires sur Spotify pour l'année 2024, puis filtrer ces données par périodes spécifiques afin d'analyser les tendances musicales.
Pour accéder aux données via l'API Spotify, vous devez utiliser vos client_id et client_secret en obtenant les informations d'authentification auprès de Spotify for Developers. ( Home | Spotify for Developers)
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
# Vos identifiants Spotify
CLIENT_ID = 'votre_client_id'
CLIENT_SECRET = 'votre_client_secret'
# Configuration de l'authentification
client_credentials_manager = SpotifyClientCredentials(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
Pour chaque année spécifiée, nous utilisons l'API Spotify pour récupérer les informations des chansons populaires, y compris la durée en millisecondes, la popularité, les images des albums, et d'autres métadonnées. Voici un exemple pour l'année 2024.
# Fonction pour récupérer les chansons d'une année donnée
def get_tracks_by_year(year, market='FR'):
query = f'year:{year}'
tracks = []
limit = 50
offset = 0
while offset < 1000: # Limite à 1000 résultats pour éviter les erreurs
try:
results = sp.search(q=query, type='track', limit=limit, offset=offset, market=market)
if not results['tracks']['items']:
break
for item in results['tracks']['items']:
track_info = {
'track_name': item['name'],
'artist_name': item['artists'][0]['name'],
'album_name': item['album']['name'],
'release_date': item['album']['release_date'],
'popularity': item['popularity'],
'duration_ms': item['duration_ms'],
'explicit': item['explicit'],
'external_url': item['external_urls']['spotify'],
'album_cover_url': item['album']['images'][0]['url'] if item['album'].get('images') else None
}
tracks.append(track_info)
offset += limit
except spotipy.exceptions.SpotifyException as e:
print(f"Une erreur s'est produite : {e}")
break
return tracks
# Extraction des données pour l'année 2024
tracks_2024 = get_tracks_by_year(2024)
Après avoir récupéré toutes les chansons de l'année 2024, nous pouvons les filtrer pour ne garder que celles publiées entre janvier et avril 2024, puis mai à août 2024.
from datetime import datetime
# Fonction pour filtrer les chansons de janvier à avril 2024
def filter_tracks_jan_to_apr(tracks):
filtered_tracks = []
for track in tracks:
release_date = track['release_date']
try:
release_date_obj = datetime.strptime(release_date, '%Y-%m-%d')
except ValueError:
continue
if release_date_obj.year == 2024 and 1 <= release_date_obj.month <= 4:
filtered_tracks.append(track)
return filtered_tracks
# Filtrer les chansons de janvier à avril
tracks_jan_to_apr = filter_tracks_jan_to_apr(tracks_2024)
# Fonction pour filtrer les chansons de mai à août 2024
def filter_tracks_may_to_august(tracks):
filtered_tracks = []
for track in tracks:
release_date = track['release_date']
try:
release_date_obj = datetime.strptime(release_date, '%Y-%m-%d')
except ValueError:
continue
if release_date_obj.year == 2024 and 5 <= release_date_obj.month <= 8:
filtered_tracks.append(track)
return filtered_tracks
# Filtrer les chansons de mai à août
tracks_may_to_august = filter_tracks_may_to_august(tracks_2024)
Une fois les chansons filtrées, les données seront sauvegardées dans des fichiers JSON pour être ensuite importées dans Power BI.
import json
# Sauvegarder les résultats dans un fichier JSON
with open('tracks_jan_to_apr_2024.json', 'w', encoding='utf-8') as f:
json.dump(tracks_jan_to_apr, f, ensure_ascii=False, indent=4)
with open('tracks_may_to_august_2024.json', 'w', encoding='utf-8') as f:
json.dump(tracks_may_to_august, f, ensure_ascii=False, indent=4)