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
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()
|