R ile Yüksek Performanslı Programlama — 4

Onur Boyar
Jan 29 · 3 min read

4. yazımızda veri yapılarının kod performansına olan etkisini göreceğiz.

Daha Basit Veri Yapılari Kullanmak

data.frame R’da en sık kullanılan değişken tiplerindendir. Çok da kullanışlıdır, farklı değişken tiplerini barındırabilir. Fakat data.frame ile çalışmak büyük verilerde performans düşüklüğüne yol açabilir. Bu bölümde 2 farklı alternatiften bahsedeceğim. Birisi matrix kullanımı, diğeri de data.table kullanımı olacak.

Matrix vs Dataframe

Aslında bu karşılaştırma doğru bir karşılaştırma değil. Çünkü bu iki veri tipi tamamen aynı veri tipleri değil. Matrix sadece sayısal değişkenleri barındırırken data frame birden fazla değişken tipini barındırabilir. Bu nedenle biz bu karşılaştırmayı sadece sayısal değerler içeren bir data frame ile matrix arasında yapacağız. Elimizde sadece sayısal değerler varsa ve performans sıkıntısı yaşıyorsak verimizin matrix olup olmadığını kontrol etmemiz gerektiğini, değilse de matrix’e çevirmemiz gerektiğini şimdi bir örnek ile görelim.

data <- rnorm(1E4*1000)
dim(data) <- c(1E4, 1000)
class(data)
[1] "matrix"
system.time(data_rs1 <- rowSums(data))
user system elapsed
0.030 0.003 0.037
data_df <- data.frame(data)
system.time(data_rs2 <- rowSums(data_df))
user system elapsed
0.060 0.005 0.068

‘data’ isimli değişken matrix tipinde bir değişken. rowSums(data) fonksiyonu satırlardaki değerleri topluyor, bunu da data matrixini kullanarak yapıyor. Bu işlem 0.037 saniye sürerken data.frame versiyonu 0.068 saniye sürüyor. Önceki yazımızda vektör boyutunun performans üzerindeki etkisini görmüştük, dilerseniz bu seferde vektörün boyutunu arttırınca performans farkı nasıl etkileniyor siz görün :)

Şimdi data.table hakkında konuşalım.

data.table nedir?

data.table bir R paketidir. Bu paket bize data frame’in gelişmiş versiyonu olan data.table veri tipini verir. data.frame ile yapabileceğimiz her şeyi data.table ile de yapabiliriz. Ve bu işlemlerin hepsi çok daha hızlı gerçekleşir. Veriyi almak, yazdırmak, işlemek data.table veri tipi ve ona özel fonksiyonlarla çok daha hızlı gerçekleşir. Ayrıca veri manipülasyonlarında da oldukça hızlıdır. Derslerimizde sıklıkla kullandığımız ‘dplyr’ paketinden daha yüksek bir performansa sahiptir. Yaklaşık 450 bin satırlık bir veriyi hem read.csv hem de bu fonksiyonun data.table versiyonu olan fread’le alıp performanslarını karşılaştıralım.

system.time(dt <- read.csv(“data.csv”))
user system elapsed
11.46 0.21 11.69
system.time(dt <- fread(“data.csv”))
user system elapsed
0.66 0.00 0.66
dim(dt)
[1] 439541 18

Gördüğünüz gibi fark çok büyük. data.table paketi bu denli bir peformans artışı sağlar.

Şimdi de data.frame ve dplyr paketi ile yaptığımız bir analizi bir de data.table ile yapalım. Kullanılan veri 11 milyon satıra ve 7 sütuna sahip. Bu iki kod bize tamamen aynı sonucu veriyor. Fakat performansları arasında ciddi bir fark var.

system.time(brand <- data %>% group_by(ID, CAT, BRAND) %>% summarise(count = n(),OrtFiyat = mean(PRICE), maxFiyat = max(PRICE), range =((max(PRICE) — min(PRICE)) / min(PRICE))))user  system elapsed
671.11 0.39 671.80
system.time(brand <- data[, .(count = .N, OrtFiyat = mean(PRICE), maxFiyat = max(PRICE), range =((max(PRICE) — min(PRICE)) / min(PRICE)) ), by = list(ID, CAT, BRAND), ])user system elapsed
37.95 0.03 37.98

Aradaki performans farkının kaç kat olduğu ortada. dplyr bize büyük bir esneklik sağlar, syntax’i data.table’a göre daha kolaydır fakat bir kez alıştıktan sonra data.table çok daha kullanışlı gelecektir. Özellikle bu örnekte olduğu gibi büyük verilerde.

Daha fazlası için data.table dökümantasyonuna göz atabilirsiniz.

R ile ilgili daha fazla içerik ve video dersler için R Programlama ile Veri Bilimi isimli Udemy kursumu inceleyebilirsiniz.

Sıradaki yazımız için tıklayın!

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade