data.table Paketiyle Atom Karınca Hızıyla Verilerinizi İşleyin!
R’da SQL kafası yaşamak isteyenler buraya !!!
Gruplama, alt küme, güncelleme ve birleştirme işlemlerini hızlı ve hafızaya uygun bir kodla sonuçlandırarak işlemleri çok etkili bir şekilde otomatik olarak optimize etmeye ne dersiniz?
Herbir işlemi belirli potansiyel olarak dev bir fonksiyonla eşleştirmek zorunda kalmadan akıcı bir şekilde analiz yapmaya ne dersiniz?
Özetle minimum sürede minimum kodla maksimum verimi, çıktıyı almamıza imkan tanıyor, R’ın kıymetli kütüphanesi olan data.table paketi.
Şimdi neden sql kafası dedik?
Yapacağımız kallavi işlemleri, belki de iç içe bir ton kod yazıp ile alacağımız çıktıları data.table paketinin muhteşem 3 bileşeniyle kolay ve hızlı bir şekilde yapabiliyoruz. Temiz kod her zaman tercihimiz:) Temelde bu fonksiyonun çalışma sistemini 3 kısımda toplayabiliriz:
İlk kısımına; gözlemlere (record, kayıt) uygulamak istediğimiz filtreleri, koşulları burada yapıyoruz. (WHERE)
İkinci kısıma; değişken (field) oluşturma, değişken seçim gibi field’larda yaptığımız manipülasyonları burada yapıyoruz. (SELECT)
Üçüncü kısıma; Filtreleme yaptık, ilgili değişkenleri seçtik. Ne kaldı??? aggregate işlemi, toplulaştırma, özetleme. (GROUP BY) ki büyük veride sık sık kullandığımız namı değer aggregate işlemleri 😀 Yeterince lazy olacağımız bu çalışmada tembellik yapmadan işe koyulalım 😛
Bu çalışma için diamonds veri setini kullancağız; elmaslarla ilgili bir veri seti. Hemen bir göz atalım:
#install.packages("data.table") library(data.table) dt <- data.table(diamonds) dt
Görüldüğü üzere baştan ve sondan 5 gözlemi sunuyor. Direkt veri setini çağırsaydık upuzun, gereksiz bir çıktıyla karşılaşacaktık. Değişkenlerden bahsedecek olursak elmasların değerini ifade eden carat değişkeni, kesim şekli, yine değerinin bir ölçütü olan renk değişkeni, fiyatı, derinliği, yüksekliği ve boyu gibi bir takım değişkenleri içeriyor.
1) Gözlemlerde manipülasyon: filtreleme işlemleri
Kesim kalitesi (cut değişkeni) good olan gözlemleri filtreleyelim:
dt[cut == "Good"]
Şimdi de kesim kalitesi Premium ve Fair olan elmasların D rengine sahip olanlarını getirelim:
dt[cut %in% c("Premium", "Fair") & color == "D"]
2) Değişkenlerde Manipülasyon
Elmas fiyatlarının ilk 10 gözlemini görelim:
dt[1:10, price]
Eğer birden fazla değişken çağırmak istiyorsak iki yol kullanabiliriz. Birinci yol değişken adlarını .() içerisinde ifade edebiliriz, data.table fonksiyonunun özel kullanım şekli:
dt[, .(carat, cut, price)]
İkinci yol olarak R’da alışık olduğumuz şekliyle; list fonksiyonunun içerisine bu değişkenleri koyalım bakalım ne olacak?
dt[, list(carat, cut, price)]
Sonuç değişmedi. İfade ettiğim üzere farkı birinin data.table paketine özgün olması, diğeri R’daki base hali. Şimdi elmas fiyatlarının ortalamasına ve sapmasına bakalım:
dt[, .(fiyat_ort = mean(price), fiyat_sd = sd(price))]
2.1) Değişken Oluşturma
Veri setinin içerisindeki iki değişkeni kullanarak yeni bir değişken oluşturalım, bu işlemi “:=” ile yapıyoruz:
dt[, price_br := price/carat] dt
Birden fazla değişken oluşturalım. Carat değişkenini 100’e bölerek, price değişkenininde logaritmasını alarak yeni bir değişken oluşturalım:
dt[ , ':=' (carat_perc = carat/100, price_log = log(price))] dt[, .(carat_perc, price_log)]
2.2) Değişken Silme
Şimdi bu oluşturmak için oluşturduğumuz değişkenleri silelim:)
dt[, price_log:= NULL] #birden fazla değişken silmek istersek dt[, c(carat_perc, price_log) := NULL]
3) Gruplandırma
Şimdi kesim kalitesi kırılımında ortalama elmas fiyatlarına bakalım:
dt[, .(ort_price = mean(price)), by = cut]
Peki elmasların farklı kesim kalitelerinden veride ne kadar olduğu bilgisine erişelim:
dt[, .N, by = cut]
.SD subset data anlamına gelen veriden alt küme seçme işlemini yaparak veriyi kümeler. Bizim verimizde faktör değişkenler olduğundan dolayı SD’yi tanımlamız gerekiyor. Elmasların renkleri kırılımında verideki sürekli değişkenlerin toplamını alalım:
dt[, lapply(.SD, sum), by = color, .SDcols = c("carat", "price")]
Data.table paketiyle sınırsız birçok işlemi hızlı bir şekilde gerçekleştirebiliriz. Kod dizimi alışık olmadığımız bir yapıda olsada öz kullanımıyla gözleri boyamaya devam ediyor:P