Initiation à R
Fred Williamson
Data Scientist
Sommaire
Initiation à R - Fred Williamson 2
A propos de la
data science
Initiation à R - Fred Williamson
Data science
Fred Williamson
Data Scientist
A propos de R
Initiation à R - Fred Williamson
Qu'est-ce que R
Nous allons utiliser R pour explorer les statistiques et pour
effectuer des analyses statistiques.
R est défini comme un environnement de programmation
statistique.
R a été écrit par des statisticiens Ross Ihaka et Robert
Gentleman et dans leur publication originale de 1996 ils
définissent R comme langage informatique statistique.
Initiation à R - Fred Williamson 6
Historique de R
Ross Ihaka Robert Gentleman
À l’origine fut le S, développé chez Bell Laboratories à partir du milieu des années
1970 par une équipe de chercheurs menée par John M. Chambers.
Créé en 1993 par Ross Ihaka et Robert Gentleman en C et Fortran à
l’université d’Auckland en Nouvelle Zélande .
Depuis 1997, une vingtaine de développeurs forment l'équipe de développement
de R (R Development Core team). Les membres de cette équipe ont les droits
d'écriture sur le code source.
Le 5 décembre 1997, R est intégré au Projet GNU.
Initiation à R - Fred Williamson 7
Historique de R
Ross Ihaka Robert Gentleman
La version R 1.0.0, première version officielle du langage R, est publiée le 29
février 2000.
En 2003, l'équipe de développement crée la R Foundation for Statistical Computing
pour soutenir le projet R et devenir un point de contact de référence pour ceux qui
veulent prendre contact avec la communauté R.
En 2015, plusieurs acteurs économiques importants comme IBM, Microsoft ou
encore la société RStudio créent le R Consortium pour soutenir la communauté R
et financer des projets autour de ce langage.
Initiation à R - Fred Williamson 8
Autres applications
Marketing analytique
Ingénierie financière
Biostatistique / Bioinformatique
Calcul actuariel
Statistiques industrielles
Analyse sensorielle
Ingénierie de la qualité
Management quantitatif
Cartographie
Initiation à R - Fred Williamson 9
Public cible
Aujourd’hui, R est utilisé par beaucoup de monde …
Mais 99% des potentiels utilisateurs R s’ignorent! Ils effectuent (parfois
péniblement ) jour après jour, leurs analyses dans des environnements de
travail moins adaptés et il en résulte une perte de temps et / ou une
dégradation des résultats.
Dans la suite de cet exposé, un utilisateur de R sera dénommé : utilisateur R et
représenté comme suit …
Initiation à R - Fred Williamson 10
Public cible
Les nuls n’ont pas besoin des prérequis pour apprendre et maitriser le
langage R. Pas de panique! … Si vous ne connaissez rien de R.
Les agapètes du tableur s’arrache à tout calculer à l’aide de LibreOffice
Calc ou tout autre tableur (et sont sourds à toute autre idée)
Les prisonniers statistiques se sont laissés enfermer dans des logiciels
statistiques fermés qui ont décidé à l’avance pour eux comment il faut
analyser leurs données
Les techno-victimes utilisent des langages informatiques modernes et
perfectionnés, mais perdent du temps lorsqu’ils réalisent leurs analyses
de données dans ces langages (car il faut souvent plusieurs lignes de
code pour faire ce que R fait facilement)
Initiation à R - Fred Williamson 11
Pourquoi R?
R est un Langage de programmation complet
R est libre et gratuit
R a des Capacités graphiques de pointe
R est Multiplateforme (Windows, Linux, MacOs)
R possède une grande communauté
R a possède plusieurs fonctions statistiques
R est plus intuitif que SAS ou SPSS
Initiation à R - Fred Williamson 12
Evaluation du succès de R
2015 2014 Le site IEEE combine 12 mesures
de 10 sites différents. Celles-ci
incluent certaines des mesures
décrites ci-dessus, telles que la
popularité sur les sites d'emploi
et les moteurs de recherche. Ils
incluent également des mesures
fascinantes et utiles, telles que le
nombre de nouveaux codes de
programmation ajoutés au
populaire référentiel GitHub au
cours de la dernière année.
Cette figure montre leur top 10
langues pour 2015:
Nous voyons que R est à la
6ème place et qu'il est passé de
la 9ème place en 2014. SAS est
placée à la 26ème place. Python
est classé à la 4ème place, mais
c’est à toutes fins utiles, alors
que l’utilisation de R est
davantage axée sur l’analyse de
données. Aucun autre langage
spécifique à l'analyse de
données ne figure dans leur
classement. Ce classement est
basé sur un score composite
IEEE : Classement des langages de programmation populaire 2014 vs 2015 pondéré
Initiation à R - Fred Williamson 13
Comparaison aux concurrents
La figure montre facilement que la
plupart des lan restants ont connu
une croissance constante au cours
de la période indiquée. R et Stata
ont connu une croissance
particulièrement rapide, tout
comme Prism jusqu'en 2012.
Notez que la diminution du
nombre d'articles utilisant SPSS,
SAS ou Prism n'est pas
compensée par l'augmentation
des autres logiciels illustrés dans
ce graphique
[Link] : Nombre d’articles par langages de programmation
Initiation à R - Fred Williamson 14
Offres d’emplois DS
Initiation à R - Fred Williamson 15
Articles universitaires
SPSS est de loin le package le
plus dominant, comme il le fait
depuis plus de 20 ans. Cela peut
être dû à son équilibre entre
puissance et facilité d'utilisation.
R est à la deuxième place avec
environ la moitié moins
d'articles. Il offre une puissance
extrême, mais avec moins de
facilité d'utilisation. SAS occupe
la troisième place, avec une
légère avance sur Stata,
MATLAB et GraphPad Prism, qui
sont presque à égalité.
[Link] : Nombre d'articles scientifiques trouvés sur Google Scholar, destinés aux
logiciels de science des données en 2018
Initiation à R - Fred Williamson 16
Réseaux sociaux
Nous constatons que R est le
logiciel dominant et que le fait de
passer par SAS, SPSS et Stata
entraîne une perte d’environ la
moitié du nombre de personnes
à chaque étape
[Link] : Number of people who follow each software on LinkedIn and Quara on 2015
Initiation à R - Fred Williamson 17
Evolution des packages
[Link] : Number of R packages available on its main distribution site for the last
version released in each year
Initiation à R - Fred Williamson 18
Energie vs Résultats
Les adeptes du
tableur ont beaucoup
de travail pour passer
à l’utilisation d’un
logiciel comme R.
Mais le gain au final
promet d’être
substantiel
Initiation à R - Fred Williamson 19
Mathématiques et R
Mathématiques R
x = (1, 2, 3) > x <- c(1, 2, 3)
> y <- c(3, 0, 4)
y = (3, 0, 4)
>x+y
x+y = (4, 2, 7)
[1] 4 2 7
Initiation à R - Fred Williamson 20
R Problem
Initiation à R - Fred Williamson 21
Hello, world
Brian Kernighan Dennis Ritchie Ken Thompson
La seule façon d’apprendre un nouveau langage de programmation
c’est d’écrire des programmes avec.
Initiation à R - Fred Williamson 22
R studio
ECRIRE DU TEXTE
COMPILER
CHARGER
EXECUTER
TROUVER
Initiation à R - Fred Williamson 23
Basiques de R
# Somme de deux nombres
# print() pour afficher mais n'est pas obligatoire
print(2 + 7)
## [1] 9
# Produits de deux nombres
5 * 10
## [1] 50
# Affectation d'une valeur à une variable
a <- 10
# Division
a / 2
## [1] 5
# Opérations complexes
2 * a + sqrt(a) - abs(a)
## [1] 13.16228
Initiation à R - Fred Williamson 24
Structures de
données
Initiation à R - Fred Williamson
Vecteurs
En R, le vecteur est un des éléments de base du
langage. Un vecteur est une liste d'éléments
étant tous du même type.
Initiation à R - Fred Williamson 26
Vecteurs
Creation de vecteurs
# Création d'un vecteur avec l'opérateur de concaténation "c"
v1 <- c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
print(v1)
## [1] 10 20 30 40 50 60 70 80 90 100
# Création d'un vecteur d'éléments consécutifs
v2 <- 1:10
print(v2)
## [1] 1 2 3 4 5 6 7 8 9 10
# Création d'une séquence d'éléments avec un pas de 10
v3 <- seq(from = 10, to = 100, by = 10)
print(v3)
## [1] 10 20 30 40 50 60 70 80 90 100
Initiation à R - Fred Williamson 27
Vecteurs
Opérations sur les vecteurs
# Taille du vecteur v1
length(v1)
## [1] 10
# Resumé détaillé de v1
summary(v1)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 10.0 32.5 55.0 55.0 77.5 100.0
# Somme de vecteurs
v1 + v2
## [1] 11 22 33 44 55 66 77 88 99 110
Initiation à R - Fred Williamson 28
Vecteurs
Indexation des vecteurs
# Affiche les 5 premiers éléments de v1
v1[1:5]
## [1] 10 20 30 40 50
# Les éléments de v1 supérieurs ou égal à 50
v1[v1 >= 50]
## [1] 50 60 70 80 90 100
# Les positions des éléments de v1 inférieurs ou égal à 50
which(v1 <= 50)
## [1] 1 2 3 4 5
Initiation à R - Fred Williamson 29
Matrices
Une matrice est un tableau en deux dimensions
dont tous les éléments sont du même type.
Initiation à R - Fred Williamson 30
Matrices
Creation de matrices
# Création de la matrice m1
m1 <- matrix(data = 1:16, ncol = 4)
print(m1)
## [,1] [,2] [,3] [,4]
## [1,] 1 5 9 13
## [2,] 2 6 10 14
## [3,] 3 7 11 15
## [4,] 4 8 12 16
# Création de la matrice unité m2
m2 <- diag(4)
print(m2)
## [,1] [,2] [,3] [,4]
## [1,] 1 0 0 0
## [2,] 0 1 0 0
## [3,] 0 0 1 0
## [4,] 0 0 0 1
Initiation à R - Fred Williamson 31
Matrices
Somme et produit matriciel
# Produit matriciel
m1%*%m2
## [,1] [,2] [,3] [,4]
## [1,] 1 5 9 13
## [2,] 2 6 10 14
## [3,] 3 7 11 15
## [4,] 4 8 12 16
# Somme matricielle
m1+m2
## [,1] [,2] [,3] [,4]
## [1,] 2 5 9 13
## [2,] 2 7 10 14
## [3,] 3 7 12 15
## [4,] 4 8 12 17
Initiation à R - Fred Williamson 32
Matrices
Transposée et déterminant
# Transposée de la matrice m1
t(m1)
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
## [4,] 13 14 15 16
# Déterminant de la matrice m1
det(m1)
## [1] 0
Initiation à R - Fred Williamson 33
Matrices
Matrice inverse
# Création de la matrice m3
m3 = matrix(round(runif(9, 1, 5)), ncol=3)
m3
## [,1] [,2] [,3]
## [1,] 2 3 4
## [2,] 3 2 4
## [3,] 1 3 2
# Inverse de la matrice m3
solve(m3)
## [,1] [,2] [,3]
## [1,] -1.3333333 1.0 0.6666667
## [2,] -0.3333333 0.0 0.6666667
## [3,] 1.1666667 -0.5 -0.8333333
Initiation à R - Fred Williamson 34
Matrices
Valeurs et vecteurs propres
eigen(m3)
## eigen() decomposition
## $values
## [1] 10.358899 1.641101 -1.000000
##
## $vectors
## [,1] [,2] [,3]
## [1,] 0.6188737 0.7229106 -3.573787e-16
## [2,] 0.4982634 -0.6784129 -7.071068e-01
## [3,] 0.6072306 -0.1309817 7.071068e-01
Initiation à R - Fred Williamson 35
Arrays
Les arrays sont des objets de données R
pouvant stocker des données dans plus de
deux dimensions.
Initiation à R - Fred Williamson 36
Arrays
# Creation de 2 vecteurs de taille différente
vecteur1 <- c(5,6,7)
vecteur2 <- c(10,11,12,13,14,15)
# Création d'un objet de type array
# Result contient de 2 matrices
# Les 2 matrices Contiennent 3 lignes et 3 colonnes
result <- array(c(vecteur1,vecteur2),dim = c(3,3,2))
print(result)
## , , 1
##
## [,1] [,2] [,3]
## [1,] 5 10 13
## [2,] 6 11 14
## [3,] 7 12 15
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 5 10 13
## [2,] 6 11 14
## [3,] 7 12 15
Initiation à R - Fred Williamson 37
Listes
# Création de la liste
liste = list(
name = "Fred",
age = 30,
enfant = c("Modric","Casemiro","Kross"),
matrice = matrix(1:4, ncol = 2)
)
# Afficher la liste
print(liste)
## $name
## [1] "Fred"
##
## $age
## [1] 30
##
## $enfant
## [1] "Modric" "Casemiro" "Kross"
##
## $matrice
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
Initiation à R - Fred Williamson 38
Data frames
Une data frame peut être considérée comme une
matrice mais pouvant avoir des colonnes de types
différents (numérique, texte, facteur, ....). C'est une
liste de type [Link].
Initiation à R - Fred Williamson 39
Data frames
Creation de data frames
# Création des vecteurs
nom <- c("Fred","Cecilia","Espira","Pierre","Juste","Leticia")
sexe <- c("Homme","Femme","Homme","Homme","Homme","Femme")
age <- c(20, 25, 30, 26, 31, 32)
pays <- c("Congo","Gabon","Cameroun","Tchad","Togo","Mali")
taille <- c(1.55, 1.74, 1.85, 1.50, 1.80, 1.70)
masse <- c(90.7, 88.5, 100.0, 95.0, 89.9, 75.6)
# Création de la data frame "myframe"
myframe <- [Link](nom, sexe, age, pays, taille, masse)
Initiation à R - Fred Williamson 40
Data frames
Visualisation des données
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# head() renvoie les 6 premières observations de myframe
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
head(myframe)
## nom sexe age pays taille masse
## 1 Fred Homme 20 Congo 1.55 90.7
## 2 Cecilia Femme 25 Gabon 1.74 88.5
## 3 Espira Homme 30 Cameroun 1.85 100.0
## 4 Pierre Homme 26 Tchad 1.50 95.0
## 5 Juste Homme 31 Togo 1.80 89.9
## 6 Leticia Femme 32 Mali 1.70 75.6
Initiation à R - Fred Williamson 41
Data frames
Type de variables
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Affiche de manière compacte la structure interne d'un objet R
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
str(myframe)
## '[Link]': 6 obs. of 6 variables:
## $ nom : Factor w/ 6 levels "Cecilia","Espira",..: 3 1 2 6 4 5
## $ sexe : Factor w/ 2 levels "Femme","Homme": 2 1 2 2 2 1
## $ age : num 20 25 30 26 31 32
## $ pays : Factor w/ 6 levels "Cameroun","Congo",..: 2 3 1 5 6 4
## $ taille: num 1.55 1.74 1.85 1.5 1.8 1.7
## $ masse : num 90.7 88.5 100 95 89.9 75.6
Initiation à R - Fred Williamson 42
Data frames
Résumé détaillé de l’analyse
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Résumé de la deuxième à la sixième variable
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
summary(myframe[2:6])
## sexe age pays taille masse
## Femme:2 Min. :20.00 Cameroun:1 Min. :1.500 Min. : 75.60
## Homme:4 1st Qu.:25.25 Congo :1 1st Qu.:1.587 1st Qu.: 88.85
## Median :28.00 Gabon :1 Median :1.720 Median : 90.30
## Mean :27.33 Mali :1 Mean :1.690 Mean : 89.95
## 3rd Qu.:30.75 Tchad :1 3rd Qu.:1.785 3rd Qu.: 93.92
## Max. :32.00 Togo :1 Max. :1.850 Max. :100.00
Initiation à R - Fred Williamson 43
Data frames
Indexation d’observations
# Liste des individus de sexe masculin
myframe[myframe$sexe == "Homme" , ]
## nom sexe age pays taille masse
## 1 Fred Homme 20 Congo 1.55 90.7
## 3 Espira Homme 30 Cameroun 1.85 100.0
## 4 Pierre Homme 26 Tchad 1.50 95.0
## 5 Juste Homme 31 Togo 1.80 89.9
# Liste des Camerounais de masse >= 100
myframe[myframe$pays == "Cameroun" & myframe$masse >= 100 , ]
## nom sexe age pays taille masse
## 3 Espira Homme 30 Cameroun 1.85 100
Initiation à R - Fred Williamson 44
Data frames
Tableaux de contingence
# Tableau d'effectifs
table(myframe$sexe, myframe$pays)
##
## Cameroun Congo Gabon Mali Tchad Togo
## Femme 0 0 1 1 0 0
## Homme 1 1 0 0 1 1
# Tableau de fréquences
round([Link](table(myframe$sexe, myframe$pays)),2)
##
## Cameroun Congo Gabon Mali Tchad Togo
## Femme 0.00 0.00 0.17 0.17 0.00 0.00
## Homme 0.17 0.17 0.00 0.00 0.17 0.17
Initiation à R - Fred Williamson 45
Data frames
Importation et exportation des données
# Imporatation des données
foot <- read.csv2(file = "C:/Users/[Link]/Documents/[Link]")
head(foot, n = 8)
## club [Link] [Link] league cup country
## 1 Real Madrid 13 3 33 19 Espagne
## 2 AC Milan 7 4 18 5 Italie
## 3 Bayern Munich 5 5 28 18 Allemagne
## 4 Liverpool FC 5 3 18 7 Angleterre
## 5 FC Barcelone 5 3 25 30 Espagne
## 6 Ajax Amsterdam 4 2 33 18 Pays-Bas
## 7 Manchester United 3 2 20 12 Angleterre
## 8 Inter Milan 3 2 18 7 Italie
# Exportation des données
write.csv2(foot, file = "C:/Users/[Link]/Documents/[Link]")
Initiation à R - Fred Williamson 46
Facteurs
# Création du vecteur x
# runif() génère 10 nombres aléatoires compris entre 0 et 1
# round() arrondi les valeurs à 0 decimale
x <- round(runif(10, 0, 1))
print(x)
## [1] 1 1 0 1 0 0 0 1 1 1
# Création du vecteur y
# Conversion du vecteur x en facteur
y <- factor(x, labels = c("Homme", "Femme"), levels = c(0,1))
print(y)
## [1] Femme Femme Homme Femme Homme Homme Homme Femme Femme Femme
## Levels: Homme Femme
Initiation à R - Fred Williamson 47
Programmation
avec R
Initiation à R - Fred Williamson
Structures
conditionnelles
# Affectation
x <- 10
# Structure conditionnelle if()
if(x >= 0){
cat(x, "est supérieur ou égal à 0")
}else{
cat(x, "est inférieur à 0")
}
## 10 est supérieur ou égal à 0
Initiation à R - Fred Williamson 49
Boucles
Boucle for()
# Création du vecteur x
x <- 1:10
# Afficher le vecteur x
print(x)
## [1] 1 2 3 4 5 6 7 8 9 10
# Afficher le vecteur x
# for() pour parcourir le vecteur x
# Le programme calcule la somme des éléments de x
s <- 0
for(i in 1:length(x)){
s <- s + x[i]
}
# Affiche la somme des éléments de x
print(s)
## [1] 55
Initiation à R - Fred Williamson 50
Boucles
Boucle while()
# Création du vecteur y
y <- 1:10
# Afficher le vecteur y
print(y)
## [1] 1 2 3 4 5 6 7 8 9 10
# While() pour parcourir le vecteur y
# Le programme calcule la somme des éléments de y
i <- 1
s <- 0
while (i <= length(y)) {
s <- s + y[i]
i <- i + 1
}
# Affiche la somme des éléments de y
print(s)
## [1] 55
Initiation à R - Fred Williamson 51
Fonctions
# Création du vecteur v
v <- c(1, 4, 9, 16, 25, 36)
# Fonction racine carrée
sqrt(v)
## [1] 1 2 3 4 5 6
# Création du vecteur Z
z <- c(-1, 4, -9, 16, -25, 36)
# Fonction valeur absolue
abs(z)
## [1] 1 4 9 16 25 36
Initiation à R - Fred Williamson 52
Fonctions
Créer ses propres fonctions
##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Fonction somme
##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
somme <- function(x, y){
return(x+y)
}
# Somme de 10 et 15
somme(10, 15)
## [1] 25
Initiation à R - Fred Williamson 53
Fonctions
Tri par sélection
triSelect <- function(v){
for(i in 1:(length(v)-1)){
indMin <- i
for(j in (i+1):length(v)){
if(v[j] < v[indMin]){
indMin <- j
}
}
if(indMin !=i){
temp = v[i]
v[i] = v[indMin]
v[indMin] = temp
}
}
return(v)
}
m <- c(2,4,1,5, 10, 8, 9)
triSelect(m)
## [1] 1 2 4 5 8 9 10
Initiation à R - Fred Williamson 54
Fonctions
Tri à bulles
triBulle <- function(v){
for (i in length(v):2) {
for (j in 1:i){
temp = 0
if (isTRUE(v[j + 1] > v[j])) {
temp = v[j+1]
v[j + 1] = v[j]
v[j]= temp
}
}
}
return (v)
}
m1 <- c(2,4,1,5, 10, 8, 9)
triBulle(m1)
## [1] 10 9 8 5 4 2 1
Initiation à R - Fred Williamson 55
Graphiques
Initiation à R - Fred Williamson
Graphiques
Boite à moustaches
library(BioStatR)
boxplot(taille ~ espece, data = Mesures5, col=rainbow(4))
Initiation à R - Fred Williamson 57
Graphiques
Nuage de points
library(ggplot2)
p <- ggplot(diamonds, aes(carat, price))
p <- p + geom_point()
p
Initiation à R - Fred Williamson 58
Graphiques
Diagramme à barres
library(ggplot2)
barplot(table(diamonds$cut), las = 1)
Initiation à R - Fred Williamson 59
Graphiques
Diagramme circulaire
pie(rep(1, 250), col = rainbow(250), border = NA, labels = "")
Initiation à R - Fred Williamson 60
Graphiques
Histogramme
library(BioStatR)
hist(Mesures5$taille, col = "cornflowerblue",border = "white", prob = TRUE)
lines(density(Mesures5$taille, [Link] = TRUE), lwd = 2, col = "orange")
Initiation à R - Fred Williamson 61
Thank you
Fred Williamson
Data Scientist