You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.6 KiB

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# Afficher la version de pandas
print(pd.__version__)
# Lecture du fichier csv
df = pd.read_csv("spotify_songs.csv")
print(df.head(5))
# Supprimer les lignes avec des valeurs manquantes
df = df.dropna()
# Trier le DataFrame par artiste
sorted_df = df.sort_values(by='track_artist')
artistes = sorted_df["track_artist"].unique()
# Créer une liste des artistes uniques
print(artistes)
# Créer une figure pour le premier graphique
plt.figure(figsize=(10, 6))
# Extraire les noms des chansons et leur popularité
names = sorted_df["track_name"]
popularity = sorted_df["track_popularity"]
# Filtrer les chansons avec une popularité >= 90
filtered_names = [name for name, pop in zip(names, popularity) if pop >= 90]
filtered_popularity = [pop for pop in popularity if pop >= 90]
# Tracer le premier graphique en barres horizontales
plt.barh(filtered_names, filtered_popularity, color='skyblue')
plt.xlabel('Indice de popularité')
plt.ylabel('Chansons')
plt.title('Analyse des indices de popularité des chansons')
plt.grid(True)
plt.show()
# Créer un dictionnaire pour stocker la popularité par artiste
popularity_by_artist = {}
# Remplir le dictionnaire avec les indices de popularité correspondant à chaque artiste
for name, pop in zip(names, popularity):
artiste = sorted_df.loc[sorted_df['track_name'] == name, 'track_artist'].iloc[0]
if artiste not in popularity_by_artist:
popularity_by_artist[artiste] = []
popularity_by_artist[artiste].append(pop)
# Créer un dictionnaire pour stocker la popularité moyenne par artiste
average_popularity_by_artist = {}
# Calculer la popularité moyenne pour chaque artiste
for artiste, popularity_list in popularity_by_artist.items():
average_popularity = np.mean(popularity_list)
average_popularity_by_artist[artiste] = average_popularity
# Filtrer les artistes avec une popularité moyenne supérieure à 85
selected_artists = {artiste: popularity for artiste, popularity in average_popularity_by_artist.items() if popularity > 80}
# Créer un graphique pour la deuxième analyse
plt.figure(figsize=(10, 6))
# Tracer un graphique des indices de popularité moyens des artistes sélectionnés
plt.bar(selected_artists.keys(), selected_artists.values(), color='skyblue')
plt.xlabel('Artistes')
plt.ylabel('Popularité moyenne')
plt.title('Analyse de la popularité moyenne des artistes (Popularité moyenne > 85)')
plt.grid(True)
plt.xticks(rotation=90) # Pour faire pivoter les étiquettes des axes x
plt.tight_layout() # Ajuster automatiquement les sous-graphiques pour éviter les chevauchements
plt.show()