R Select(), Filter(), Arrange(), Pipeline with Example

Η βιβλιοθήκη που ονομάζεται dplyr περιέχει πολύτιμα ρήματα για πλοήγηση μέσα στο σύνολο δεδομένων. Μέσω αυτού του σεμιναρίου, θα χρησιμοποιήσετε το σύνολο δεδομένων χρόνου ταξιδιού. Το σύνολο δεδομένων συλλέγει πληροφορίες για το ταξίδι που οδηγεί ένας οδηγός μεταξύ του σπιτιού του και του χώρου εργασίας του. Υπάρχουν δεκατέσσερις μεταβλητές στο σύνολο δεδομένων, όπως:

  • DayOfWeek: Προσδιορίστε την ημέρα της εβδομάδας που ο οδηγός χρησιμοποιεί το αυτοκίνητό του
  • Απόσταση: Η συνολική απόσταση του ταξιδιού
  • MaxSpeed: Η μέγιστη ταχύτητα του ταξιδιού
  • TotalTime: Η διάρκεια σε λεπτά του ταξιδιού

Το σύνολο δεδομένων έχει περίπου 200 παρατηρήσεις στο σύνολο δεδομένων και οι διαδρομές πραγματοποιήθηκαν μεταξύ Monday έως την Παρασκευή.

Πρώτα απ 'όλα, πρέπει να:

  • φορτώστε το σύνολο δεδομένων
  • ελέγξτε τη δομή των δεδομένων.

Ένα εύχρηστο χαρακτηριστικό με το dplyr είναι η συνάρτηση glimpse(). Αυτή είναι μια βελτίωση σε σχέση με το str(). Μπορούμε να χρησιμοποιήσουμε την glimpse() για να δούμε τη δομή του συνόλου δεδομένων και να αποφασίσουμε ποιος χειρισμός απαιτείται.

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

Παραγωγή:

## 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...	

Αυτό είναι προφανές ότι η μεταβλητή Comments χρειάζεται περαιτέρω διαγνωστικό έλεγχο. Στις πρώτες παρατηρήσεις της μεταβλητής Σχόλια λείπουν μόνο τιμές.

sum(df$Comments =="")

Επεξήγηση κώδικα

  • sum(df$Comments ==””): Άθροισμα των παρατηρήσεων ίση με “” στα σχόλια της στήλης από το df

Παραγωγή:

## [1] 181

επιλέγω()

Θα ξεκινήσουμε με το ρήμα select(). Δεν χρειαζόμαστε απαραίτητα όλες τις μεταβλητές και μια καλή πρακτική είναι να επιλέγουμε μόνο τις μεταβλητές που θεωρείτε σχετικές.

Έχουμε 181 ελλείπουσες παρατηρήσεις, σχεδόν το 90 τοις εκατό του συνόλου δεδομένων. Εάν αποφασίσετε να τα εξαιρέσετε, δεν θα μπορείτε να συνεχίσετε την ανάλυση.

Η άλλη δυνατότητα είναι να απορρίψετε τη μεταβλητή Comment με το ρήμα select().

Μπορούμε να επιλέξουμε μεταβλητές με διαφορετικούς τρόπους με το select(). Σημειώστε ότι το πρώτο όρισμα είναι το σύνολο δεδομένων.

- `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.	

Μπορείτε να χρησιμοποιήσετε τον τρίτο τρόπο για να εξαιρέσετε τη μεταβλητή Σχόλια.

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

Παραγωγή:

## [1] 205  14
dim(step_1_df)

Παραγωγή:

## [1] 205  13

Το αρχικό σύνολο δεδομένων έχει 14 χαρακτηριστικά ενώ το step_1_df έχει 13.

Φίλτρο()

Το ρήμα filter() βοηθά να διατηρηθούν οι παρατηρήσεις σύμφωνα με ένα κριτήριο. Το filter() λειτουργεί ακριβώς όπως το select(), περνάτε πρώτα το πλαίσιο δεδομένων και μετά μια συνθήκη που χωρίζεται με κόμμα:

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

Ένα κριτήριο

Πρώτα απ 'όλα, μπορείτε να μετρήσετε τον αριθμό των παρατηρήσεων σε κάθε επίπεδο μιας μεταβλητής παράγοντα.

table(step_1_df$GoingTo)

Επεξήγηση κώδικα

  • table(): Μετρήστε τον αριθμό των παρατηρήσεων ανά επίπεδο. Σημείωση, μόνο η μεταβλητή επιπέδου παράγοντα είναι αποδεκτή
  • πίνακας(step_1_df$GoingTo): Μετρήστε τον αριθμό των ταξιδιών προς τον τελικό προορισμό.

Παραγωγή:

## 
##  GSK Home 
##  105  100	

Ο πίνακας συναρτήσεων() υποδεικνύει ότι 105 βόλτες πηγαίνουν στο GSK και 100 στο Home.

Μπορούμε να φιλτράρουμε τα δεδομένα για να επιστρέψουμε ένα σύνολο δεδομένων με 105 παρατηρήσεις και ένα άλλο με 100 παρατηρήσεις.

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

Παραγωγή:

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

Παραγωγή:

## [1] 105  14

Πολλαπλά κριτήρια

Μπορούμε να φιλτράρουμε ένα σύνολο δεδομένων με περισσότερα από ένα κριτήρια. Για παράδειγμα, μπορείτε να εξαγάγετε τις παρατηρήσεις όπου ο προορισμός είναι το σπίτι και σημειώθηκαν την Τετάρτη.

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

Παραγωγή:

## [1] 23 14

23 παρατηρήσεις ταιριάζουν με αυτό το κριτήριο.

Pipeline

Η δημιουργία ενός συνόλου δεδομένων απαιτεί πολλές λειτουργίες, όπως:

  • εισαγωγή
  • συγχώνευση
  • επιλογή
  • φιλτράρισμα
  • και ούτω καθεξής

Η βιβλιοθήκη dplyr συνοδεύεται από έναν πρακτικό τελεστή, %>%, που ονομάζεται the αγωγού. Η δυνατότητα διοχέτευσης καθιστά τον χειρισμό καθαρό, γρήγορο και λιγότερο γρήγορο σε σφάλματα.

Αυτός ο τελεστής είναι ένας κωδικός που εκτελεί βήματα χωρίς να αποθηκεύει ενδιάμεσα βήματα στον σκληρό δίσκο. Εάν επιστρέψετε στο παράδειγμά μας από παραπάνω, μπορείτε να επιλέξετε τις μεταβλητές που σας ενδιαφέρουν και να τις φιλτράρετε. Έχουμε τρία βήματα:

  • Βήμα 1: Εισαγωγή δεδομένων: Εισαγάγετε τα δεδομένα gps
  • Βήμα 2: Επιλογή δεδομένων: Επιλέξτε GoingTo και DayOfWeek
  • Βήμα 3: Φιλτράρισμα δεδομένων: Επιστροφή μόνο στο σπίτι και Τετάρτη

Μπορούμε να χρησιμοποιήσουμε τον δύσκολο τρόπο για να το κάνουμε:

# 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)

Παραγωγή:

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

Αυτός δεν είναι ένας βολικός τρόπος για να εκτελέσετε πολλές λειτουργίες, ειδικά σε μια κατάσταση με πολλά βήματα. Το περιβάλλον καταλήγει με πολλά αποθηκευμένα αντικείμενα.

Ας χρησιμοποιήσουμε τον τελεστή αγωγού %>% αντ' αυτού. Χρειάζεται μόνο να ορίσουμε το πλαίσιο δεδομένων που χρησιμοποιήθηκε στην αρχή και όλη η διαδικασία θα προέλθει από αυτό.

Βασική σύνταξη του αγωγού

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.

Μπορείτε να δημιουργήσετε τον πρώτο σας σωλήνα ακολουθώντας τα βήματα που απαριθμούνται παραπάνω.

# 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)

Παραγωγή:

## [1] TRUE

Είμαστε έτοιμοι να δημιουργήσουμε ένα εκπληκτικό σύνολο δεδομένων με τον χειριστή του αγωγού.

κανονίζω()

Στο προηγούμενο σεμινάριο, μαθαίνετε πώς να ταξινομείτε τις τιμές με τη συνάρτηση sort(). Η βιβλιοθήκη dplyr έχει τη λειτουργία ταξινόμησης. Λειτουργεί σαν γούρι με τον αγωγό. Το ρήμα arrange() μπορεί να αναδιατάξει μία ή πολλές σειρές, είτε αύξουσα (προεπιλογή) είτε φθίνουσα.

- `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

Μπορούμε να ταξινομήσουμε την απόσταση ανά προορισμό.

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

Παραγωγή:

##     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

Περίληψη

Στον παρακάτω πίνακα, συνοψίζετε όλες τις λειτουργίες που μάθατε κατά τη διάρκεια του σεμιναρίου.

Ρήμα Σκοπός Κώδικας εξήγηση
ματιά ελέγξτε τη δομή ενός df
glimpse(df)
Πανομοιότυπο με το str()
επιλέγω() Επιλέξτε/εξαιρέστε τις μεταβλητές
select(df, A, B ,C)
Επιλέξτε τις μεταβλητές A, B και C
select(df, A:C)
Επιλέξτε όλες τις μεταβλητές από το A έως το C
select(df, -C)
Εξαιρέστε το C
φίλτρο() Φιλτράρετε το df με βάση μία ή πολλές συνθήκες
filter(df, condition1)
Μία προϋπόθεση
filter(df, condition1
αρχή 2)
κανονίζω() Ταξινομήστε το σύνολο δεδομένων με μία ή πολλές μεταβλητές
arrange(A)
Αύξουσα μορφή μεταβλητής Α
arrange(A, B)
Αύξουσα μορφή μεταβλητών Α και Β
arrange(desc(A), B)
Φθίνουσα ταξινόμηση της μεταβλητής Α και αύξουσα ταξινόμηση της μεταβλητής Β
%>% Δημιουργήστε έναν αγωγό μεταξύ κάθε βήματος
step 1 %>% step 2 %>% step 3

Συνοψίστε αυτήν την ανάρτηση με: