dplyr ile Data Manipülasyonuna Giriş

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