R Select(), Filter(), Arrange(), Örnekle Boru Hattı

Dplyr adı verilen kütüphane, veri kümesi içinde gezinmek için değerli fiiller içerir. Bu eğitim aracılığıyla Seyahat süreleri veri kümesini kullanacaksınız. Veri seti, bir sürücünün evi ile işyeri arasında yaptığı yolculuk hakkında bilgi topluyor. Veri kümesinde aşağıdakiler dahil on dört değişken vardır:

  • DayOfWeek: Sürücünün arabasını kullandığı haftanın gününü belirleyin
  • Mesafe: Yolculuğun toplam mesafesi
  • MaxSpeed: Yolculuğun maksimum hızı
  • TotalTime: Yolculuğun dakika cinsinden uzunluğu

Veri setinde yaklaşık 200 gözlem bulunmaktadır ve sürüşler şu tarihler arasında meydana gelmiştir: Monday cumaya.

Her şeyden önce şunları yapmanız gerekir:

  • veri kümesini yükle
  • Verilerin yapısını kontrol edin.

Dplyr'ın kullanışlı özelliklerinden biri de bakış() işlevidir. Bu str()'ya göre bir gelişmedir. Veri kümesinin yapısını görmek ve hangi manipülasyonun gerekli olduğuna karar vermek için bakış() işlevini kullanabiliriz.

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

Çıktı:

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

Yorumlar değişkeninin daha fazla tanıya ihtiyaç duyduğu açıktır. Yorumlar değişkeninin ilk gözlemleri yalnızca eksik değerlerdir.

sum(df$Comments =="")

Kod Açıklama

  • toplam(df$Yorumlar ==””): Gözlemlerin toplamı df'nin sütun yorumlarındaki “” değerine eşittir

Çıktı:

## [1] 181

Seçme()

Select() fiiliyle başlayacağız. Tüm değişkenlere mutlaka ihtiyacımız yok ve yalnızca ilgili bulduğunuz değişkenleri seçmek iyi bir uygulamadır.

Veri setinin neredeyse yüzde 181'ı olan 90 eksik gözlemimiz var. Bunları hariç tutmaya karar verirseniz analize devam edemezsiniz.

Diğer olasılık ise Comment değişkenini select() fiiliyle bırakmaktır.

Select() ile değişkenleri farklı şekillerde seçebiliriz. İlk argümanın veri kümesi olduğunu unutmayın.

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

Comments değişkenini hariç tutmak için üçüncü yolu kullanabilirsiniz.

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

Çıktı:

## [1] 205  14
dim(step_1_df)

Çıktı:

## [1] 205  13

Orijinal veri kümesinde 14 özellik bulunurken step_1_df'de 13 özellik bulunur.

Filtre()

filter() fiili gözlemlerin bir kritere göre tutulmasına yardımcı olur. filter() tıpkı select() gibi çalışır, önce veri çerçevesini ve sonra virgülle ayrılmış bir koşulu geçersiniz:

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

Bir kriter

Her şeyden önce, bir faktör değişkeninin her seviyesindeki gözlem sayısını sayabilirsiniz.

table(step_1_df$GoingTo)

Kod Açıklama

  • table(): Gözlem sayısını seviyeye göre sayın. Not: Yalnızca faktör düzeyi değişkeni kabul edilir
  • table(step_1_df$GoingTo): Nihai hedefe doğru yapılan yolculukların sayısını sayın.

Çıktı:

## 
##  GSK Home 
##  105  100	

İşlev tablosu(), 105 yolculuğun GSK'ya ve 100 yolculuğun da Eve gideceğini gösterir.

Verileri, 105 gözlemli bir veri kümesini ve 100 gözlemli başka bir veri kümesini döndürecek şekilde filtreleyebiliriz.

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

Çıktı:

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

Çıktı:

## [1] 105  14

Çoklu kriter

Bir veri setini birden fazla kritere göre filtreleyebiliriz. Örneğin, varış noktasının Ev olduğu ve Çarşamba günü gerçekleştiği gözlemleri çıkarabilirsiniz.

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

Çıktı:

## [1] 23 14

23 gözlem bu kriterle eşleşti.

Boru Hattı

Bir veri kümesinin oluşturulması aşağıdakiler gibi birçok işlemi gerektirir:

  • ithal
  • birleştirme
  • seçme
  • süzme
  • ve benzeri

Dplyr kütüphanesi, %>% adlı pratik bir operatörle birlikte gelir. boru hattı. Boru hattı özelliği, manipülasyonun temiz, hızlı ve daha az hataya yol açmasını sağlar.

Bu operatör, ara adımları sabit diske kaydetmeden adımları gerçekleştiren bir koddur. Yukarıdaki örneğimize dönerseniz ilgilendiğiniz değişkenleri seçip filtreleyebilirsiniz. Üç adımımız var:

  • 1. Adım: Verileri içe aktarın: GPS verilerini içe aktarın
  • Adım 2: Verileri seçin: GoingTo ve DayOfWeek'i seçin
  • 3. Adım: Verileri filtreleyin: Yalnızca Ana Sayfa ve Çarşamba günlerini döndür

Bunu yapmak için zor yolu kullanabiliriz:

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

Çıktı:

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

Bu, özellikle çok sayıda adımın olduğu bir durumda, birçok işlemi gerçekleştirmenin uygun bir yolu değildir. Ortam, depolanan birçok nesneyle sonuçlanır.

Bunun yerine %>% boru hattı operatörünü kullanalım. Başlangıçta sadece kullanılan veri çerçevesini tanımlamamız gerekiyor ve tüm süreç ondan akacak.

Boru hattının temel sözdizimi

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.

Yukarıda sıralanan adımları izleyerek ilk pipe'ınızı oluşturabilirsiniz.

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

Çıktı:

## [1] TRUE

Pipeline operatörüyle çarpıcı bir veri kümesi oluşturmaya hazırız.

düzenlemek()

içinde önceki derssort() fonksiyonuyla değerleri nasıl sıralayacağınızı öğrenirsiniz. Dplyr kütüphanesinin sıralama işlevi vardır. Boru hattıyla bir cazibe gibi çalışıyor. Arrange() fiili, bir veya daha fazla satırı artan (varsayılan) veya azalan şekilde yeniden sıralayabilir.

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

Mesafeyi varış noktasına göre sıralayabiliriz.

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

Çıktı:

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

ÖZET

Aşağıdaki tabloda eğitim sırasında öğrendiğiniz tüm işlemleri özetlemişsiniz.

Fiil Nesnel Kod açıklama
belirti bir df'nin yapısını kontrol edin
glimpse(df)
str() ile aynı
Seçme() Değişkenleri seç/hariç tut
select(df, A, B ,C)
A, B ve C değişkenlerini seçin
select(df, A:C)
A'dan C'ye tüm değişkenleri seçin
select(df, -C)
C'yi hariç tut
Filtre () Bir veya daha fazla koşulu temel alarak df'yi filtreleyin
filter(df, condition1)
Tek koşul
filter(df, condition1
durum2)
düzenlemek() Veri kümesini bir veya daha fazla değişkenle sıralayın
arrange(A)
A değişkeninin artan türü
arrange(A, B)
A ve B değişkenlerinin artan türü
arrange(desc(A), B)
A değişkeninin azalan türü ve B değişkeninin artan türü
%>% Her adım arasında bir ardışık düzen oluşturun
step 1 %>% step 2 %>% step 3