
dplyr Kütüphanesi
İlk yazımızda R’da data (veri) manipülasyonu için dplyr paketini (library) kullanmayı inceleyeceğiz ve kodlarımızda pipeline %>% da kullanmaya başlayacağız.
dplyr 5 ana fiilden oluşmaktadır.
– filter
– select
– mutate
– arrange
– summarise
İlk olarak dplyr paketinin kurulumunu yapalım.
install.packages("dplyr")
Ardından kütüphaneyi aktif hale getirelim.
library(dplyr)
Analizleri yapmak için mtcars datasetini dikkate alalım. mtcars dataseti 1974 yılı Motor Trend US dergisine göre 32 aracın çeşitli kriterlere göre özelliklerini karşılaştırmaktadır. dplyr fiillerini kullanarak yapacağımız data manüpülasyonunda data.frame yapıları yerine tibble kullanılmaktadır. Bunun için tbl_df() fonksiyonu kullanılacaktır.
str fonksiyonu ile datasetinin yapısı ile ilgili daha çok bilgi sahibi
olalım.
df_car <- data.frame(arac=rownames(mtcars), mtcars, stringsAsFactors = FALSE)
str(df_car)
## 'data.frame': 32 obs. of 12 variables:
## $ arac: chr "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
Dataseti data.frame yapısından tibble yapısına çevirelim.
df <- tbl_df(df_car)
str(df)
## Classes 'tbl_df', 'tbl' and 'data.frame': 32 obs. of 12 variables:
## $ arac: chr "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
filter
filter fiili ile dataset içerisindeki belirli kriterlere göre filtreleme yapılır. Örneğin silindir sayısı (cyl) 6 olanları ve karbüratör sayısı (carb) 4 olanları listeleyelim.
df %>% filter(cyl == 6, carb == 4)
## # A tibble: 4 x 12
## arac mpg cyl disp hp drat wt qsec vs am gear carb
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Mazda~ 21.0 6.00 160 110 3.90 2.62 16.5 0 1.00 4.00 4.00
## 2 Mazda~ 21.0 6.00 160 110 3.90 2.88 17.0 0 1.00 4.00 4.00
## 3 Merc ~ 19.2 6.00 168 123 3.92 3.44 18.3 1.00 0 4.00 4.00
## 4 Merc ~ 17.8 6.00 168 123 3.92 3.44 18.9 1.00 0 4.00 4.00
select
select fiili ile dataset içerisinden belirli sütunlar seçilir. Örneğin az önce filtrelediğimiz dataset içerisinden mpg, vs ve gear sütunlarını alalım.
df %>% filter(cyl == 6, carb == 4) %>% select(arac,mpg,vs,gear)
## # A tibble: 4 x 4
## arac mpg vs gear
## <chr> <dbl> <dbl> <dbl>
## 1 Mazda RX4 21.0 0 4.00
## 2 Mazda RX4 Wag 21.0 0 4.00
## 3 Merc 280 19.2 1.00 4.00
## 4 Merc 280C 17.8 1.00 4.00
mutate
mutate fiili ile datasete yeni bir sütun ekleyebiliriz. Örneğin araçların 100 mil bir yolu ortalama bir yakıt fiyatı ile ne kadara gideceklerini bulalım. Bir galon ortalama 3.785 litredir ve bir litre yakıt şuan 5TL civarındadır.
df %>%
mutate(tuketim = 3.785*5*(100/mpg) ) %>%
select(arac,mpg,tuketim)
## # A tibble: 32 x 3
## arac mpg tuketim
## <chr> <dbl> <dbl>
## 1 Mazda RX4 21.0 90.1
## 2 Mazda RX4 Wag 21.0 90.1
## 3 Datsun 710 22.8 83.0
## 4 Hornet 4 Drive 21.4 88.4
## 5 Hornet Sportabout 18.7 101
## 6 Valiant 18.1 105
## 7 Duster 360 14.3 132
## 8 Merc 240D 24.4 77.6
## 9 Merc 230 22.8 83.0
## 10 Merc 280 19.2 98.6
## # ... with 22 more rows
arrange
arrange fonksiyonu ile belirli sütunlara göre data büyükten küçüğe veya küçükten büyüğe sıralanır.
df %>%
mutate(tuketim = 3.785*5*(100/mpg) ) %>%
select(arac,mpg,tuketim) %>%
arrange(tuketim)
## # A tibble: 32 x 3
## arac mpg tuketim
## <chr> <dbl> <dbl>
## 1 Toyota Corolla 33.9 55.8
## 2 Fiat 128 32.4 58.4
## 3 Honda Civic 30.4 62.3
## 4 Lotus Europa 30.4 62.3
## 5 Fiat X1-9 27.3 69.3
## 6 Porsche 914-2 26.0 72.8
## 7 Merc 240D 24.4 77.6
## 8 Datsun 710 22.8 83.0
## 9 Merc 230 22.8 83.0
## 10 Toyota Corona 21.5 88.0
## # ... with 22 more rows
Önce mpg (miles per gallon) sütununa göre küçükten büyüğe, ardından da disp sütununa göre büyükten küçüğe sıralayalım.
df %>% arrange(mpg,desc(disp))
## # A tibble: 32 x 12
## arac mpg cyl disp hp drat wt qsec vs am gear carb
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Cadi~ 10.4 8.00 472 205 2.93 5.25 18.0 0 0 3.00 4.00
## 2 Linc~ 10.4 8.00 460 215 3.00 5.42 17.8 0 0 3.00 4.00
## 3 Cama~ 13.3 8.00 350 245 3.73 3.84 15.4 0 0 3.00 4.00
## 4 Dust~ 14.3 8.00 360 245 3.21 3.57 15.8 0 0 3.00 4.00
## 5 Chry~ 14.7 8.00 440 230 3.23 5.34 17.4 0 0 3.00 4.00
## 6 Mase~ 15.0 8.00 301 335 3.54 3.57 14.6 0 1.00 5.00 8.00
## 7 AMC ~ 15.2 8.00 304 150 3.15 3.44 17.3 0 0 3.00 2.00
## 8 Merc~ 15.2 8.00 276 180 3.07 3.78 18.0 0 0 3.00 3.00
## 9 Dodg~ 15.5 8.00 318 150 2.76 3.52 16.9 0 0 3.00 2.00
## 10 Ford~ 15.8 8.00 351 264 4.22 3.17 14.5 0 1.00 5.00 4.00
## # ... with 22 more rows
summarise
summarise fiili, dataset içerisinden özet raporlar oluşturmamızı sağlayacaktır. Bu fiil sıklıkla group_by() fonksiyonu ile beraber kullanılmaktadır. Örneğin her silindir sayısında kaç adet araç olduğunu raporlayalım. Bunun için öncelikle cyl sütununa göre araçları gruplayıp ardından n() fonksiyonu ile her grupta kaç adet araç olduğunu bulacağız.
df %>% group_by(cyl) %>% summarise(n=n())
## # A tibble: 3 x 2
## cyl n
## <dbl> <int>
## 1 4.00 11
## 2 6.00 7
## 3 8.00 14
Bir sonraki örneğimizde araçları hem silindir (cyl) hem de şansıman (am) özelliklerine göre sınıflandıralım.
df %>% group_by(cyl,am) %>% summarise(n=n())
## # A tibble: 6 x 3
## # Groups: cyl [?]
## cyl am n
## <dbl> <dbl> <int>
## 1 4.00 0 3
## 2 4.00 1.00 8
## 3 6.00 0 4
## 4 6.00 1.00 3
## 5 8.00 0 12
## 6 8.00 1.00 2