Formation R

Introduction: Tidyverse

Qu’est-ce que R? ok ok ok

  • Un logiciel
  • Un language de programmation
  • Open Source

Workflow d’un projet Data Science

Qu’est-ce qu’on peut faire avec R?

  • Data manipulation
  • Statistiques avancées
  • Machine learning
  • Visualisation
  • Rapports Automatisés
  • Web application

Aperçu des visualisations

Graphique simple

Aperçu des visualisations

Graphique Avancé

Aperçu des visualisations

Graphique Interactif

Aperçu d’une application

Suivi du mot-clef #rstat sur Twitter


Nous n’allons pas utiliser R
mais R Studio

Pourquoi cela?

Ouvrez R Studio

  • 1: Script - écriture du programme
  • 2: Console - excécution du programme
  • 3: Environnement - l’ensemble des objets enregistrés
  • 4: Files - l’arborescence des fichiers

Ajouter des Packages

Installation de Packages

Packages tidyverse

install.packages('tidyverse')
  • Facilite la manipulation de données
  • Meilleure visualisation
  • D’autres avantages que nous verrons par la suite

Les Objets

Les objets sont tous les éléments que vous manipulez dans R :

  • scalaire: 8
  • vecteur : c(1, 8, 10) ou 1:10
  • matrice : matrix(1:10, ncol=2)
  • chaine de charactères: "hello world!"

  • "=" ou "<-" servent à associer les objets à des variables
  • a <- 3 se lit: “3 est associé à a”

Définir un chiffre numérique

a <- 3

Ou

a = 3
  • Les conventions veulent qu’on écrivent plutôt “<-” pour associer une valeur à une variable.

Pour vérifier si un élément est numérique:

is.numeric(a)

Définir une chaine de charactères

a <- 'Bonjour tout le monde'

Définir un vecteur

Travailler avec des vecteurs permet d’effectuer des calculs de groupe.


c() permet de construire des vecteurs :

v <- c(1,4,6,5,8)
v

Autres moyens de créer des vecteurs

#1
1:10

#2
seq(from=0,to=10,by=2)

Un vecteur peut être numérique ou caractère mais pas les 2!

# 1
v1 <- 1:10

# 2
v2 <- c('Jean', 'Baptiste', 'Anne', 'Marie')

# voir le 3eme élément du vecteur v2
v2[3]

# vecteur formé de v1 et v2
# Tout est passé en caractere dans v3
v3 <- c(v1, v2)

Définir une variable catégorielle (Factor)

Les variables catégorielles sont appelées factor dans R

  • Ressemble aux chaines de caractères
  • Exemple: Type de carburant.
carburant <- c('hydrogene', 'diesel', 'electrique', 'essence', 'gaz liquéfié')

#Savoir si c'est unw variable catégorielle
is.factor(carburant)

#Transformer en variable catégorielle
as.factor(carburant)
  • On verra les variables catégorielles plus en détail avec le package forcats

Définir une date

as.Date('2020/12/31')

On verra par la suite le package lubridate qui facilite la manipulation des dates

Définir une opération logique (Booléen)

  • Opération qui retourne toujours TRUE ou FALSE
  • Utile pour faire des vérifications ou déclencer des calculs
  • “==” pour tester une égalité
# Exemple évidant
2 > 1

# Exemple évidant
v1 <- c(10,4,5,3,7,2,11)
v1<6

#Voir les indices  des valeurs respectant la condition
which((v1<6)==TRUE)

Utilisation de dataset

library(tidyverse)

# Consulter un dataset 
starwars

# Creation du dataset new_starwars basé sur starwars
new_starwars <- starwars

Aperçu d’un dataset dans l’environnement

Aperçu d’un dataset dans l’environnement

Aperçu d’un dataset dans l’environnement

Aperçu d’un dataset dans l’environnement

Aperçu d’un dataset dans l’environnement

Aperçu d’un dataset dans l’environnement

Aperçu d’un dataset dans l’environnement

Aperçu d’un dataset dans l’environnement

Aperçu d’un dataset dans l’environnement

Aperçu d’un dataset dans l’environnement

Possibilité de voir une variable avec $

# Consulter un dataset 
new_starwars

# Consulter une colonne en particulier
new_starwars$name

Création de variable

  • 1) Associé votre “prénom” à la variable prenom
  • 2) Entrez prenom dans la console
  • 3) Faite la même chose avec votre age

Création de dataset

  • Création des vecteurs qui vont composer le dataset
  • Création des datasets

Les vecteurs

# Consulter un dataset 
domcor_accident <- c(rep("Accident avec blessés légers",2), "Accident mortel", rep("Accident avec blessés graves", 2))
espece_accident <- c("Autres types d'accident", rep("Entre véhicules en marche",2),  rep("Contre un obstacle fixe", 2))
vitesse_accident <- c("50 km/h", rep("90 km/h",2),  rep("130 km/h", 2))
implique_accident <- c(3, 5, 4, 2, 1)

r_lat <- c(49.51144, 49.49998, 49.54201, 49.49998, 49.60039, 49.75062)
r_lon <- c(5.968732, 5.943512, 6.287400, 5.943512, 6.101320, 6.124213)
r_dist <- c(7.34, 3.42, 9.3, 2.6, 8.8, 5.2)

Les Datasets

accident <- tibble(year=rep(2019,5), domcor = domcor_accident, 
                   espece = espece_accident, vitesse = vitesse_accident, 
                   implique = implique_accident, id=1:5)

radar <- tibble(id = 1:6, lat= r_lat, lon = r_lon, distanceKM = r_dist)

Structure des données

Dataset




  • Les lignes sont appelées des observations
  • Les colonnes sont appelées des variables

Dataset




  • Les lignes sont appelées des observations
  • Les colonnes sont appelées des variables

Fonctions

Permet de manipuler les données plus facilement et automatiquement

  • head(x,n), tail(x,n)
  • mean(x), sd(x), var(x)
  • sort(x), order(x)
  • min(x), max(x)
  • quantile(x)

Comment manipuler la fonction?
Accèss à l’aide via ?

# Consulter un dataset 
?quantile

Manipulation de données

  • %>% (pipe operator)
  • select()
  • filter()
  • group_by()
  • summarise()
  • mutate()
  • mutate(across())
  • inner_join()

Datasets

# '%>%' implique que la fonction ('head') qui suit, sera 
# appliquée sur le dataset qui précède ('bank')
accident %>% 
  head(3) 
## # A tibble: 3 × 6
##    year domcor                       espece               vitesse implique    id
##   <dbl> <chr>                        <chr>                <chr>      <dbl> <int>
## 1  2019 Accident avec blessés légers Autres types d'acci… 50 km/h        3     1
## 2  2019 Accident avec blessés légers Entre véhicules en … 90 km/h        5     2
## 3  2019 Accident mortel              Entre véhicules en … 90 km/h        4     3
# '%>%' implique que la fonction ('tail') qui suit, sera 
# appliquée sur le dataset qui précède ('client')
radar %>% 
  tail(3)
## # A tibble: 3 × 4
##      id   lat   lon distanceKM
##   <int> <dbl> <dbl>      <dbl>
## 1     4  49.5  5.94        2.6
## 2     5  49.6  6.10        8.8
## 3     6  49.8  6.12        5.2

select()


radar %>% 
  select(id, lon, lat) %>% 
  head(5)
## # A tibble: 5 × 3
##      id   lon   lat
##   <int> <dbl> <dbl>
## 1     1  5.97  49.5
## 2     2  5.94  49.5
## 3     3  6.29  49.5
## 4     4  5.94  49.5
## 5     5  6.10  49.6

filter()


# Pour les opérations, les caracteres correspondent respectivement à
# a. `==` ----> égale         c. `|`  ----> ou 
# b. %in% ----> dans          d. `&`  ----> et 
radar %>%
  filter(distanceKM > 5) %>% 
  head(3)
## # A tibble: 3 × 4
##      id   lat   lon distanceKM
##   <int> <dbl> <dbl>      <dbl>
## 1     1  49.5  5.97       7.34
## 2     3  49.5  6.29       9.3 
## 3     5  49.6  6.10       8.8

filter()

# Les accidents avec des blessés légers
accident %>%
  filter(domcor == 'Accident avec blessés légers')
                      

# Les accidents entre véhicules en marche ou Contre un obstacle fixe
new_starwars %>%
  filter(espece %in% c("Entre véhicules en marche","Contre un obstacle fixe"))

# Les accidents  ni entre véhicules en marche, ni  Contre un obstacle fixe
new_starwars %>%
  filter(!espece %in% c("Entre véhicules en marche","Contre un obstacle fixe"))


# Les accidents de plus de 50 km/h et qui ne sont pas avec des blessés légers
accident %>%
  filter(!domcor == 'Accident avec blessés légers' & !vitesse %in% c("30 km/h","50 km/h"))

# Les radar à moins de 2km ou plus de 8km de l'accident
radar %>%
  filter(distanceKM > 8 | distanceKM < 2)

# Les accidents mortels sur des routes à 50km/h
accident %>%
  filter(vitesse == "50 km/h" & domcor == "Accident mortel")

group_by()


# Pour les opérations groupées
accident %>% 
  group_by(domcor) %>% 
  head(5)
## # A tibble: 5 × 6
## # Groups:   domcor [3]
##    year domcor                       espece               vitesse implique    id
##   <dbl> <chr>                        <chr>                <chr>      <dbl> <int>
## 1  2019 Accident avec blessés légers Autres types d'acci… 50 km/h        3     1
## 2  2019 Accident avec blessés légers Entre véhicules en … 90 km/h        5     2
## 3  2019 Accident mortel              Entre véhicules en … 90 km/h        4     3
## 4  2019 Accident avec blessés graves Contre un obstacle … 130 km…        2     4
## 5  2019 Accident avec blessés graves Contre un obstacle … 130 km…        1     5

group_by() %>% summarise()


# Pour les opérations groupées
accident %>% 
  group_by(domcor) %>% 
  summarise(nb_accidents = n(), mean_implique = mean(implique)) %>% 
  head(5)
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 3 × 3
##   domcor                       nb_accidents mean_implique
##   <chr>                               <int>         <dbl>
## 1 Accident avec blessés graves            2           1.5
## 2 Accident avec blessés légers            2           4  
## 3 Accident mortel                         1           4

mutate()


# Ajouter une nouvelle colonne

# Equivalent: vitesse_num = str_remove_all( vitesse, ' km/h') %>% as.numeric
accident %>% 
  mutate(vitesse_num = str_remove_all( vitesse, ' km/h'),
         vitesse_num = as.numeric(vitesse_num)) %>% 
  head(2)
## # A tibble: 2 × 7
##    year domcor                       espece   vitesse implique    id vitesse_num
##   <dbl> <chr>                        <chr>    <chr>      <dbl> <int>       <dbl>
## 1  2019 Accident avec blessés légers Autres … 50 km/h        3     1          50
## 2  2019 Accident avec blessés légers Entre v… 90 km/h        5     2          90

mutate(across(…))


# Modifier plusieurs colonne en une fois 
# Exemple : Plusieurs colonne en numérique
# ":" Toutes les colonnes entre lat et lon
radar %>% 
  mutate(across(lat:lon, ~ round(., 2))) %>% 
  head(2)
## # A tibble: 2 × 4
##      id   lat   lon distanceKM
##   <int> <dbl> <dbl>      <dbl>
## 1     1  49.5  5.97       7.34
## 2     2  49.5  5.94       3.42

mutate(across(…))

# Modifier plusieurs colonne en une fois 
# Exemple : Plusieurs colonne en numérique
# ":" Toutes les colonnes numériques
radar %>% 
  mutate(across(is.numeric, ~ round(., 2))) %>% 
  head(2)

inner_join()


# Pour les opérations groupées
accident %>% 
  inner_join(radar, by = c('id'='id')) %>% 
  head(3)
## # A tibble: 3 × 9
##    year domcor        espece       vitesse implique    id   lat   lon distanceKM
##   <dbl> <chr>         <chr>        <chr>      <dbl> <int> <dbl> <dbl>      <dbl>
## 1  2019 Accident ave… Autres type… 50 km/h        3     1  49.5  5.97       7.34
## 2  2019 Accident ave… Entre véhic… 90 km/h        5     2  49.5  5.94       3.42
## 3  2019 Accident mor… Entre véhic… 90 km/h        4     3  49.5  6.29       9.3

Instructions

  • 1) Lire le package {dplyr}
  • 2) Consulter la table starwars dans {dplyr}
  • 3) Creer un dataset new_starwars basé sur starwars
  • 4) Selectionner les personnages du film A New Hope
  • 5) Selectionner tous les personnages féminins
  • 6) Selectionner tous les personnages féminins et humain
  • 7) Selectionner les personnages ni féminin, ni humain
  • 8) Compter le nombre de personnage par espèce
  • 9) Caluler la taille minimale, maximale et moyenne par espèce

Transposer des données

Format long à large



  •            df %>%
  •            pivot_wider(names_from = col2,
                                                    values_from = col3)

Format large à long



  •            df %>%
  •            pivot_longer(names_to= 'choose_name',
                                                        values_to = 'choose_name')

Instructions

  • 1) Lire le package {tidyr}
  • 2) Consulter la table billboard dans {tidyr}
  • 3) Creer la table billboard_new basée sur billboard
  • 4) Creer une colonne week correspondant à la semaine et une colonne rank correspondant au classement de la chanson sous format long
  • 4) Sauvegarder billboard_new sous le nom t_billboard
  • 5) Creer la table us_rent_income_new basée sur us_rent_income de {tidyr}
  • 6) Suprimer la colonne moe
  • 7) Transformer le dataset en format large, associer les variables aux valeurs estimées

Récapitulatif

  • R permet d’élaborer un projet Statistiques
  • Tidyverse facilite la transformation de données

Merci pour votre attention

Questions?

  • Est-ce que dans votre environnement de travail, ça vaut la peine?
  • Ou trouver cette présentation?

Contact

Kevin Rosamont Prombo