On ne pose pas de cookies de suivi nous-mêmes. Les vidéos de cours sont hébergées sur YouTube, qui dépose ses propres cookies dès qu'une vidéo se charge — elles restent disponibles en un clic si vous préférez ne pas les accepter maintenant.
Palettes de couleurs · Python — Sup2Tech
Palettes de couleurs
0/5
Vidéo
Étape 1 sur 3, Vidéo
Créer des datavisualisations avec la librairie Seaborn
Points clés de cette vidéo
Une palette de couleurs cohérente améliore la lisibilité et l'accessibilité d'un graphique
Seaborn propose des palettes prêtes à l'emploi ("viridis", "pastel", "deep"…), applicables via le paramètre palette=
Pour des données catégorielles, une palette qualitative (couleurs distinctes) est préférable ; pour des données ordonnées, une palette séquentielle (dégradé) communique mieux l'ordre
Transcription de la vidéo
Bonjour à tous ! J'espère que vous allez bien ! Bienvenue notre deuxième épisode sur Python ! Dans le premier épisode on a un installé Anaconda, on a fait nos premiers pas avec un notebook Jupyter on a appris à importer et utiliser un module et enfin on a importé les données d'une base SQL. Dans ce nouvel épisode je vais vous montrer comment créer des graphiques super sympas en un rien de temps avec la librairie Seaborn. Voici notre épisode Dataviz avec Seaborn ! En préparant cet épisode j'ai cherché un dataset plutôt sympa pour construire nos exemples. J'en ai trouvé un qui est vraiment top, mis à disposition par Spotify, sur le site Kaggle. On va découvrir ensemble comment un data scientist peut étudier nos goûts musicaux. Alors il faut savoir que le cerveau humain assimile bien mieux les informations lorsqu'elles sont sous forme visuelle. C'est pourquoi la visualisation des données est essentielle pour explorer et analyser un jeu de données. Pour optimiser votre temps il faut bien évidemment que vous puissiez écrire rapidement et facilement des graphiques de qualité. Pour ça Seaborn est la librairie Python à connaître. C'est une librairie construite sur le package Matplotlib et le module Pandas. Grâce à Seaborn vous obtiendrez des supers graphiques en très peu de lignes de code. Dans cet épisode on va donc s'intéresser au top 100 des musiques et plus écoutées sur Spotify. On va analyser ensemble les caractéristiques de ces tubes grâce à différents types de graphiques. Ne vous inquiétez pas je vous mettrai tous les liens pour refaire le projet chez vous dans la description. Pour réaliser notre analyse on va utiliser un notebook Jupyter. Alors si vous ne vous souvenez plus comment faire je vous invite à regarder la première vidéo de cette série sur Python qui vous montrera en détail comment installer et utiliser anaconda et Jupyter. Alors dans un premier temps on va commencer par télécharger les données Spotify sur le site de Kaggle. Le lien se trouve en description. Ensuite on va upload le fichier téléchargé dans le répertoire de notre notebook. On va le renommer "top_100_Spotify", ensuite vous avez juste à appuyer sur téléverser. Ces données représentent le top 100 des musiques les plus écoutées sur Spotify. Le jeu de données a été publié en septembre 2021 donc il se peut qu'au moment où vous visionnez la vidéo le classement ne soit plus vraiment le même. Chaque ligne est un titre avec différentes caractéristiques pour le décrire. En ce qui concerne le format du fichier c'est un format csv c'est à dire que c'est un simple fichier texte dont les données sont séparées par des virgules. Ensuite on va importer les modules nécessaires. Aujourd'hui on aura besoin de Seaborn, Pandas et Pyplot. Alors juste petite précision lorsque j'écris matplotlib.pyplot ça me permet d'importer seulement le module Pyplot du package Matplotlib. Ensuite on doit charger les données. Pour ça je crée un objet data et j'utilise la fonction read_csv() du module Pandas dans laquelle je passe son argument le nom de mon fichiers ".csv". La fonction read_csv lit le fichier csv dans un dataframe. L'objet data est donc un dataframe comme celui que nous avions créé dans l'épisode précédent avec SQL. On pourrait directement travailler avec l'objet data mais c'est plutôt une bonne pratique de créer une copie pour pouvoir effectuer des modifications dessus. Cette copie on va l'appeler df. Ok top ! Avant de commencer quoi que ce soit commençons par regarder les différentes informations de df à l'aide de la fonction info(). On voit que df contient 100 lignes indexées de 0 à 99. Ensuite on a le descriptif des colonnes avec leurs noms et le data type. Le data type concerne les valeurs contenues dans chaque colonne. On peut voir que toutes les colonnes dispose intégralement de valeurs non vides. Alors ça c'est vraiment génial ça veut dire qu'on a un jeu de données de qualité, ce qui malheureusement n'est pas toujours le cas. On constate également que les trois premières colonnes "title", "artist" et "top_genre" ont des valeurs de type "object". Le type "object" correspond à du texte ou un mélange de textes et de valeur numérique. En ce qui concerne les colonnes restantes, elles contiennent toutes des valeurs de type int64, ce qui correspond à des nombres entiers. Super ! Maintenant qu'on en sait un peu plus sur df, regardons les premières lignes de notre jeu de données à l'aide de la fonction head(), qui par défaut retourne les cinq premières lignes d'un dataframe. Ok super, là on voit que chaque musique contenue dans ce top 100 possède 14 variables. On va pouvoir commencer à analyser les données. En premier lieu ce qui pourrait être intéressant c'est de mesurer les liens qui entre les différentes colonnes de notre jeu de données. Pour ça on va utiliser une matrice de corrélation qui va nous aider à détecter quel données sont corrélées. Ne vous inquiétez pas je vous explique ça en détail dans une minute. Pour afficher la matrice de corrélation on va créer un objet df_corr et appeler la fonction corr() qui retourne la matrice de corrélation sous forme de dataframe. Bon, soyons honnêtes ce n'est pas hyper parlant. Mais grâce à Seaborn on va pouvoir visualiser la matrice à l'aide d'une heatmap. On va donc appeler la fonction heatmap() du module Seaborn et passer en argument df_corr. Ok top, là on voit la heatmap avec les coefficients mais ce n'est pas très lisible à cause de la taille du graphique. Pour la gestion de l'affichage des graphiques il faut appeler la fonction figure() du module Pyplot dans laquelle on définit un couple de valeur pour le paramètre figsize. Ce couple de valeur correspond à la largeur et la longueur de l'affichage du graphique qui sont en "inches". On va les mettre à 13 et 6. Parfait ! Là on distingue correctement tous les coefficients. En ce qui concerne la matrice elle est composée de coefficients de Pearson. Il permet de détecter la présence ou non d'une relation linéaire entre deux variables - en gros si elle semblent corrélées. Ce coefficient est compris entre -1 et 1. Une valeur négative ça signifie que lorsque l'une des variables augmente l'autre diminue tandis qu'une valeur positive indique que les deux variables varient ensemble dans le même sens. La matrice de corrélation est symétrique et sa diagonale est constituée uniquement de 1 puisque la corrélation entre une variable est elle même est parfaite. En bref plus le chiffre qui s'affiche est proche de 1 ou de - 1 plus les données semblent liées. On peut donc voir qu'il existe une forte relation entre "loudness", donc l'intensité sonore, et "energy", qui est la dynamique musicale, ça veut donc dire que la mode semble donc aux morceaux qui sont énergiques et saturés. On remarque également une relation entre "valance" et "danceability". Cela implique qu'aujourd'hui, les morceaux plus joyeux vont avoir tendance à être plus propice à la danse - ce qui n'était pas vraiment le cas de Nirvana il y a 20 ans. D'autre part on constate que plus les morceaux sont récents plus ils vont être adaptés à la danse du fait de la relation entre les variables "year" et "danceability". Alors justement essayons d'en savoir un peu plus sur les années auxquelles les morceaux de ce classement sont sortis. Pour ça, on va afficher un histogramme de la variable "year" qui nous permettra de visualiser le nombre de morceaux par année. Mais avant ça on va définir le thème visuel de nos graphiques en appelant la fonction set(). Ensuite on va appeler la fonction histplot() dans laquelle on va préciser l'axe horizontal du graphique ainsi que les données que l'on souhaite visualiser. Le paramètre data permet d'indiquer dans quel dataframe se trouvent les données. Donc pour l'abscisse il suffit de mettre le nom de la colonne qui nous intéresse, dans notre cas "year". On a pas besoin de préciser quoi que ce soit pour l'axe vertical, Seaborn va directement compter le nombre de morceaux par année. Ok super ! On voit que la plupart des morceaux de ce top 100 sont sortis entre 2011 et 2021. On remarque également un pic sur l'année 2018 qui semble avoir été une année très créative. Par ailleurs le classement ne compte que quatre morceaux sortis avant 2010. Pour avoir une autre vision on peut utiliser une "boîte à moustache" ou "boxplot" en anglais. Une boxplot nous permet de visualiser la médiane, les quartiles ainsi que les valeurs minimum et maximum de notre distribution. Pour ça on peut appeler la fonction boxplot(). Ok top ! On voit le premier et le troisième quartile ainsi que la médiane. Pour être sûr des valeurs on peut taper df.year.describe et on obtient toutes les informations nécessaires à propos des valeurs contenues dans la colonne "year". On constate que sur les 100 morceaux présents au classement, 50% sont sortis après 2017. On en déduit que le public est beaucoup plus sensible aux morceaux sortis récemment. Mais qu'en est-il des artistes à l'origine de ces morceaux ? Sont-ils récents eux aussi ? Est-ce que certains figurent plusieurs fois dans ce classement ? Pour répondre à ces interrogations on va afficher tous les artistes qui sont présents 3 fois ou plus dans ce classement et le nombre de fois correspondant. Pour ça on va utiliser ce qu'on appelle un "diagramme en barres" ou "barplot" en anglais. Mais avant ça on va créer un nouveau dataframe contenant uniquement les informations qui nous intéressent. On va l'appeler des df_top_artist. Dans un premier temps on va appeler la fonction value_counts() sur la colonne "artist". Ensuite on filtre les résultats à l'aide de loc. Et enfin on restructure le nom des colonnes à l'aide de rename_axis() et reset_index(). On obtient un dataframe contenant les 9 artistes les plus présents dans le top 100. Ok super ! Maintenant pour visualiser ce dataframe on appelle la fonction barplot() dans laquelle on passe un argument les axes horizontaux et verticaux ainsi que les données à visualiser. Vous pouvez aussi définir la gamme de couleurs de votre graphique à l'aide du paramètre palette. Si vous tapez par exemple "Color Guide to Seaborn Palettes" dans votre navigateur vous trouverez une page sur le site Medium qui référence toutes les palettes possibles avec Seaborn. On peut également ajouter un titre et un graphique avec le paramètre title de la fonction set(). Ok parfait ! En observant le graphique on retrouve des artistes très connus comme Post Malone, Ed Sheeran ou Justin Bieber. Cependant on constate que Post Malone domine très largement le classement. Alors du coup ce qui pourrait être intéressant c'est de regarder d'un peu plus près les caractéristiques de ses morceaux. Pour ça on va utiliser un autre type de graphique : les "kernel density estimate plot" en français ça signifie graphique d'estimation de la densité par noyau. Alors pas de panique je sais que le nom fait peur mais je vais vous expliquer, vous allez très rapidement comprendre. Tout d'abord on va commencer par afficher le graphique, ce sera beaucoup plus parlant. Pour ça on va appeler la fonction kdeplot() et lui passer les données à visualiser en argument. En ce qui concerne les données on va indiquer qu'on ne s'intéresse qu'aux morceaux pour lesquels la valeur de la colonne "artist" est égale à Post Malone. Et enfin on précise qu'on ne souhaite pas prendre en compte les colonnes "year" et "popularity" car elles ne sont pas vraiment utiles pour notre analyse. Pour ce qui est des colonnes "title", "artist" et "top genre", ça ne pose aucun problème puisque kdeplot() ne prend en compte que les colonnes ayant des valeurs numériques. Ok super ! On obtient un joli graphique avec des courbes sinusoïdales. Ce qui nous intéresse c'est le sommet de chaque courbe et la valeur en abscisse correspondante. Prenons un exemple : si on regarde la courbe "loudness" on voit que le sommet correspond à une valeur d'environ -6 en abscisses et bien ça signifie que sur l'ensemble des morceaux de Post Malone dans la colonne "loundness" - 6 correspond à la valeur avec la plus grande probabilité. D'ailleurs on peut le vérifier très simplement en affichant les morceaux de Post Malone. Là on voit que 3 morceaux sur 7 ont pour valeur -6 dans la colonne "loudness". Pour résumer les kdeplot permettent d'avoir une idée des valeurs qu'on va retrouver dans chaque colonne. Maintenant si on poursuit notre analyse on s'aperçoit que les morceaux de Post Malone ne sont pas très riches en paroles et plutôt mélancoliques cependant ils semblent plutôt adaptés à la danse. Quant au rythme des succès de Poste Malone, ils sont plutôt cadencés ! Ça se voit dans cette courbe d'ailleurs. Ok super ! Maintenant qu'on en sait un peu plus sur les caractéristiques des morceaux de l'artiste le plus écouté, essayons de voir s'il n'y a pas des similitudes avec d'autres artistes, Ed Sheeran par exemple. Pour une meilleure visibilité on va utiliser la fonction subplot() du module Pyplot dans laquelle on passe en argument la disposition de nos graphiques. Dans notre cas on aura 1 ligne et 2 colonnes. Ensuite il suffit d'afficher nos deux graphiques en précisant leur positionnement à l'aide du paramètre ax. Ok top ! On voit bien les deux graphiques l'un à côté de l'autre et là c'est assez surprenant parce qu'on s'aperçoit que les graphiques sont plutôt similaires. On observe une différence au niveau des pulsations par minute. Ce qui signifie que les morceaux de Ed Sheeran sont globalement moins cadencés que ceux de Post Malone. En revanche au niveau de l'énergie et la "danceability" les deux artistes sont plutôt similaires avec des valeurs qui situent entre 50 et 75. On remarque également que les morceaux de Ed Sheeran sont un peu plus longs dans l'ensemble. Alors si je résume dans cette vidéo on a appris à utiliser le module Seaborn mais on a aussi détaillé le processus d'analyse d'un jeu de données. Alors bien évidemment il reste une multitude de graphiques et de paramètres à explorer dans le module Seaborn. Ne vous inquiétez pas on aura l'occasion d'y revenir très vite. En attendant j'espère que ça vous a donné envie de manipuler et visualiser des données ! Si vous avez des questions n'hésitez pas à les poser en commentaire, j'y répondrai avec grand plaisir ! Dans le prochain épisode on continuera avec python et on parlera d'intelligence artificielle, de machine learning et de deep learning ! N'oubliez pas de vous abonner de mettre un petit like sur la vidéo ça fait toujours plaisir et je vous dis à très vite sur inpulse.tv !!