R Select(), Filter(), Arrange(), Pipeline avec exemple

La bibliothรจque appelรฉe dplyr contient des verbes prรฉcieux pour naviguer dans l'ensemble de donnรฉes. Grรขce ร  ce tutoriel, vous utiliserez le jeu de donnรฉes Temps de trajet. L'ensemble de donnรฉes collecte des informations sur le trajet effectuรฉ par un conducteur entre son domicile et son lieu de travail. Il y a quatorze variables dans l'ensemble de donnรฉes, dont :

  • DayOfWeek : identifiez le jour de la semaine oรน le conducteur utilise sa voiture
  • Distance : La distance totale du trajet
  • MaxSpeed : La vitesse maximale du trajet
  • TotalTime : La durรฉe en minutes du trajet

L'ensemble de donnรฉes contient environ 200 observations, et les trajets ont eu lieu entre Monday jusqu'ร  vendredi.

Tout d'abord, vous devez :

  • charger l'ensemble de donnรฉes
  • vรฉrifier la structure des donnรฉes.

Une fonctionnalitรฉ pratique de dplyr est la fonction glimpse(). Il s'agit d'une amรฉlioration par rapport ร  str(). Nous pouvons utiliser glimpse() pour voir la structure de l'ensemble de donnรฉes et dรฉcider quelle manipulation est requise.

library(dplyr) 
PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv"
df <- read.csv(PATH)
glimpse(df)

Sortie :

## Observations: 205
## Variables: 14
## $ X              <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...
## $ Date           <fctr> 1/6/2012, 1/6/2012, 1/4/2012, 1/4/2012, 1/3/20...
## $ StartTime      <fctr> 16:37, 08:20, 16:17, 07:53, 18:57, 07:57, 17:3...
## $ DayOfWeek      <fctr> Friday, Friday, Wednesday, Wednesday, Tuesday,...
## $ GoingTo        <fctr> Home, GSK, Home, GSK, Home, GSK, Home, GSK, GS...
## $ Distance       <dbl> 51.29, 51.63, 51.27, 49.17, 51.15, 51.80, 51.37...
## $ MaxSpeed       <dbl> 127.4, 130.3, 127.4, 132.3, 136.2, 135.8, 123.2...
## $ AvgSpeed       <dbl> 78.3, 81.8, 82.0, 74.2, 83.4, 84.5, 82.9, 77.5,...
## $ AvgMovingSpeed <dbl> 84.8, 88.9, 85.8, 82.9, 88.1, 88.8, 87.3, 85.9,...
## $ FuelEconomy    <fctr> , , , , , , -, -, 8.89, 8.89, 8.89, 8.89, 8.89...
## $ TotalTime      <dbl> 39.3, 37.9, 37.5, 39.8, 36.8, 36.8, 37.2, 37.9,...
## $ MovingTime     <dbl> 36.3, 34.9, 35.9, 35.6, 34.8, 35.0, 35.3, 34.3,...
## $ Take407All     <fctr> No, No, No, No, No, No, No, No, No, No, No, No...
## $ Comments       <fctr> , , , , , , , , , , , , , , , Put snow tires o...	

Il est รฉvident que la variable Commentaires nรฉcessite un diagnostic plus approfondi. Les premiรจres observations de la variable Commentaires ne sont que des valeurs manquantes.

sum(df$Comments =="")

Code Explication

  • sum(df$Comments =="") : somme les observations รฉgales ร  "" dans la colonne commentaires de df

Sortie :

## [1] 181

sรฉlectionner()

Nous commencerons par le verbe select(). Nous n'avons pas nรฉcessairement besoin de toutes les variables, et une bonne pratique consiste ร  sรฉlectionner uniquement les variables que vous jugez pertinentes.

Nous avons 181 observations manquantes, soit prรจs de 90 % de l'ensemble de donnรฉes. Si vous dรฉcidez de les exclure, vous ne pourrez pas poursuivre l'analyse.

L'autre possibilitรฉ est de supprimer la variable Comment avec le verbe select().

Nous pouvons sรฉlectionner des variables de diffรฉrentes maniรจres avec select(). Notez que le premier argument est lโ€™ensemble de donnรฉes.

- `select(df, A, B ,C)`: Select the variables A, B and C from df dataset.
- `select(df, A:C)`: Select all variables from A to C from df dataset.
- `select(df, -C)`: Exclude C from the dataset from df dataset.	

Vous pouvez utiliser la troisiรจme mรฉthode pour exclure la variable Commentaires.

step_1_df <- select(df, -Comments)
dim(df)

Sortie :

## [1] 205  14
dim(step_1_df)

Sortie :

## [1] 205  13

L'ensemble de donnรฉes d'origine comporte 14 fonctionnalitรฉs tandis que step_1_df en contient 13.

Filtre()

Le verbe filter() permet de maintenir les observations selon un critรจre. Le filter() fonctionne exactement comme select(), vous transmettez d'abord la trame de donnรฉes puis une condition sรฉparรฉe par une virgule :

filter(df, condition)
arguments:
- df: dataset used to filter the data
- condition:  Condition used to filter the data	

Un critรจre

Tout dโ€™abord, vous pouvez compter le nombre dโ€™observations au sein de chaque niveau dโ€™une variable factorielle.

table(step_1_df$GoingTo)

Code Explication

  • table() : Comptez le nombre d'observations par niveau. Notez que seules les variables au niveau du facteur sont acceptรฉes
  • table(step_1_df$GoingTo) : comptez le nombre de voyages vers la destination finale.

Sortie :

## 
##  GSK Home 
##  105  100	

La fonction table() indique que 105 trajets vont ร  GSK et 100 ร  Home.

Nous pouvons filtrer les donnรฉes pour renvoyer un ensemble de donnรฉes avec 105 observations et un autre avec 100 observations.

# Select observations
if GoingTo == Home
select_home <- filter(df, GoingTo == "Home")
dim(select_home)

Sortie :

## [1] 100  14
# Select observations
if GoingTo == Work
select_work <- filter(df, GoingTo == "GSK")
dim(select_work)

Sortie :

## [1] 105  14

Plusieurs critรจres

Nous pouvons filtrer un ensemble de donnรฉes ร  l'aide de plusieurs critรจres. Par exemple, vous pouvezโ€ฆtracles observations oรน la destination est le domicile et ont eu lieu un mercredi.

select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday")
dim(select_home_wed)

Sortie :

## [1] 23 14

23 observations correspondaient ร  ce critรจre.

Pipeline

La crรฉation d'un jeu de donnรฉes nรฉcessite de nombreuses opรฉrations, telles que :

  • l'importation
  • fusion
  • la sรฉlection
  • filtration
  • etc

La bibliothรจque dplyr est livrรฉe avec un opรฉrateur pratique, %>%, appelรฉ pipeline. La fonctionnalitรฉ de pipeline rend la manipulation propre, rapide et moins propice aux erreurs.

Cet opรฉrateur est un code qui effectue des รฉtapes sans enregistrer les รฉtapes intermรฉdiaires sur le disque dur. Si vous revenez ร  notre exemple ci-dessus, vous pouvez sรฉlectionner les variables qui vous intรฉressent et les filtrer. Nous avons trois รฉtapes :

  • ร‰tape 1 : Importer les donnรฉes : Importez les donnรฉes GPS
  • ร‰tape 2 : Sรฉlectionnez les donnรฉes : sรฉlectionnez GoingTo et DayOfWeek
  • ร‰tape 3 : Filtrer les donnรฉes : retour uniquement ร  la maison et le mercredi

Nous pouvons utiliser la mรฉthode dure pour le faire :

# Step 1
step_1 <- read.csv(PATH)

# Step 2 
step_2 <- select(step_1, GoingTo, DayOfWeek)

# Step 3 
step_3 <- filter(step_2, GoingTo == "Home", DayOfWeek == "Wednesday")

head(step_3)

Sortie :

##   GoingTo DayOfWeek
## 1    Home Wednesday
## 2    Home Wednesday
## 3    Home Wednesday
## 4    Home Wednesday
## 5    Home Wednesday
## 6    Home Wednesday	

Ce nโ€™est pas une maniรจre pratique dโ€™effectuer de nombreuses opรฉrations, surtout dans une situation comportant de nombreuses รฉtapes. L'environnement se retrouve avec beaucoup d'objets stockรฉs.

Utilisons plutรดt l'opรฉrateur de pipeline %>%. Il suffit de dรฉfinir la trame de donnรฉes utilisรฉe au dรฉbut et tout le processus en dรฉcoulera.

Syntaxe de base du pipeline

New_df <- df %>%
step 1 %>%
step 2 %>%
...
arguments
- New_df: Name of the new data frame 
- df: Data frame used to compute the step
- step: Instruction for each step
- Note: The last instruction does not need the pipe operator `%`, you don't have instructions to pipe anymore
Note: Create a new variable is optional. If not included, the output will be displayed in the console.

Vous pouvez crรฉer votre premier canal en suivant les รฉtapes รฉnumรฉrรฉes ci-dessus.

# Create the data frame filter_home_wed.It will be the object return at the end of the pipeline
filter_home_wed <- 

#Step 1
read.csv(PATH) % > % 

#Step 2
select(GoingTo, DayOfWeek) % > % 

#Step 3
filter(GoingTo == "Home",DayOfWeek == "Wednesday")
identical(step_3, filter_home_wed)

Sortie :

## [1] TRUE

Nous sommes prรชts ร  crรฉer un superbe ensemble de donnรฉes avec l'opรฉrateur du pipeline.

organiser()

Dans l' prรฉcรฉdent tutoriel, vous apprenez ร  trier les valeurs avec la fonction sort(). La bibliothรจque dplyr a sa fonction de tri. Cela fonctionne ร  merveille avec le pipeline. Le verbe arrange() peut rรฉorganiser une ou plusieurs lignes, soit par ordre croissant (par dรฉfaut), soit par ordre dรฉcroissant.

- `arrange(A)`: Ascending sort of variable A
- `arrange(A, B)`: Ascending sort of variable A and B
- `arrange(desc(A), B)`: Descending sort of variable A and ascending sort of B

Nous pouvons trier la distance par destination.

# Sort by destination and distance
step_2_df <-step_1_df %>%
	arrange(GoingTo, Distance)
head<step_2_df)

Sortie :

##     X       Date StartTime DayOfWeek GoingTo Distance MaxSpeed AvgSpeed
## 1 193  7/25/2011     08:06    Monday     GSK    48.32    121.2     63.4
## 2 196  7/21/2011     07:59  Thursday     GSK    48.35    129.3     81.5
## 3 198  7/20/2011     08:24 Wednesday     GSK    48.50    125.8     75.7
## 4 189  7/27/2011     08:15 Wednesday     GSK    48.82    124.5     70.4
## 5  95 10/11/2011     08:25   Tuesday     GSK    48.94    130.8     85.7
## 6 171  8/10/2011     08:13 Wednesday     GSK    48.98    124.8     72.8
##   AvgMovingSpeed FuelEconomy TotalTime MovingTime Take407All
## 1           78.4        8.45      45.7       37.0         No
## 2           89.0        8.28      35.6       32.6        Yes
## 3           87.3        7.89      38.5       33.3        Yes
## 4           77.8        8.45      41.6       37.6         No
## 5           93.2        7.81      34.3       31.5        Yes
## 6           78.8        8.54      40.4       37.3         No

Rรฉsumรฉ

Dans le tableau ci-dessous, vous rรฉsumez toutes les opรฉrations que vous avez apprises au cours du didacticiel.

Verbe Objectif Code Explication
aperรงu vรฉrifier la structure d'un df
glimpse(df)
Identique ร  str()
sรฉlectionner() Sรฉlectionner/exclure les variables
select(df, A, B ,C)
Sรฉlectionnez les variables A, B et C
select(df, A:C)
Sรฉlectionnez toutes les variables de A ร  C
select(df, -C)
Exclure C
filtre() Filtrer le df en fonction d'une ou plusieurs conditions
filter(df, condition1)
Une condition
filter(df, condition1
condition2)
organiser() Trier l'ensemble de donnรฉes avec une ou plusieurs variables
arrange(A)
Tri ascendant de la variable A
arrange(A, B)
Tri ascendant des variables A et B
arrange(desc(A), B)
Tri dรฉcroissant de la variable A et tri ascendant de B
%>% Crรฉer un pipeline entre chaque รฉtape
step 1 %>% step 2 %>% step 3

Rรฉsumez cet article avec :