Visualisation des données

Dans ce chapitre, nous allons voir les bases de la visualisation de données en R. Il existe un certain nombres de fonctions de base de R qui permettent de réaliser des graphiques. Nous allons néanmoins éviter les étudier : elles sont limitées dans leurs possibilités, et la plupart des utilisateurs abandonnent leur usage au fur et à mesure de leur progression en R.

Nous allons plutôt apprendre à utiliser le package ggplot2 (souvent abréagé sous le nom de ggplot , car il n'existe en réalité pas de package "ggplot1" !), qui est le package utilisé par l'immense majorité des useRs. Ggplot est un package très complet, un peu difficile à prendre en main pour un débutant, mais qui offre des possibilités quasi-ilimités. Il est possible de réaliser quasiment n'importe quel type de graphique avec, et de les personaliser de façon à les rendre unique. Par exemple, la plupart des graphiques du Wall Street Journal sont réalisés en R avec ggplot.

Couvrir l'ensemble des options qu'offre ggplot prendrais un livre entier, mais nous allons essayer de vous apprendre à réaliser simplement les graphiques de bases à l'aide de ce package. Si vous souhaitez un jour découvrir toutes la puissance de ggplot, n'hésitez pas à lire l'excellent livre sur le sujet, écrit par l'auteur du package ggplot lui-même.

Installation

Ggplot fait partie de base du tidyverse , il devrait donc être déja installé et disponible. Dans le cas contraire, vous pouvez l'installer manuellement, puis charger le package :

install.packages("ggplot2")
library("ggplot2")

Introduction à la philosophie de ggplot

Ggplot2 se base sur le livre “grammar of graphics”, publié en 1999. L’idée générale est de décomposer la construction d’un graphique en différents élements un peu comme on peut décomposer la structure d’une phrase à l’aide de régles gramaticales.

Chaque élément est appellé un layer, ou une couche en français. Nous allons néanmoins garder le terme anglais, plus souvent utilisé. Il existe dans ggplot2 sept catégories de layers différents. Un graphique se compose ainsi d’un certain nombre de layers de différentes catégories.

Les trois premiers layers sont indispensables pour afficher un graphique et tous graphique doit ainsi disposer de ces trois couches de base pour pouvoir s’afficher. Les quatres autres layers plus avancés permettent de paramétrer plus finement l’affichage des données, nous les découvrirons plus tard.

Voici pour l’instant les trois layers indispensables pour dessiner un graphique avec ggplot2 :

  • Data : Contient les données qui vont être utilisées pour le graphique, sous la forme d’un data frame. Si vous données ne sont pas sous forme de dataframe il faut alors les convertir.
  • Aesthetics : Indique les élèments visuels du graphique, ce qui comprends la relation entre les données à représenter, la couleur des élèments, les noms des données à représenter, le type de ligne utilisé etc.
  • Geometrics : Les éléments geometrics permetent de dessiner des lignes, points et forme sur le graphique. Ces élements peuvent soit être liés au données (car ils forment la représentation graphique des données) soit venir s’ajouter.

Découverte des layers de base

Comme un exemple vaut milles mots, voici un code de base qui utilise le dataframe women _fourni de base avec R (Certains data frames sont fournis de base avec R ou certains packages, ce qui permet de facilement s'entrainer avec !). Ce dataframe _women contient la taille (height) et le poids (weight) de 22 femmes. On peut regarder les premiéres lignes de ce tableau de données avec la fonction head() :

head(women)

Nous aimerions bien voir graphiquement si il existe une relation entre la taille et le poids. On peut noter ici que les données sont exprimées en unités anglo-saxones (pouces pour la taille et livres pour le poids très probablement), mais cela ne pose pas vraiment probléme vu que ce qui nous intéresse est uniquement la représentation graphique des données.

Voici comment représenter la taille en fonction du poids avec ggplot :

graph1 = ggplot(data = women, aes(y = height , x = weight)) +
    geom_point()
show(graph1)

Le résultat s'affichera alors directement dans votre onglet Plots du paneau de droite en bas :

Analysons le code que l'on vient de produire. On créer un graphique avec la fonction ggplot() , que l'on enregistre dans la variable graph1 , qui est ensuite affiché via show(graph1) . On reconnait aussi les trois éléments d'un graphique :

  • Les données : le tableau de données women.
  • Le mapping Aesthetics : aes(y = height , x = weight) . Cela indique que l'on va représenter la taille en y et le poids en x. Il s'agit bien d'un élément visuel/ On parle de "mapping" parfois, car cela indique comment les données sont associées.
  • Un layer géométrique via geom_point() qui indique que on doit représenter les données via des points.

La construction du graphique fonctionne ainsi en deux étapes :

  • (1) On utilise la fonction ggplot() pour fournir les données et pour indiquer la relation de données à représenter.
  • (2) On ajoute un layer via + geom_point() qui va indiquer comment représenter ces données. Le + permet d'ajouter des layers après la fonction ggplot(). Si on ajoute pas au moins un layer graphique, il est impossible d'afficher le graphe. On pourrait ainsi continuer à ajouter d'autres layers de la même façon , en les ajouter avec le signe + !

Tous les graphiques que nous allons voir fonctionnerons sur ce même principe.

Les principaux types de graphiques

Nous allons voir comment réaliser les principaux types de graphiques possibles, pour que vous puissez rapidement produire vos propres représentations graphiques. Ensuite nous apprenderons quelques éléments de personalisations (légende, couleurs, etc.).

Histogramme

Un type de graphique les plus souvent utilité est histogramme. Les données de notre dataset women ne sont pas vraiment appropriées pour une représentation en histogramme. Nous devons changer de data set d'exemple. Pour cette fois, essayons de représenter les différents tirages aléatoires d'une loi normale. Nous avons vu cela au chapitre 11 de la partie 2 du cours.

echantillon = rnorm(100) #on tire 100 valeurs d'une loi normale centrée réduite
donnees = data.frame(x = echantillon) #On met nos valeurs dans un data frame

Nous n'oublions pas de mettre notre vecteur d'échantillon dans un tableau de données, car ggplot ne travaille qu'avec des data frames. Nous disposons alors d'un tableau de données qui contient un échantillon aléatoire.

head(donnees)

Représentons ces données via un histogramme :

graphe2 = ggplot(data = donnees, aes(x = x)) +geom_histogram()
show(graphe2)

On peut remarquer deux changements importants par rapport au code du graphe précédent :

  • Dans aes() nous avons uniquement spécifé une variable x . En effet, dans un histogramme cela n'aurait pas de sens de donner une variable y .
  • Cette fois nous changeons le nom du layer graphique que l'on ajoute. Ce n'est pas geom_point() mais geom_histogram() . C'est le layer graphique qui permet de représenter les histogrammes.

Personnaliser notre histogramme :

On peut personaliser plusieurs paramétres de notre histrogramme. Pour cela, il faut le plus souvent passer des paramétres a geom_point() .

Changer les couleurs

Notre graphique de base n'est pas très lisible ni spécialement joli. Un peu de couleur ne lui ferait pas de mal ! On peut changer la couleur intérieure des barres avec fill , ou la couleur de remplissage avec color :

graphe2 = ggplot(data = donnees, aes(x = x)) +geom_histogram(color = "blue", fill = "coral")
show(graphe2)

C'est plus beau comme ça non ?

Pour avoir une liste des noms de couleurs acceptées, vous pouvez vous rendre sur ce site. Chaque nom de couleur doit être passé sous forme de chaine de caractère au paramétre correspondant. Il est aussi possible de spécifier un code couleur hexadécimal si vous voulez utilisez des couleurs spécifiques.

Changer le nombre de barres

Par défaut, les histogrammes ont une finesse qui permet d'afficher 30 barres. On peut vouloir avoir un affichage plus fin (ou plus grossier) en changant manuellement ce paramètre, via binds qui est le nombre de barres à afficher. Ici, affichons 70 barres. On peut constater que le graphe est plus détaillé :

echantillon = rnorm(1000) #on tire 1000 valeurs d'une loi normale centrée réduite
donnees = data.frame(x = echantillon)
graphe2 = ggplot(data = donnees, aes(x = x)) +
    geom_histogram(bins = 70)
show(graphe2)

Remarque : Il est aussi possible de spécifier non pas le nombre de barres, mais la largeur de chaque barre via le paramètre binwidth.

echantillon = rnorm(1000) #on tire 1000 valeurs d'une loi normale centrée réduite
donnees = data.frame(x = echantillon)
graphe2 = ggplot(data = donnees, aes(x = x)) +
    geom_histogram(color = "blue",
                            fill = "coral",
                            binwidth = 0.1)
show(graphe2)

Selon votre cas, il est parfois plus utile de spécifier le nombre de colonnes ou la largeur de chaque colonne. Vous pouvez aussi tester différentes valeurs pour ces paramétres, jusqu'a trouver un rendu qui vous convient.

Diagramme en bâtons (Bar chart)

Les diagrammes en bâtons sont également très souvent utilisées pour comparer des données entre elles. Ils sont par ailleurs faciles à lire. Ici, on va utiliser les données du tableau de données msleep , fournit de base avec R. Ce data frame contient des observations sur la durée de sommeils de différents animaux. On peut afficher les premiéres observations :

View(msleep)

Ce qui nous intéresse est de savoir combien d'animaux de chaque type (carnivores, herbivores, homnivores, etc) sont présents dans l'ensemble de données. On aimerai représenter un graphique qui indique le nombre d'animaux de chaque catégorie. Pour cela, on va utiliser le layer geo_bar() .

graph3 = ggplot(msleep, aes(vore)) + geom_bar()
show(graph3)

Il suffit de spécifier en aes() le nom de la variable qui nous intéresse (ici vore qui indique le type de chaque animal), puis d'ajouter le layer.

Là aussi, il est possible de personnaliser la couleur des barres comme on l'avait fait pour l'histogramme :

graph3 = ggplot(msleep, aes(vore)) + geom_bar( color = "black", fill = "coral")
show(graph3)

C'est mieux avec un peu de couleurs non ?

Courbe graphique (Line chart)

Voyons maintenant comme réaliser une courbe graphique, ou line chart en anglais. Il s'agit simplement de relier entre eux les différents points de notre ensemble par une ligne. Ces graphiques sont souvent utilisés pour des données temporelles par exemple.

Commençons par créer un data frame qui comporte les ventes d'un produit pour les années 2010 à 2018 :

annee = c(2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018)
ventes = c(115, 116, 124, 133, 145, 135, 143, 150, 168)
data = data.frame(annee = annee, ventes = ventes)

On aimerait maintenant représenter sous forme d'un graphe l'évolution des ventes. On va pour cela utiliser le layer graphique geom_line() :

graph4 = ggplot(data, aes(annee, ventes)) +geom_line()

Il est possible de personnaliser la couleur du trait ainsi que son épaisseur avec les différents paramétres de geom_line() . Les paramétres sont color pour le choix de la couleur, et size pour l'épaisseur du trait.

graph4 = ggplot(data, aes(annee, ventes)) +geom_line(color = "coral", size = 2)
show(graph4)

Remarque : En général, les données temporelles ne sont pas exprimées sous la forme d'un data frame, mais sous la forme d'objets de type série temporelles. Bien que les données temporelles n'entrent pas dans le cadre de ce cours, n'hésitez pas vous renseignez sur leur manipulation et sur leur représentation graphique.

Personnaliser son graphique

Nous allons voir maintenant de nouveaux élèments de personnalisation de notre graphique. En particulier, regardons comment on peut lui donner un nom, en modifier les noms des axes, et comment on peut en modifier l'apparence générale à l'aide des thèmes.

Titres et noms des axes

Les graphiques que nous avons réalisés manquent de quelque chose non ? Il leur manque un titre ! Heureusement, il existe un layer labs() qui permet facilement de titrer le graphique, lui donner un sous titre, et modifier les noms des axes. Reprennons notre précédent graphique et améliorons le :

graph4 = ggplot(data, aes(annee, ventes)) + 
    geom_line(color = "coral", size = 2) +
    labs(
        title = "Evolution des ventes de l'entreprise",
        subtitle = "Entre 2010 et 2016",
        y = "Volume des ventes",
        x = "Année"
    )
show(graph4)

Et voici le résultat :

Un graphique propre et présentable ! N'hésitez pas à ajouter ce layer à vos graphiques pour les personnaliser.

Modifier le thème de notre graphique

Les graphiques de base de ggplot sont jolis, mais il est possible de faire encore mieux. Il est possible de réaliser des thèmes graphiques qui permettent de personaliser totalement l'apparence d'un graphique. Voici par exemple le graphique précédent avec un thème totalement personnalisé :

Réaliser un thème personnalisé complet est néanmoins largement hors de porté de l'ambition de ce cours. A titre d'exemple, le thème utilisé au dessus demande une centaine de ligne pour être décrit ! Heureusement pour nous, il existe un certain nombres de thèmes existants, que l'on peut ajouter à nos graphiques comme on ajoute un layer.

Pour dispose de ces thèmes, il faut installer le package ggthemes et le charger :

install.packages("ggthemes")
library("ggthemes")

Utilisons le thème theme_economist() , qui vise à donner a vos graphiques l'apparence de ceux publiés dans le journal "the economist". Il nous suffit d'ajouter le nom du thème en tant que layer.

graph4 = ggplot(data, aes(annee, ventes)) + 
    geom_line(color = "coral", size = 2) +
    labs(
        title = "Evolution des ventes de l'entreprise",
        subtitle = "Entre 2010 et 2016",
        y = "Volume des ventes",
        x = "Année"
    ) + theme_economist()
show(graph4)

Et voilà le résultat :

Il existe de nombreux thèmes disponibles dans le package ggthemes . Vous pouvez trouvez la liste ici, ainsi que un appercu de chaque thème. Vous pouvez ainsi facilement réaliser des graphiques d'apparence soignée, en ajoutant un seul layer de thème à votre code.

Enregister son graphique

Maintenant que nous avons un graphique impressionant, il serait intéressant de pouvoir l'enregistrer sur notre ordinateur non ? Pour cela, il va nous faloir appeller la fonction ggsave() qui permet d'enregistrer les graphiques réalisés par ggplot .

ggsave(file = "mon_super_graphique.png", plot = graph4)

Cette fonction prend deux paramétres principaux. Le premier, file indique le nom du fichier qui sera créee, avec son chemin. Ici on l'enregistre directement dans le dossier de travail. N'oubliez pas de spécifier l'extension de l'image, ici .png . Le paramétre plot spécifie la variable qui contient le graphique que l'on veut enregistrer.

A retenir :

  • Le package le plus utilisé pour créer des graphiques est le package ggplot , qui fait parti du tidyverse .
  • Un graphique se compose au moins de trois layers de base : des données, un Aesthetics, et un layer géométrique. On peut ensuite ajouter différents layers, comme ceux pour la légende ou pour changer le thème du graphique.
  • Il existe un layer géométrique pour chaque type de graphique que l'on peut vouloir représenter. Nous avons vu ici les principaux types de graphiques.
  • Vous pouvez personnaliser la couleur de votre graphique à partir du layer géométrique, via les paramètres color et fill .
  • Il est possible personnaliser la légende et les axes de son graphique avec le layer labs() .
  • Vous avez la possibilité d'ajouter un thème à votre graphique pour en changer l'apparence. Pour cela vous devez installer le package ggthemes et ajouter un thème comme layer.
  • Nous n'avons vu ici que les bases minimales de ggplot et de la création de graphiques. Il vous reste énormément à découvrir !

results matching ""

    No results matching ""