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 |
