dplyr ile Veri Düzenlemeye Giriş

Tablo formatındaki veriler üzerinde düzenleme yapmak, dönüştürmek ve veri özetlemede kullanılan oldukça kullanışlı bir R paketi, dplyr. Bu paket içinde, gündelik olarak kullanılabilecek satır filtreleme, kolon seçme, satır soralama, yeni kolonlar ekleme gibi çokça fonksiyon bulunuyor.

Benzer işlemler, R’ın split(), subset(), apply() ve aggregate() gibi çekirdek fonksiyonları ile yapılabilse de,  dplyr paketi bunlara çok daha kolay bir alternatif sağlıyor. Diğer tidyverse paketleri ile birlikte sorunsuz çalışabiliyor ve pipe operatörü ile diğer paketlere kolaylıkla bağlanabiliyor.

Önemli fonksiyonlarına aşağıdakş uygulama kısmında yer vereceğiz.

  • select() tablodan kolon seçmek için,
  • filter() satırları filtrelemek için,
  • arrange()re satırların sırasını düzenlemek için
  • mutate() yeni verilerle yeni kolon oluşturmak için
  • summarise() ve group_by() veri özetlemek için kullanılıyor.

Kurulum

install.packages("dplyr")
library(dplyr)

Uygulama

Uygulama çalışmamızda, R ile birlikte gelen iris verisetini kullanacağız.  Bu veriseti 3 farklı bitki türüne ait ölçülen çanak yaprak (sepal) ve taç yaprakların (petal) boyutlarını içerir.

head(iris, 5)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1          3.5         1.4          0.2         setosa
4.9          3.0         1.4          0.2         setosa
4.7          3.2         1.3          0.2         setosa
4.6          3.1         1.5          0.2         setosa
5.0          3.6         1.4          0.2         setosa
select()

Komut, tablo içinde seçtiğiniz başlığa göre kolonları seçebilmenizi ve sıralayabilmenizi sağlar.

# Tek kolon seçebilirsiniz.
 
select(iris, Sepal.Length)
# Ardışık başlıkları ":" kullanarak birlikte seçebilirsiniz.
 
select(iris, Sepal.Length:Petal.Length)
# Kolonların sırasını değiştirebilirsiniz.
 
select(iris, c(Species,Petal.Width,Petal.Length))
# Belli bir karakterle başlayan, biten veya bir karakteri içeren kolonları seçebilirsiniz.
 
select(iris, starts_with("Sepal"))
select(iris, ends_with("Length"))
select(iris, contains("cies"))
filter()

Filtre komutu ile herhangi bir kolondaki değerleri filtreleyebilirsiniz. Bir tane parametre yazacabileceğiniz gibi, çoklu filtre de oluşturabilirsiniz.

# Bir ya da birden fazla kolondaki sayısal ve yazı değerlerini filtrelemek için kullanılır.
 
filter(iris, Sepal.Length>7.5)
filter(iris, Sepal.Length>7.5, Petal.Width<2.1, Species=="setosa")

Benzer şekilde %in% operatörünü kullanarak belli bir kolonda bir veya daha fazla değere sahip satırları filtreleyebiliriz.

# Bir kolonda olmasını istediğiniz birden fazla değer var ise one göre filtre oluşturabilirsiniz.
filter(iris, Species %in% c("setosa","versicolor"))
Pipe Operatörü (%>%)

Bu noktada oldukça kullanışlı bir operatörden bahsetmekte fayda var. R’da iş akışlarını birbirine bağlamak ve daha okunabilir fonskiyonlar oluşturabilmek için pipe operatörü %>% kullanılır. Bu operatör, kendinden önceki fonksiyonun çıktısını, kendinden sonraki fonksiyona aktarır.

Şöyle bir örnek verelim. iris verisetinde Sepal.Length ve Petal.Width kolonları seçip, bu kolonların ilk 10 satırına bakmak istesek normalde şu şekilde yazabiliriz.

head(select(iris,  Sepal.LengthPetal.Width))

Aynı fonksiyonu pipe operatörü ile yazarsak aşağıdaki kodu kullanırız.

iris %>% select(Petal.Length, Species) %>% head()

Yukarıdaki örnekte, pipe operatörü ile ilk baştaki iris veriseti, select() fonksiyonuna aktarıldı. Dikkat ederseniz, select fonksiyonunda artık verinin adını (iris) yazmamıza gerek kalmıyor. Çünkü, bu veriyi operatörden önceki kısımdan alıyor. Select fonksiyonunun çıktısını da tekrar pipe ile head() fonksiyonuna bağlıyoruz. Bu durumda, select() fonksiyonunun çıktısı, head() fonksiyonunun girdisi oluyor. head() içine bir şey yazmamıza gerek kalmıyor. Aşağıdaki örneklerde pipe operatörüne dair daha fazla örnek bulabilirsiniz.

arrange()

Bu fonksiyon, tablodaki bir kolondaki verilere göre büyükten küçüğe (veya tersi) ve alfabetik sıralama yapmamızı sağlar.

# Fonksiyonu pipe olmadan yazmak istersek, önce sıralanacak verisetini sonra da sıralanacak kolon başlığını giriyoruz.

arrange(iris, Petal.Length)

# iris verisetini küçükten büyüğe olacak şekilde sıralayıp, ilk 10 satırını görmek için aşağıdaki fonksiyonu kullanabiliriz.

iris %>% arrange(Petal.Length) %>% head()

# Aynı fonksiyonda büyükten küçüğe sıralamak için ilgili kolonun başına "-" ibaresi ekliyoruz.

iris %>% arrange(-Petal.Length) %>% head()
mutate()

Tüm fonksiyonları arasında belki en çok etkili olanlardan biri mutate(). Bu fonksiyon, data.frame içinde hesaplama yaparak yeni kolonlar oluşturmanızı veya varolanı değiştirmenizi sağlar.

# İki farklı kolonun çarpımını yeni bir kolon olarak ekleyelim.
 
mutate(iris, Sepal.Area = Sepal.Length * Sepal.Width)

# Birden fazla kolon oluşturabilir ve hatta oluşturulan kolonlar üzerinden yeni bir hesaplama da yapabilirsiniz.
 
mutate(iris, Sepal.Area = Sepal.Length * Sepal.Width,
             Petal.Area = Petal.Length * Petal.Width,
             Area.Ratio = Sepal.Area / Petal.Area,
             Yazı       = paste("Sepal Alanı:", Sepal.Area))
summarise()

Tablo içindeki herhangi bir grup veriyi özetlemenizi sağlar. Göreceğiniz gibi, iris verisetinde 3 farklı bitki türüne ait çok sayıda ölçüm var. Bu fonksiyon ile bu bitki türlerini gruplayıp, üçüne ait ortalama gibi genel bir bilgi edinebiliriz.

Fonksiyonu kullanmadan önce group_by() fonksiyonu ile özet istenen kolondaki veriler gruplanır.

Aşağıdaki örnekte önce iris verisetini Species kolonuna göre grupluyoruz. Oluşturulan çıktıyı pipe operatörü %>% ile summarise fonksiyonuna bağlıyoruz. Bu fonksiyon içinde oluşturacağımız kolonun adını ve nasıl hesaplanacağını belirtiyoruz.

group_by(iris, Species) %>% summarise(Mean.Sepal.Length = mean(Sepal.Length))
Species     Mean.Sepal.Length
setosa      5.006
versicolor  5.936
virginica   6.588
Toplu Örnek

Şimdi tüm bu fonksiyonları kullanarak bir uygulama yapalım.

Bu uygulamada,

  1. select() fonksiyonu ile Species kolonunu öne alacağız,
  2. mutate() fonksiyonu ile ortalama yaprak alanlarını hesaplayacağız,
  3. filter() fonksiyonu ile ortalama yaprak alanı 10’dan büyük olanları eleyeceğiz,
  4. group_by() fonksiyonu ile Species kolonuna göre gruplandırma yapacağız,
  5. summarise() fonksiyonu ile ortalama yaprak alanına göre türlerin özet bilgisini alacağız,
  6. ve son olarak arrange() fonksiyonu ile bu özet bilgisini büyükten küçüğe sıralayacağız.
  7. Tüm bu işlemleri de pipe operatörü %>% ile birbirine bağlayacağız.
iris %>% select(Species, Sepal.Length:Petal.Width) %>%
         mutate(Petal.Area = Petal.Length * Petal.Width) %>%
         filter(Petal.Area < 10.0) %>%
         group_by(Species) %>%
         summarise(Mean.Petal.Area = mean(Petal.Area)) %>%
         arrange(-Mean.Petal.Area)
Species     Mean.Petal.Area
virginica   8.90625
versicolor  5.72040
setosa      0.36560

Bu yazıda, genel veri düzenleme işlemlerinizi bir nebze kolaylaştıracak bir paket olan dplyr’dan bahsettik. Gelecek yazılarda paketin daha geniş alanlarda kullanımına değineceğiz.

Moleküler Biyolog ve Genetikçi.İstanbul Teknik Üniversitesi'nde doktora öğrencisi. 5 yıldır biyoinformatik ve yeni nesil dizileme üzerine çalışıyor. Genetik ve biyoinformatik üzerine Variant adlı blogda yazıyor.

Yorum bırakın:

Your email address will not be published.

Site Footer

Sliding Sidebar

Hakkımda

Hakkımda

Moleküler Biyolog ve Genetikçi. İstanbul Teknik Üniversitesi'nde doktora öğrencisi. 5 yıldır biyoinformatik ve yeni nesil dizileme üzerine çalışıyor.

Tweets

Please check your internet connection.