R Select(), Filter(), Järjestä(), Pipeline esimerkin kanssa

Dplyr-niminen kirjasto sisältää arvokkaita verbejä tietojoukon sisällä liikkumiseen. Tämän opetusohjelman avulla käytät Matka-ajat-tietojoukkoa. Aineisto kerää tietoa kuljettajan koti- ja työpaikkansa välisistä matkoista. Tietojoukossa on neljätoista muuttujaa, mukaan lukien:

  • DayOfWeek: Tunnista viikonpäivä, jolloin kuljettaja käyttää autoaan
  • Etäisyys: Matkan kokonaispituus
  • MaxSpeed: Matkan suurin nopeus
  • TotalTime: Matkan pituus minuutteina

Aineistossa on noin 200 havaintoa, ja matkat tapahtuivat välillä Monday perjantaihin.

Ensinnäkin sinun on:

  • lataa tietojoukko
  • tarkista datan rakenne.

Yksi kätevä ominaisuus dplyr:ssä on glimpse()-funktio. Tämä on parannus str(). Voimme käyttää glimpse():tä nähdäksemme tietojoukon rakenteen ja päättääksemme, mitä käsittelyä tarvitaan.

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

lähtö:

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

Tämä on ilmeistä, että muuttuja Kommentit tarvitsee lisädiagnostiikkaa. Kommentit-muuttujan ensimmäisistä havainnoista puuttuu vain arvoja.

sum(df$Comments =="")

Koodin selitys

  • summa(df$Comments ==””): Summaa havainnot, jotka ovat yhtä kuin "" sarakkeen kommenteissa df:stä

lähtö:

## [1] 181

valitse ()

Aloitamme verbillä select(). Emme välttämättä tarvitse kaikkia muuttujia, ja hyvä käytäntö on valita vain ne muuttujat, jotka pidät merkityksellisinä.

Meillä on 181 puuttuvaa havaintoa, lähes 90 prosenttia tietojoukosta. Jos päätät jättää ne pois, et voi jatkaa analyysiä.

Toinen mahdollisuus on pudottaa muuttuja Kommentti verbillä select().

Voimme valita muuttujia eri tavoilla select(). Huomaa, että ensimmäinen argumentti on tietojoukko.

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

Voit käyttää kolmatta tapaa sulkea pois Kommentit-muuttuja.

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

lähtö:

## [1] 205  14
dim(step_1_df)

lähtö:

## [1] 205  13

Alkuperäisessä tietojoukossa on 14 ominaisuutta, kun taas step_1_df:ssä on 13.

Suodattaa()

Filter()-verbi auttaa pitämään havainnot kriteerin mukaisesti. Filter() toimii täsmälleen kuten select(), välität ensin datakehyksen ja sitten pilkulla erotetun ehdon:

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

Yksi kriteeri

Ensinnäkin voit laskea havaintojen lukumäärän tekijämuuttujan kullakin tasolla.

table(step_1_df$GoingTo)

Koodin selitys

  • table(): Laske havaintojen määrä tasoittain. Huomaa, että vain tekijätason muuttujat hyväksytään
  • table(step_1_df$GoingTo): Laske määränpäähän kohti tehtyjen matkojen määrä.

lähtö:

## 
##  GSK Home 
##  105  100	

Funktiotaulukko() osoittaa, että 105 matkaa menee GSK:lle ja 100 kotiin.

Voimme suodattaa tiedot palauttaaksemme yhden aineiston, jossa on 105 havaintoa, ja toisen, jossa on 100 havaintoa.

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

lähtö:

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

lähtö:

## [1] 105  14

Useita kriteerejä

Voimme suodattaa tietojoukon useammalla kuin yhdellä kriteerillä. Voit esimerkiksi poimia havainnot, joissa määränpää on Koti ja tapahtui keskiviikkona.

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

lähtö:

## [1] 23 14

23 havaintoa vastasi tätä kriteeriä.

Putki

Tietojoukon luominen vaatii paljon toimintoja, kuten:

  • tuovan
  • sulautuvan
  • valitsemalla
  • suodatus
  • jne.

Dplyr-kirjastossa on käytännöllinen operaattori, %>%, nimeltään the putki. Liukuhihnaominaisuus tekee manipuloinnista puhdasta, nopeaa ja vähemmän nopeaa virheille.

Tämä operaattori on koodi, joka suorittaa vaiheita tallentamatta välivaiheita kiintolevylle. Jos palaat yllä olevaan esimerkkiimme, voit valita kiinnostavat muuttujat ja suodattaa ne. Meillä on kolme vaihetta:

  • Vaihe 1: Tuo tiedot: Tuo GPS-tiedot
  • Vaihe 2: Valitse tiedot: Valitse GoingTo ja DayOfWeek
  • Vaihe 3: Suodata tiedot: Palauta vain kotiin ja keskiviikkoon

Voimme käyttää vaikeampaa tapaa tehdä se:

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

lähtö:

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

Se ei ole kätevä tapa suorittaa monia toimintoja, varsinkaan tilanteessa, jossa on paljon vaiheita. Ympäristö päätyy siihen, että säilytetään paljon esineitä.

Käytetään sen sijaan putkioperaattoria %> %. Meidän tarvitsee vain määrittää alussa käytetty tietokehys ja kaikki prosessi virtaa siitä.

Liukuhihnan perussyntaksi

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.

Voit luoda ensimmäisen putken noudattamalla yllä lueteltuja vaiheita.

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

lähtö:

## [1] TRUE

Olemme valmiita luomaan hämmästyttävän tietojoukon putkioperaattorin kanssa.

järjestää()

In edellinen opetusohjelma, opit lajittelemaan arvot funktiolla sort(). Kirjastossa dplyr on lajittelutoimintonsa. Se toimii kuin hurmaa putkilinjan kanssa. Arrange()-verbi voi järjestää uudelleen yhden tai useamman rivin joko nousevasti (oletus) tai laskevaksi.

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

Voimme lajitella etäisyyden määränpään mukaan.

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

lähtö:

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

Yhteenveto

Alla olevassa taulukossa on yhteenveto kaikista opetusohjelman aikana oppimistasi toimenpiteistä.

Verbi Tavoite Koodi Selitys
vilaus tarkista df:n rakenne
glimpse(df)
Sama kuin str()
valitse () Valitse/sulje pois muuttujat
select(df, A, B ,C)
Valitse muuttujat A, B ja C
select(df, A:C)
Valitse kaikki muuttujat A:sta C:hen
select(df, -C)
Sulje pois C
suodattaa() Suodata df yhden tai useamman ehdon perusteella
filter(df, condition1)
Yksi ehto
filter(df, condition1
ehto2)
järjestää() Lajittele tietojoukko yhdellä tai useammalla muuttujalla
arrange(A)
Nouseva muuttuja A
arrange(A, B)
Nouseva muuttuja A ja B
arrange(desc(A), B)
Laskeva muuttuja A ja nouseva laji B
%>% Luo putki jokaisen vaiheen väliin
step 1 %>% step 2 %>% step 3