La visualisation des données sous forme de graphiques et de figures permet d’explorer ces données et de fournir des informations utiles. De bonnes visualisations vous aident également à communiquer vos données à d’autres et sont utiles aux analystes et aux autres consommateurs de données. Il existe plusieurs packages de R permettant de créer des graphiques dont **ggplot2* qui est certainement le plus utilisé.

ggplot2 est une puissante bibliothèque de R et fait partie des packages de Tidyverse. Utilisée par des centaines de milliers de Data Scientists, cette librairie facilite la création de graphiques informatifs et attrayants. Dans cette formation, vous apprendrez de manière pratique à créer des graphiques courants tels que les nuages de points, les histogrammes, les boîtes à moustache, les diagrammes à barres et d’autres graphiques beaucoup plus complexes. De plus, vous apprendrez à personnaliser vos graphiques afin d’en faciliter la lecture à vos interlocuteurs ce qui vous permettra de mieux communiquer les résultats de vos analyses.

Cette formation se décompose en huit (08) sections :

Veuillez trouver cette formation sous format vidéos sur la chaîne YouToube en cliquant ici

1 Section 1 : Installation de l’environnement de travail

Pour installer R et RStudio sur votre PC, suivez les instructions présentes dans mon article intitulé : Comment installer R et RStudio sur son PC ? (Tutoriel complet)

Bonne installation :)

Voici les librairies que nous utiliserons tout au long de cette formation :

#  Importation des librairies

library(ggplot2)
library(ggalt)
library(ggExtra)
library(ggcorrplot)
library(plotly)
library(quantmod)
library(ggthemes)
library(waffle)
library(highcharter) 
library(dplyr)
library(ggfortify)

S’il y une librairie qui n’est pas encore installée, vous pouvez l’installer avec la fonction install.packages(). Par exemple, pour installer la librairie quantmod, tapez le code ci-dessous dans la console de RStudio :

# Installation de librairie 'quantmod'

install.packages('quantmod')

Soulignons que chaque graphique que nous allons construire au cours de cette formation sera transformé en un graphique interactif en utilisant simplement la fonction ggplotly() du package plotly.

# Installation de la librairie plotly

install.packages('plotly')

# Importation de la librairie plotly

library(plotly)

N.B : Pour pourvoir suivre cette formation, vous devez avoir au mouns un niveau débutant en programmation avec R. Si ce n’est pas le cas, vous pouvez commencer à apprendre ce langage avec mon livre intitulé : APPRENDRE A PROGRAMMER AVEC R ET RSTUDIO

2 Section 2 : Apprendre à Créer des graphiques de corrélation

Les graphiques que nous allons construire dans cette section aident à examiner dans quelle mesure deux ou plusieurs variables sont corrélées.

2.1 Nuages de points

Le graphique le plus fréquemment utilisé pour l’analyse des données est sans aucun doute le nuage de points (scatterplot en anglais). Chaque fois que vous voulez comprendre la nature de la relation entre deux variables, le premier choix est invariablement le nuage de points.

# Définition d'un thème pour les graphiques

theme_set(theme_bw())

# Importation des données

data("midwest", package = "ggplot2")

head(midwest)
PID county state area poptotal popdensity popwhite popblack popamerindian popasian popother percwhite percblack percamerindan percasian percother popadults perchsd percollege percprof poppovertyknown percpovertyknown percbelowpoverty percchildbelowpovert percadultpoverty percelderlypoverty inmetro category
561 ADAMS IL 0.052 66090 1270.9615 63917 1702 98 249 124 96.71206 2.5752761 0.1482826 0.3767590 0.1876229 43298 75.10740 19.63139 4.355859 63628 96.27478 13.151443 18.01172 11.009776 12.443812 0 AAR
562 ALEXANDER IL 0.014 10626 759.0000 7054 3496 19 48 9 66.38434 32.9004329 0.1788067 0.4517222 0.0846979 6724 59.72635 11.24331 2.870315 10529 99.08714 32.244278 45.82651 27.385647 25.228976 0 LHR
563 BOND IL 0.022 14991 681.4091 14477 429 35 16 34 96.57128 2.8617170 0.2334734 0.1067307 0.2268028 9669 69.33499 17.03382 4.488572 14235 94.95697 12.068844 14.03606 10.852090 12.697410 0 AAR
564 BOONE IL 0.017 30806 1812.1176 29344 127 46 150 1139 95.25417 0.4122574 0.1493216 0.4869181 3.6973317 19272 75.47219 17.27895 4.197800 30337 98.47757 7.209019 11.17954 5.536013 6.217047 1 ALU
565 BROWN IL 0.018 5836 324.2222 5264 547 14 5 6 90.19877 9.3728581 0.2398903 0.0856751 0.1028101 3979 68.86152 14.47600 3.367680 4815 82.50514 13.520249 13.02289 11.143211 19.200000 0 AAR
566 BUREAU IL 0.050 35688 713.7600 35157 50 65 195 221 98.51210 0.1401031 0.1821340 0.5464022 0.6192558 23444 76.62941 18.90462 3.275892 35107 98.37200 10.399635 14.15882 8.179287 11.008586 0 AAR

L’ensemble des données midwest contient les informations démographiques sur les comtés du Midwest à partir du recensement américain de 2000. Cet ensemble contient 437 lignes et 28 variables. Source : https://ggplot2.tidyverse.org/reference/midwest.html

Traçons le nuage de points de la population totale (variable poptotal) en fonction de la surface du comté (variable area) :

# nuage de points de la population totale en fonction de la surface du comté

gg <- ggplot(midwest, aes(x = area, y = poptotal)) + 
  geom_point()

gg

Supposons que vous voulez que chaque point soit colorié selon l’état dans lequel le comté se trouve (variable state) et que la taille d’un point soit selon la densité de la population (variable popdensity) :

# Mise à jour du nuage de points précédent

gg <- ggplot(midwest, aes(x = area, y = poptotal)) + 
  geom_point(aes(col = state, size = popdensity))

gg

Vous pouvez aussi ajouter une droite de régression :

gg <- ggplot(midwest, aes(x = area, y = poptotal)) + 
  geom_point(aes(col = state, size = popdensity)) + 
  geom_smooth(method = "lm", se = T) 

gg

Pour ne pas représenter l’intervalle de confiance au niveau de la droite de régression, il suffit de spécifier se = F. Vous pouvez personnaliser davantage votre graphique et y ajouter des titres au niveau des axes :

# Nuage de points final

gg <- ggplot(midwest, aes(x = area, y = poptotal)) + 
  geom_point(aes(col = state, size = popdensity)) + 
  geom_smooth(method = "lm", se = F) + 
  xlim(c(0, 0.1)) + 
  ylim(c(0, 500000)) + 
  labs(subtitle = "Surface Vs Population", 
       y = "Population", 
       x = "Surface", 
       title = "Nuage de points de la Population en fonction de la surface du comté", 
       caption = "Source : midwest")

gg

xlim et ylim ont permis de supprimer le point rouge qui était une valeur aberrante (outlier) et ne permettait pas un bon affichage du nuage de points. A présent, vous avez un graphique qui peut être mieux interprèté.

# Nuage de points final interactif

ggplotly(gg)

Lors de la présentation des graphiques, vous aurez souvent besoin de mettre un accent particulier sur certains points spéciaux ou sur certaines régions dans le graphique afin d’attirer l’attention de votre public sur ces cas particuliers. Cela peut être fait facilement en utilisant la fonction geom_encircle() du package ggalt.

# Installation du package 'ggalt'

install.packages('ggalt')
# Importation de la librairie 'ggalt'

library(ggalt)

Créons une dataframe filtrée à partir de la dataframe originelle :

midwest_select <- midwest[midwest$poptotal > 350000 & 
                            midwest$poptotal <= 500000 & 
                            midwest$area > 0.01 & 
                            midwest$area < 0.1, ]

midwest_select
PID county state area poptotal popdensity popwhite popblack popamerindian popasian popother percwhite percblack percamerindan percasian percother popadults perchsd percollege percprof poppovertyknown percpovertyknown percbelowpoverty percchildbelowpovert percadultpoverty percelderlypoverty inmetro category
659 WILL IL 0.050 357313 7146.260 303420 38361 692 4774 10066 84.91715 10.735965 0.1936677 1.3360835 2.8171379 215823 80.43026 24.75686 5.887232 348384 97.50107 6.03472 7.463086 4.799198 8.563398 1 HLU
707 LAKE IN 0.030 475594 15853.133 334203 116688 865 2772 21066 70.27065 24.535213 0.1818778 0.5828501 4.4294083 298552 73.47832 17.66861 4.939173 469774 98.77627 13.80515 21.511037 11.093432 9.955780 1 AAU
1221 GENESEE MI 0.037 430459 11634.027 336651 84257 3132 2902 3517 78.20745 19.573757 0.7275954 0.6741641 0.8170348 265430 76.76600 20.14542 4.802019 425331 98.80871 16.46318 25.235707 13.843950 9.706895 1 AAU
2056 LUCAS OH 0.021 462361 22017.191 380155 68456 1164 4981 7605 82.22039 14.805747 0.2517513 1.0772967 1.6448187 289965 76.23403 23.55043 6.005897 454351 98.26759 15.26881 21.491653 13.494457 11.422802 1 AAU
2084 STARK OH 0.034 367585 10811.324 339421 25052 950 1529 633 92.33810 6.815294 0.2584436 0.4159582 0.1722051 241153 76.00901 18.98960 4.620303 359231 97.72733 11.06057 16.399197 9.510669 8.458447 1 AAU
2993 DANE WI 0.073 367085 5028.562 344617 10511 1201 8666 2090 93.87935 2.863370 0.3271722 2.3607611 0.5693504 225973 88.89867 43.62645 13.471521 351558 95.77019 10.49301 8.767781 12.168011 4.974351 1 HAU
# Nuage de points avec encerclement 

gg2 <- ggplot(midwest, aes(x = area, y = poptotal)) + 
  geom_point(aes(col = state, size = popdensity)) +   
  geom_smooth(method = "lm", se = F) + 
  geom_encircle(aes(x = area, y = poptotal), 
                data = midwest_select, 
                color = "red", 
                size = 2, 
                expand = 0.08) +  
  xlim(c(0, 0.1)) + 
  ylim(c(0, 500000)) +
  labs(subtitle = "Surface Vs Population", 
       y = "Population", 
       x = "Area", 
       title = "Nuage de points de la Population en fonction de la surface du comté + Encerclement", 
       caption = "Source : midwest")

gg2

ggplotly(gg2)

2.2 Jitter plot : Nuage de points spécial

Cette fois-ci, nous utiliserons l’ensemble des données mpg. Cet ensemble de données fournit des données sur la consommation de carburant de 1999 et 2008 pour 38 modèles de voitures populaires. Il est aussi livré avec le package ggplot2.

# Chargement des données

data(mpg, package = "ggplot2") 

head(mpg)
manufacturer model displ year cyl trans drv cty hwy fl class
audi a4 1.8 1999 4 auto(l5) f 18 29 p compact
audi a4 1.8 1999 4 manual(m5) f 21 29 p compact
audi a4 2.0 2008 4 manual(m6) f 20 31 p compact
audi a4 2.0 2008 4 auto(av) f 21 30 p compact
audi a4 2.8 1999 6 auto(l5) f 16 26 p compact
audi a4 2.8 1999 6 manual(m5) f 18 26 p compact
# Structure de la dataframe

str(mpg)
## tibble [234 × 11] (S3: tbl_df/tbl/data.frame)
##  $ manufacturer: chr [1:234] "audi" "audi" "audi" "audi" ...
##  $ model       : chr [1:234] "a4" "a4" "a4" "a4" ...
##  $ displ       : num [1:234] 1.8 1.8 2 2 2.8 2.8 3.1 1.8 1.8 2 ...
##  $ year        : int [1:234] 1999 1999 2008 2008 1999 1999 2008 1999 1999 2008 ...
##  $ cyl         : int [1:234] 4 4 4 4 6 6 6 4 4 4 ...
##  $ trans       : chr [1:234] "auto(l5)" "manual(m5)" "manual(m6)" "auto(av)" ...
##  $ drv         : chr [1:234] "f" "f" "f" "f" ...
##  $ cty         : int [1:234] 18 21 20 21 16 18 18 18 16 20 ...
##  $ hwy         : int [1:234] 29 29 31 30 26 26 27 26 25 28 ...
##  $ fl          : chr [1:234] "p" "p" "p" "p" ...
##  $ class       : chr [1:234] "compact" "compact" "compact" "compact" ...

Traçons le nuage de points montrant la consommation en carburant sur l’autoroute (variable hwy) en fonction de la consommation en carburant dans la ville (variable cty). Ces deux variables ont des valeurs qui sont des nombres entiers naturels.

# Nuage de points 'hwy' en fonction de 'cty'

g <- ggplot(mpg, aes(cty, hwy))

g + geom_point() + 
  geom_smooth(method = "lm", se = F) +
  labs(subtitle = "cty VS hwy", 
       title = "Nuage de points avec points qui se chevauchent", 
       caption = "Source : mpg dataset")

Ce graphique donne une idée claire de la façon dont le kilométrage de la ville et le kilométrage de l’autoroute (hwy) sont bien corrélés. Mais ce graphique simple cache quelque chose.

# Dimension de la dataset

dim(mpg)
## [1] 234  11

L’ensemble de donnés contient 234 observations, mais le graphique semble afficher moins de points. Que s’est-il passé ? C’est parce qu’il y a beaucoup de points qui se chevauchent apparaissant comme un seul point. Ceci est dû au fait que les variables cty et hwy soient tous deux composées d’entiers naturels. Soyez donc très prudent la prochaine fois que vous créerez un nuage de points avec des nombres entiers naturels.

Alors comment gérer ça ? Nous pouvons créer un jitter plot avec la fonction ****jitter_geom()*** :

# Jitter plot

g <- ggplot(mpg, aes(cty, hwy))
g + geom_jitter(width = 0.5, size = 1) +
  labs(subtitle = "cty VS hwy", 
       title = "kilométrage autoroute en fonction de kilométrage ville")

Plus de points sont révélés maintenant dans le graphique ci-dessus. Plus la largeur est importante, plus les points sont déplacés de manière saccadée par rapport à leur position d’origine.

2.3 Graphique de décomptes (Counts charts)

La deuxième option pour surmonter le problème du chevauchement des points de données consiste à utiliser ce qu’on appelle un graphique de comptage. Partout où il y a plus de points qui se chevauchent, la taille du cercle s’agrandit.

g <- ggplot(mpg, aes(cty, hwy))
g <- g + geom_count(col = "tomato3", show.legend = F) +
  labs(subtitle = "cty VS hwy",
       title = "kilométrage autoroute en fonction de kilométrage ville (Counts charts)")
g

ggplotly(g)

2.4 Graphique à bulle (Bubble plot)

En termes plus simples, les graphiques à bulles sont plus adaptés si vous avez des données en 4 dimensions où deux d’entre elles sont numériques (X et Y) et une autre catégorielle (couleur) et une autre variable numérique (taille).

# Dataframe mpg filtrée pour certains modèles de voitures

mpg_select <- mpg[mpg$manufacturer %in% c("audi", "ford", "honda", "hyundai"), ]

print(unique(mpg_select$manufacturer))
## [1] "audi"    "ford"    "honda"   "hyundai"
head(mpg_select)
manufacturer model displ year cyl trans drv cty hwy fl class
audi a4 1.8 1999 4 auto(l5) f 18 29 p compact
audi a4 1.8 1999 4 manual(m5) f 21 29 p compact
audi a4 2.0 2008 4 manual(m6) f 20 31 p compact
audi a4 2.0 2008 4 auto(av) f 21 30 p compact
audi a4 2.8 1999 6 auto(l5) f 16 26 p compact
audi a4 2.8 1999 6 manual(m5) f 18 26 p compact
 # Graphique à bulle

g <- ggplot(mpg_select, aes(displ, cty)) + 
  labs(subtitle = "displ VS cty",
       title = "Kilométrage en ville en fonction de la capacité du moteur")

g <- g + geom_jitter(aes(col = manufacturer, size = hwy)) + 
  geom_smooth(aes(col = manufacturer), method = "lm", se = F)

g

ggplotly(g)

2.5 Histogramme marginal

Si vous souhaitez afficher la relation ainsi que la distribution dans le même graphique, utilisez l’histogramme marginal. Ce type de graphique peut être construit avec la fonction *** ggMarginal()*** du package ggExtra.

# Installation du package 'ggExtra'

install.packages('ggExtra')

# Importation de la librairie ggExtra

library(ggExtra)
# dataset mpg filtré

mpg_select <- mpg[mpg$hwy >= 35 & mpg$cty > 27, ]

# Nuage de points hwy en fonction de cty

g <- ggplot(mpg, aes(cty, hwy)) + 
  geom_count(col = "tomato3", show.legend = F) +
  geom_smooth(method = "lm", se = F)

ggMarginal(g, type = "histogram", fill = "transparent")
ggMarginal(g, type = "boxplot", fill = "transparent")
ggMarginal(g, type = "density", fill = "transparent")

SUPER :) Jolis graphiques n’est-ce pas !

Pour finir cette tâche n°2, passons à la matrice de corrélation.

2.6 Matrice de corrélation

La matrice de corrélation, encore appelée corrélogramme, permet d’examiner la corrélation entre plusieurs variables continues présentes dans la même dataframe. Pour la construire, nous utiliserons le package ggcorrplot.

# Installation du package ggcorrplot

install.packages('ggcorrplot')

# Importation de lalibrairie ggcorrplot

library(ggcorrplot)

Pour illustrer cette section, nous allons utiliser l’ensemble des données mtcars. Les données ont été extraites du magazine américain Motor Trend de 1974 et comprennent la consommation de carburant et 10 aspects de la conception et des performances automobiles pour 32 automobiles (modèles 1973-74).

# Les données

head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
# Structure de la dataframe

str(mtcars)
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

La dataframe comporte 11 variables continues.

# Tableau de corrélation

corr <- round(cor(mtcars), 2)

corr
##        mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
## mpg   1.00 -0.85 -0.85 -0.78  0.68 -0.87  0.42  0.66  0.60  0.48 -0.55
## cyl  -0.85  1.00  0.90  0.83 -0.70  0.78 -0.59 -0.81 -0.52 -0.49  0.53
## disp -0.85  0.90  1.00  0.79 -0.71  0.89 -0.43 -0.71 -0.59 -0.56  0.39
## hp   -0.78  0.83  0.79  1.00 -0.45  0.66 -0.71 -0.72 -0.24 -0.13  0.75
## drat  0.68 -0.70 -0.71 -0.45  1.00 -0.71  0.09  0.44  0.71  0.70 -0.09
## wt   -0.87  0.78  0.89  0.66 -0.71  1.00 -0.17 -0.55 -0.69 -0.58  0.43
## qsec  0.42 -0.59 -0.43 -0.71  0.09 -0.17  1.00  0.74 -0.23 -0.21 -0.66
## vs    0.66 -0.81 -0.71 -0.72  0.44 -0.55  0.74  1.00  0.17  0.21 -0.57
## am    0.60 -0.52 -0.59 -0.24  0.71 -0.69 -0.23  0.17  1.00  0.79  0.06
## gear  0.48 -0.49 -0.56 -0.13  0.70 -0.58 -0.21  0.21  0.79  1.00  0.27
## carb -0.55  0.53  0.39  0.75 -0.09  0.43 -0.66 -0.57  0.06  0.27  1.00
# Graphique de la matrique de corrélation

cor_plot <- ggcorrplot(corr, 
           hc.order = TRUE, 
           type = "lower", 
           lab = TRUE, 
           lab_size = 3,
           colors = c("red", "white", "green"), 
           title = "Matrice de corrélation", 
           ggtheme = theme_bw)

cor_plot

ggplotly(cor_plot)

3 Section 3 : Apprendre à créer des graphiques de déviation

Dans cette section, les graphiques que nous construiront serviront à comparer la variation des valeurs entre un petit nombre d’éléments (ou catégories) par rapport à une référence fixe.

3.1 Diagramme à barres divergentes

Le diagramme à barres divergentes est un graphique à barres qui peut gérer à la fois des valeurs négatives et positives. Il ne s’agit pas d’un simple graphique à barres.

# Préparation des données

mtcars$`car name` <- rownames(mtcars)  # Création d'une nouvelle colonne des noms des voitures

head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb car name
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Mazda RX4 Wag
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Datsun 710
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 Hornet 4 Drive
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 Hornet Sportabout
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 Valiant
# Variable mpg_z : Standardisation de la variable mpg (Z score)

mtcars$mpg_z <- round((mtcars$mpg - mean(mtcars$mpg))/sd(mtcars$mpg), 2)  

print(head(mtcars))
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
##                            car name mpg_z
## Mazda RX4                 Mazda RX4  0.15
## Mazda RX4 Wag         Mazda RX4 Wag  0.15
## Datsun 710               Datsun 710  0.45
## Hornet 4 Drive       Hornet 4 Drive  0.22
## Hornet Sportabout Hornet Sportabout -0.23
## Valiant                     Valiant -0.33
print(summary(mtcars$mpg_z))
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -1.610000 -0.772500 -0.150000  0.000625  0.450000  2.290000
print(sd(mtcars$mpg_z))
## [1] 0.9997611

Les véhicules avec mpg_z au-dessus de 0 seront marqués en vert et ceux en-dessous de 0 seront marqués en rouge :

# Création de la variable mpg_type

mtcars$mpg_type <- ifelse(mtcars$mpg_z < 0, "below", "above") 

head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb car name mpg_z mpg_type
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 0.15 above
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Mazda RX4 Wag 0.15 above
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Datsun 710 0.45 above
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 Hornet 4 Drive 0.22 above
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 Hornet Sportabout -0.23 below
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 Valiant -0.33 below
# Ordonner la variable 'mpg_z' par ordre croissant

mtcars <- mtcars[order(mtcars$mpg_z), ]

# Variable 'car name' au format factor

mtcars$`car name` <- factor(mtcars$`car name`, levels = mtcars$`car name`)

print(head(mtcars))
##                      mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Cadillac Fleetwood  10.4   8  472 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8  460 215 3.00 5.424 17.82  0  0    3    4
## Camaro Z28          13.3   8  350 245 3.73 3.840 15.41  0  0    3    4
## Duster 360          14.3   8  360 245 3.21 3.570 15.84  0  0    3    4
## Chrysler Imperial   14.7   8  440 230 3.23 5.345 17.42  0  0    3    4
## Maserati Bora       15.0   8  301 335 3.54 3.570 14.60  0  1    5    8
##                                car name mpg_z mpg_type
## Cadillac Fleetwood   Cadillac Fleetwood -1.61    below
## Lincoln Continental Lincoln Continental -1.61    below
## Camaro Z28                   Camaro Z28 -1.13    below
## Duster 360                   Duster 360 -0.96    below
## Chrysler Imperial     Chrysler Imperial -0.89    below
## Maserati Bora             Maserati Bora -0.84    below
# Structure de la dataframe finale

str(mtcars)
## 'data.frame':    32 obs. of  14 variables:
##  $ mpg     : num  10.4 10.4 13.3 14.3 14.7 15 15.2 15.2 15.5 15.8 ...
##  $ cyl     : num  8 8 8 8 8 8 8 8 8 8 ...
##  $ disp    : num  472 460 350 360 440 ...
##  $ hp      : num  205 215 245 245 230 335 180 150 150 264 ...
##  $ drat    : num  2.93 3 3.73 3.21 3.23 3.54 3.07 3.15 2.76 4.22 ...
##  $ wt      : num  5.25 5.42 3.84 3.57 5.34 ...
##  $ qsec    : num  18 17.8 15.4 15.8 17.4 ...
##  $ vs      : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ am      : num  0 0 0 0 0 1 0 0 0 1 ...
##  $ gear    : num  3 3 3 3 3 5 3 3 3 5 ...
##  $ carb    : num  4 4 4 4 4 8 3 2 2 4 ...
##  $ car name: Factor w/ 32 levels "Cadillac Fleetwood",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ mpg_z   : num  -1.61 -1.61 -1.13 -0.96 -0.89 -0.84 -0.81 -0.81 -0.76 -0.71 ...
##  $ mpg_type: chr  "below" "below" "below" "below" ...
# Diagramme à barres divergentes

bar_div <- ggplot(mtcars, aes(x = `car name`, y = mpg_z, label = mpg_z)) + 
  geom_bar(stat = 'identity', aes(fill = mpg_type), width = 0.5)  +
  scale_fill_manual(name = "Kilométrage", 
                    labels = c("Above Average", "Below Average"), 
                    values = c("above" = "green", "below" = "red")) + 
  labs(subtitle = "Kilométrage normalisé", 
       title = "Diagramme à barres divergentes") + 
  coord_flip()

bar_div

ggplotly(bar_div)

3.2 Diagramme à barres divergentes moderne

Voyons à présent une manière beaucoup plus moderne de construire un diagramme à barres divergentes.

# Diagramme à barres divergentes moderne

bdm <- ggplot(mtcars, aes(x = `car name`, y = mpg_z, label = mpg_z)) + 
  geom_point(stat = 'identity', fill = "black", size = 6)  +
  geom_segment(aes(y = 0, 
                   x = `car name`, 
                   yend = mpg_z, 
                   xend = `car name`), 
               color = "black") +
  geom_text(color = "white", size = 2) +
  labs(title = "Diagramme à barres divergentes moderne", 
       subtitle = "Kilométrage normalisé") + 
  ylim(-2.5, 2.5) +
  coord_flip()

bdm

ggplotly(bdm)

3.3 Diagramme de points divergents

Les principes sont les mêmes que ce que nous avons vu dans les barres divergentes, sauf que seul le point est utilisé.

# Diagramme de points divergents 

dpd <- ggplot(mtcars, aes(x = `car name`, y = mpg_z, label = mpg_z)) + 
  geom_point(stat = 'identity', aes(col = mpg_type), size = 6)  +
  scale_color_manual(name = "Mileage", 
                     labels = c("Above Average", "Below Average"), 
                     values = c("above" = "green", "below" = "red")) + 
  geom_text(color = "white", size = 2) +
  labs(title = "Diagramme de points divergents", 
       subtitle = "Kilométrage normalizé") + 
  ylim(-2.5, 2.5) +
  coord_flip()

dpd

ggplotly(dpd)

3.4 Graphiques en aires

Les graphiques en aires sont généralement utilisés pour visualiser les performances d’une mesure particulière (telle que le pourcentage de rendement d’une action) par rapport à une certaine référence. D’autres types de données de rendements ou de variation en % sont également couramment utilisés. La fonction geom_area() de ggplot2 permet de construire un graphique en aire. Pour illustrer cette partie, nous utiliserons l’ensemble de données economics présent dans ggplot2 et produit à partir de données de séries chronologiques économiques américaines disponibles sur le site : https://fred.stlouisfed.org/. Dans cette partie, nous aurons aussi besoin du package quantmod. La librairie quantmod est un package qui a été construit pour assister les trader et les analystes quantitatifs dans le développement, le test et le déployement de modèles statistiques de trading. Commençons par installer et importer cette librairie :

# Installation de 'quantmod'

install.packages('quantmod')

# Importation de la librairie 'quantmod'

library(quantmod)
# Chargement des données

data("economics", package = "ggplot2")

head(economics)
date pce pop psavert uempmed unemploy
1967-07-01 506.7 198712 12.6 4.5 2944
1967-08-01 509.8 198911 12.6 4.7 2945
1967-09-01 515.6 199113 11.9 4.6 2958
1967-10-01 512.2 199311 12.9 4.9 3143
1967-11-01 517.4 199498 12.8 4.7 3066
1967-12-01 525.1 199657 11.8 4.8 3018
# Préparation des données (Ne vous préoccupez pas de ce code)
  # L'important pour cette formation est la visualisation des données

economics$returns_perc <-c(
  0, diff(economics$psavert)/economics$psavert[-length(economics$psavert)]
  )

# Création des breaks points et des étiquettes pour les graduations d'axe 
brks <- economics$date[seq(1, length(economics$date), 12)]
lbls <- lubridate::year(economics$date[seq(1, length(economics$date), 12)])

Notez l’utilisation du package lubridate. Il faudra l’installer à votre niveau si ce n’est pas encore fait.

# Evolution du rendement

air_plot <- ggplot(economics[1:100, ], aes(date, returns_perc)) + 
  geom_area() + 
  scale_x_date(breaks = brks, labels = lbls) + 
  theme(axis.text.x = element_text(angle = 90)) + 
  labs(title = , 
       subtitle = "Rendement (%) pour les économies personnelles", 
       y = "Rendement (%) pour l'épargne personnelle", 
       caption = "Source : economics")

air_plot

ggplotly(air_plot)

4 Section 4 : Apprendre à créer des graphiques de classement

Les graphiques qui vont suivre sont appelés graphiques de classement. Ils sont utilisés pour comparer la position ou les performances de plusieurs éléments les uns par rapport aux autres.

4.1 Graphique à barres ordonnées

Le graphique à barres ordonné est un graphique à barres classé par la variable de l’axe Y. Il ne suffit pas de trier la dataframe par la variable d’intérêt pour ordonner le graphique à barres. Pour que le graphique à barres conserve l’ordre des lignes, la variable de l’axe X (c’est-à-dire les catégories) doit être convertie en un facteur.

Traçons le kilométrage moyen de la ville (cty) pour chaque fabricant à partir de l’ensemble de données mpg.

Commençons d’abord par préparer les données :

# Agrégation du kilométrage en ville pour chaque fabricant
  # La fonction d'agrégation est la moyenne

cty_mpg <- aggregate(mpg$cty, by = list(mpg$manufacturer), FUN = mean)

head(cty_mpg)
Group.1 x
audi 17.61111
chevrolet 15.00000
dodge 13.13514
ford 14.00000
honda 24.44444
hyundai 18.64286
# Changement des noms de colonnes

colnames(cty_mpg) <- c("make", "mileage")

# Ordonner les observations par ordre croissant des valeurs de la variable 'mileage'

cty_mpg <- cty_mpg[order(cty_mpg$mileage), ]

# Variable 'make' en factor (variable catégorielle)

cty_mpg$make <- factor(cty_mpg$make, levels = cty_mpg$make)

head(cty_mpg)
make mileage
9 lincoln 11.33333
8 land rover 11.50000
3 dodge 13.13514
10 mercury 13.25000
7 jeep 13.50000
4 ford 14.00000
# Kilométrage moyen en ville par fabricant

gbo <- ggplot(cty_mpg, aes(x = make, y = mileage)) + 
  geom_bar(stat = "identity", width = .5, fill = "tomato3") + 
  labs(title = "Kilométrage moyen en ville par fabricant",
       caption = "source : mpg dataset") + 
  theme(axis.text.x = element_text(angle = 45, vjust = 0.6))

gbo

ggplotly(gbo)

4.2 Graphique à barres minces

En réduisant les barres épaisses en lignes fines, cela réduit l’encombrement et met davantage l’accent sur la valeur.

# Diagramme à barres minces

dbarm <- ggplot(cty_mpg, aes(x = make, y = mileage)) + 
  geom_point(size = 3) + 
  geom_segment(aes(x = make, 
                   xend = make, 
                   y = 0, 
                   yend = mileage)) + 
  labs(title="Diagramme à barres minces", 
       caption="source : mpg dataset") + 
  theme(axis.text.x = element_text(angle = 65, vjust = 0.6))

dbarm

ggplotly(dbarm)

4.3 Diagramme à points (Dot Plot)

Il est très simmilaire au diagramme à barres minces mais sans la ligne et sont retournés en position horizontale. Il met davantage l’accent sur le classement des éléments par rapport aux valeurs réelles et à quelle distance sont les entités les unes par rapport aux autres.

# Diagramme à points

dot_plot <- ggplot(cty_mpg, aes(x = make, y = mileage)) + 
  geom_point(col="tomato2", size=3) + 
  geom_segment(aes(x = make, 
                   xend = make, 
                   y = min(mileage), 
                   yend = max(mileage)), 
               linetype = "dashed", 
               size = 4) +  
  labs(title = "Diagramme à points", 
       caption = "source : mpg dataset") +  
  coord_flip()

dot_plot

ggplotly(dot_plot)

5 Section 5 : Apprendre à créer des graphiques de distribution

Les graphiques de distribution sont utilisés lorsque vous avez beaucoup de points de données et que vous souhaitez étudier où et comment les points de données sont distribués.

5.1 Histogramme

Nous allons d’abord créer un histogramme sur une variable continue et ensuite sur une variable catégorielle.

# Histogramme simple de la capacité du moteur

h0 <- ggplot(mpg, aes(displ)) + geom_histogram()

h0

En abscisse, on a les valeurs de la variable regroupées dans des bacs (bins en Anglais). Les hauteurs des barres représentent le nombre de points de données qui entrent dans un bac. L’histogramme ci-dessus est obtenu avec un regroupement automatique car nous n’avons pas spécifié le nombre de bins (Par défaut, ce nombre est égal à 30).

# Spécification du nombre de bins (bins = 20)

h0 <- ggplot(mpg, aes(displ)) + geom_histogram(bins = 20)

h0

# Spécification du nombre de bins (bins = 10)

h0 <- ggplot(mpg, aes(displ)) + geom_histogram(bins = 10)

h0

Comme vous le remarquez, le nombre de bins peut modifier l’apparence de l’histogramme.

ggplotly(h0)
# Distribution de la capacité du moteur pour divers types de voitures

h1 <- ggplot(mpg, aes(displ)) + scale_fill_brewer(palette = "Spectral") + 
  geom_histogram(aes(fill = class), 
                   binwidth = 0.1, 
                   col = "black", 
                   size = 0.1) +  
  labs(title = "Histogramme avec regroupement automatique", 
       subtitle = "Capacité du moteur pour divers types de voitures") 

h1

ggplotly(h1)

Créons le même graphique mais cette fois-ci avec un nombre fixe de bins :

# Histograme avec un nombre de fixe de bins

h2 <- ggplot(mpg, aes(displ)) + scale_fill_brewer(palette = "Spectral") +
  geom_histogram(aes(fill = class), 
                   bins = 5, 
                   col = "black", 
                   size = 0.1) +   
  labs(title = "Histograme avec un nombre de fixe de bins", 
       subtitle = "Capacité du moteur pour divers types de voitures") 

h2

ggplotly(h2)

Passons à la construction d’un histogramme sur une variable catégorielle. L’histogramme sur une variable catégorielle se traduirait par un graphique de fréquence affichant des barres pour chaque catégorie.

hc <- ggplot(mpg, aes(manufacturer)) + 
  geom_bar(aes(fill = class), width = 0.5) + 
  theme(axis.text.x = element_text(angle = 65, vjust = 0.6)) + 
  labs(title = "Histograme d'une variable catégorielle", 
       subtitle = "Concessionnaire pour chaque type de voiture") 

hc

ggplotly(hc)

5.2 Graphique de densité

Un graphique de densité visualise la distribution des données sur un intervalle ou une période de temps continu.

# Graphique de densité du kilométrage en ville regroupé par nombre de cylindres

density_plot <- ggplot(mpg, aes(cty)) + 
  geom_density(aes(fill = factor(cyl)), alpha = 1) + 
    labs(title = "Graphique de densité", 
         subtitle = "Kilométrage en ville regroupé par nombre de cylindres",
         caption = "Source : mpg dataset",
         x = "Kilométrage en ville",
         fill = "Nombre de cylindres")

density_plot

ggplotly(density_plot)

5.3 Boîte à moustache

Comme les histogrammes, les boîtes à moustaches servent aussi à représenter la distribution des variables numériques. Les histogrammes sont meilleurs pour montrer la forme d’une distribution ; les boîtes à moustache aident à mieux identifier les valeurs aberrantes. Par ailleurs, l’autre avantage des boîtes à moustache est qu’ils permettent d’afficher les distributions au sein de plusieurs groupes, ainsi que la médiane, la gamme interquartile (IQR) et les valeurs aberrantes.

La ligne sombre à l’intérieur de la boîte représente la médiane. Le haut de la boîte est de 75 % et le bas de la boîte est de 25 %. Les points d’extrémité des lignes (alias moustaches) sont à une distance de 1,5 * IQR, où IQR (Inter Quartile Range) est la distance entre le 25e et le 75e centiles. Les points à l’extérieur des moustaches sont marqués comme des points et sont normalement considérés comme des points extrêmes (outliers).

Pour tracer les boîtes à moustache avec ggplot2, vous devez utiliser la fonction geom_boxplot() :

# Boîte à moustache du Kilométrage urbain regroupé par classe de voiture

box_plot <- ggplot(mpg, aes(class, cty, fill = factor(class))) + 
  geom_boxplot() + 
  labs(title = "Kilométrage urbain regroupé par classe de voiture", 
       caption = "Source : mpg dataset",
         x= "Type de voiture",
         y= "kilométrage urbain", 
       fill = "Type de voiture")

box_plot

ggplotly(box_plot)

5.4 Diagramme à points + Boîte à moustache

En plus des informations fournies par une boîte à moustaches, le diagramme à points peut fournir des informations plus claires sous forme de statistiques récapitulatives par groupe. Les points sont décalés de telle sorte que chaque point représente une observation. Ainsi, dans le graphique ci-dessous, le nombre de points pour un fabricant donné correspondra au nombre de lignes de ce fabricant dans la dataset.

# Dot Plot + Box Plot

dot_box <- ggplot(mpg, aes(manufacturer, cty)) + 
  geom_boxplot() + 
  geom_dotplot(binaxis = 'y', 
               stackdir = 'center', 
               dotsize = 0.5, 
               fill = "red") +
  theme(axis.text.x = element_text(angle = 65, vjust = 0.6)) + 
  labs(title = "Kilométrage urbain pour chaque type de voiture", 
       subtitle = "Chaque point représente une observation dans la dataset",
       caption = "Source : mpg dataset",
       x = "Type de voiture",
       y = "Kilométrage urbain")

dot_box

5.5 Boîte à moustache de tufte

La boîte à moustaches de Tufte, fournie par le package ggthemes est inspirée des travaux d’Edward Tufte. C’est juste une boîte à moustache à rendu minimal.

# Installation de ggthemes

install.packages('ggthemes')

# Importation de la librairie ggthemes

library(ggthemes)
# Boîte à moustache de tufte
t_box <- ggplot(mpg, aes(manufacturer, cty)) + 
  geom_tufteboxplot() + 
  theme(axis.text.x = element_text(angle = 65, vjust = 0.6)) + 
  labs(title = "Boîte à moustache de tufte : Kilométrage urbain par concessionnaire", 
           caption = "Source : mpg dataset",
           x = "Concessionnaire",
           y = "Kilométrage urbain")

t_box

La fonction geom_tufteboxplot() n’est pas encore prise en compte dans Plotly afin de permettre la transformation en graphique interactif d’une boîte à moustache de tufte.

5.6 Graphique de violon (Violin Plot)

Un tracé de violon est similaire à une boîte à moustache mais montre la densité au sein des groupes. Cependant, il ne fournit pas beaucoup d’informations comme dans les boîtes à moustache. Il peut être construit en utilisant la fonction geom_violin().

# Graphique de violon

violin_plot <- ggplot(mpg, aes(class, cty, fill = factor(class))) + 
  geom_violin() + 
  labs(title="Violin plot : Kilométrage urbain par type de voiture",
       caption = "Source : mpg dataset",
       x = "Type de voiture",
       y="Kilométrage urbanisé",
       fill = "Type de voiture")

violin_plot

ggplotly(violin_plot)

6 Section 6 : Apprendre à créer des graphiques de composition

Dans cette section, nous construirons un graphique en gaufre (Waffle chart), un graphique à secteurs (Pie chart) et une carte d’arbre (Tree map).

6.1 Graphique en gaufre

Les diagrammes à secteurs carrés (ou diagrammes de gaufres) peuvent être utilisés pour communiquer des parties d’un tout pour des quantités catégoriques. Pour émuler la vue en pourcentage d’un graphique à secteurs, une grille 10x10 doit être utilisée avec chaque carré représentant 1% du total. Les utilisations modernes des tableaux de gaufres ne respectent pas nécessairement cette règle et peuvent être créées avec une grille de n’importe quelle forme rectangulaire. Les meilleures pratiques suggèrent de limiter le nombre de catégories, comme cela doit être fait lors de la création de graphiques à secteurs.

Nous aurons besoin du package waffle pour tracer ce graphique.

# Installation du package 'waffle'

install.packages('waffle')

# Importation de la librairie 'waffle'

library(waffle)
# waffle chart : exemple simple

parts <- c(80, 30, 20, 10)

chart <- waffle(parts, rows = 8)

chart

# waffle chart : Deuxième exemple

var <- factor(mpg$class)

n_lignes <- 10

categ_table <- round(table(var) * ((n_lignes*n_lignes)/(length(var))))

categ_table
## var
##    2seater    compact    midsize    minivan     pickup subcompact        suv 
##          2         20         18          5         14         15         26
chart2 = waffle(categ_table)

chart2

6.2 Diagramme circulaire

df <- as.data.frame(table(mpg$class))
colnames(df) <- c("class", "freq")
pie <- ggplot(df, aes(x = "", y=freq, fill = factor(class))) + 
  geom_bar(stat = "identity") +
  theme(axis.line = element_blank(), 
        plot.title = element_text(hjust=0.5)) + 
  labs(fill="class", 
       x = NULL, 
       y = NULL, 
       title = "Fréquence du type de voitures", 
       caption = "Source : mpg dataset") +
  coord_polar(theta = "y", start = 0)

pie

6.3 Tree Map

Pour construire un treemap, nous aurons besoin du package highcharter :

# Installation du package highcharter

install.packages('highcharter')

# Importation du package

library(highcharter) 

Créons un tableau de synthèse des données de la dataset mpg. Nous utiliserons la fonction pipe (%>%) du package dplyr :

# Installation du package dplyr

install.packages('dplyr')

# Importation de la librairie dplyr

library(dplyr)
# Préparation des données : Tableau de synthèse

summary.table <- mpg %>% 
  group_by(manufacturer) %>% 
  summarise(
    nb_cars = n(), 
    nb_model = length(unique(model))
    ) %>% 
  arrange(-nb_cars, -nb_model)
summary.table
manufacturer nb_cars nb_model
dodge 37 4
toyota 34 6
volkswagen 27 4
ford 25 4
chevrolet 19 4
audi 18 3
hyundai 14 2
subaru 14 2
nissan 13 3
honda 9 1
jeep 8 1
pontiac 5 1
land rover 4 1
mercury 4 1
lincoln 3 1
# Tree map

tree_map <- summary.table %>%
  hchart(
    "treemap", 
    hcaes(x = manufacturer, value = nb_cars, color = nb_model)
    )

tree_map

7 Section 7 : Apprendre à créer des graphiques de visualisation de séries temporelles

7.1 Graphique de série temporelle à partir d’un objet ts

Le package ggfortify permet de construire un graphique de série temporelle directement à partir d’un objet de ts (time serie).

# Installation de ggfortify

install.packages('ggfortify')

# Importation de la librairie ggfortify

library(ggfortify)

L’ensemble de données AirPassengers contient les informations sur les totaux mensuels des passagers des compagnies aériennes internationales entre 1949 à 1960.

# Données

head(AirPassengers)
## [1] 112 118 132 129 121 135
class(AirPassengers)
## [1] "ts"
# Evolution du nombre de passagers

autoplot(AirPassengers) + 
  labs(title = "Evolution du nombre total de passagers")  

7.2 Graphique de série temporelle à partir d’une dataframe

class(economics)
## [1] "spec_tbl_df" "tbl_df"      "tbl"         "data.frame"
# EVolution des rendements

ts_plot <- ggplot(economics, aes(x = date)) + 
  geom_line(aes(y = returns_perc)) + 
  labs(title = "EVolution des rendements journaliers",
       y="Rendement (%)")

ts_plot

ggplotly(ts_plot)

7.3 Graphique en aires empilées

Le graphique en aires empilées ressemble à un graphique en courbes, sauf que la région située sous le tracé est entièrement colorée.

# Evolution du nombre de personnes au chômage

stacked_air_plot <- ggplot(economics, aes(date, unemploy)) +
  geom_area(position = 'stack')  

stacked_air_plot

Si vous disposez d’une variable catégorielle dans votre dataset, vous pouvez l’utiliser pour colorier vos aires comme dans l’exemple ci-dessous :

library(gcookbook)

print(head(uspopage))
##   Year AgeGroup Thousands
## 1 1900       <5      9181
## 2 1900     5-14     16966
## 3 1900    15-24     14951
## 4 1900    25-34     12161
## 5 1900    35-44      9273
## 6 1900    45-54      6437
stacked_air_plot2 <- ggplot(uspopage, aes(x = Year, y = Thousands, fill = AgeGroup)) +
  geom_area()

stacked_air_plot2

ggplotly(stacked_air_plot2)

8 Section 8 : Apprendre à créer des graphique de clustering

8.1 Clustering : Définition

Comprenez le mot clustering comme regroupement en classes. Le Clustering est une technique d’apprentissage automatique non-supervisé dont l’objectif est de découvrir les groupes sousjacents (ou “clusters”) dans un ensemble de données. Ici on ne dispose pas de données étiquetées comme c’est le cas dans l’apprentissage automatique supervisé. L’algorithme regroupe les objets similaires en termes de leurs caractéristiques. Dans chaque groupe, on a donc des observations similaires mais les groupes sont distincts les uns des autres.

Cette technique est très utilisée dans le domaine du Marketing pour réaliser la segmentation de clientèle. La Segmentation est une pratique de partitionnement des clients en groupes d’individus ayant les mêmes caractéristiques (On utilise souvent les données démographiques des clients car elles sont plus faciles à collecter). Cette stratégie permet de comprendre le comportement des clients, sur la base de leurs données historiques, et donc d’utiliser efficacement les ressources allouées au Marketing.

Les deux paragraphes ci-dessus qui expliquent le clustering sont extraits de mon livre Machine Learning par la pratique avec Python: Projets réels dans les Finances, l’Immobilier, le Trading, la Santé, le Marketing, etc..

8.2 Visualisation d’une segmentation

Supposons qu’on a pas les noms des différentes espèces d’iris dans l’ensemble de données iris :

# Données iris sans étiquettes

df <- iris[c(1, 2, 3, 4)]

head(df)
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.1 3.5 1.4 0.2
4.9 3.0 1.4 0.2
4.7 3.2 1.3 0.2
4.6 3.1 1.5 0.2
5.0 3.6 1.4 0.2
5.4 3.9 1.7 0.4

Réalisons une analyse en composantes principales :

# ACP

pca_mod <- prcomp(df)  

pca_mod
## Standard deviations (1, .., p=4):
## [1] 2.0562689 0.4926162 0.2796596 0.1543862
## 
## Rotation (n x k) = (4 x 4):
##                      PC1         PC2         PC3        PC4
## Sepal.Length  0.36138659 -0.65658877  0.58202985  0.3154872
## Sepal.Width  -0.08452251 -0.73016143 -0.59791083 -0.3197231
## Petal.Length  0.85667061  0.17337266 -0.07623608 -0.4798390
## Petal.Width   0.35828920  0.07548102 -0.54583143  0.7536574
# Data frame des composantes principales

df_pc <- data.frame(pca_mod$x, Species=iris$Species)

head(df_pc)
PC1 PC2 PC3 PC4 Species
-2.684126 -0.3193972 0.0279148 0.0022624 setosa
-2.714142 0.1770012 0.2104643 0.0990266 setosa
-2.888991 0.1449494 -0.0179003 0.0199684 setosa
-2.745343 0.3182990 -0.0315594 -0.0755758 setosa
-2.728716 -0.3267545 -0.0900792 -0.0612586 setosa
-2.280860 -0.7413304 -0.1686777 -0.0242009 setosa
# Dataframe de chaque espèce

df_pc_vir <- df_pc[df_pc$Species == "virginica", ]  
df_pc_set <- df_pc[df_pc$Species == "setosa", ]  
df_pc_ver <- df_pc[df_pc$Species == "versicolor", ]  
 
# Graphique montrant les deux premières composantes

theme_set(theme_bw())

clusters <- ggplot(df_pc, aes(PC1, PC2, col = Species)) + 
  geom_point(aes(shape=Species), size = 2) +
  labs(title = "Iris Clustering", 
       caption  ="Source : Iris dataset") + 
  #coord_cartesian(xlim = 1.2 * c(min(df_pc$PC1), max(df_pc$PC1)), 
                  #ylim = 1.2 * c(min(df_pc$PC2), max(df_pc$PC2))) +   # change axis limits
  geom_encircle(data = df_pc_vir, aes(x = PC1, y = PC2)) +   
  geom_encircle(data = df_pc_set, aes(x=PC1, y = PC2)) + 
  geom_encircle(data = df_pc_ver, aes(x = PC1, y = PC2))

clusters

ggplotly(clusters)

9 Conclusion

Vous êtes désormais capable de créer de superbes graphiques pour visualiser tout type de données à l’aide de R dans vos propres projets en Data Science.

Ne vous arrêtez pas en si bon chemin ! Apprenez aussi à créer des applications web et des tableaux de bords (dashboards) interactifs pour automatiser vos tâches et sublimer votre public. Je vous conseille de vous proccurer mon livre intitulé : Développement Web en Data Science avec R Shiny sans HTML, CSS, PHP ni JavaScript.

Ce livre est 100% pratique et basé sur 03 grands projets de développement d’applications web en Science des données (Data Science) dans les domaines du Marketing, Machine Learning et de l’analyse quantitative. Grâce à des explications claires et précises, vous serez à l’aise avec l’utilisation de R et Shiny pour créer des applications Web interactives et performantes même si vous n’aviez aucune expérience en développement Web.

Que vous soyez Data Scientist, Data Analyst, Statisticien, Chercheur, Etudiant sans connaissances en HTML, CSS, PHP, ou JavaScript, vous pouvez créer des applications web dynamiques en utilisant uniquement du code R.

Josué AFOUDA