R'de data.table ve veri çerçevesi: üç temel fark


R programlama dilinde data.frame , R veritabanının bir parçasıdır.

Herhangi bir data.frame, data.table paketinin setDF işlevi kullanılarak data.table’a dönüştürülebilir.

Bir data.table, R’deki bir data.frame’e göre aşağıdaki avantajları sunar:

1. Bir dosyayı data.table’a okumak için data.table paketindeki fread işlevini, dosyaları data.frame’e okuyan read.csv gibi temel R işlevlerinden çok daha hızlı kullanabilirsiniz.

2. Data.table üzerinde işlemleri (gruplama ve toplama gibi) data.frame’den çok daha hızlı gerçekleştirebilirsiniz.

3. Bir konsola bir veri çerçevesi yazdırırken, R, veri çerçevesi içindeki her satırı yazdırmaya çalışacaktır. Ancak bir data.table yalnızca ilk 100 satırı görüntüler; bu, büyük bir veri kümesiyle çalışıyorsanız oturumunuzun askıda kalmasını veya çökmesini engelleyebilir.

Aşağıdaki örnekler, veri.çerçeveleri ve veri.tabloları arasındaki bu farklılıkları pratikte göstermektedir.

Fark #1: Fread ile daha hızlı içe aktarma

Aşağıdaki kod, data.table paketindeki fread işlevini ve R veritabanındaki read.csv işlevini kullanarak 10.000 satır ve 100 sütundan oluşan bir veri çerçevesinin nasıl içe aktarılacağını gösterir:

 library (microbenchmark)
library (data.table)

#make this example reproducible
set. seeds (1)

#create data frame with 10,000 rows and 100 columns
df <- as. data . frame (matrix(runif(10^4 * 100), nrow = 10^4))

#export CSV to current working directory
write.write. csv (df, " test.csv ", quote = FALSE )

#import CSV file using fread and read.csv and time how long it takes
results <- microbenchmark(
  read.csv = read. csv (" test.csv ", header = TRUE , stringsAsFactors = FALSE ),
  fread = fread(" test.csv ", sep = ",", stringsAsFactors = FALSE ),
  times = 10)

#view results
results

Unit: milliseconds
     expr min lq mean median uq max neval cld
 read.csv 817.1867 892.8748 1026.7071 899.5755 926.9120 1964.0540 10 b
    fread 113.5889 116.2735 136.4079 124.3816 136.0534 211.7484 10 a

Sonuçlardan fread’in bu CSV dosyasını içe aktarmanın read.csv işlevine kıyasla yaklaşık 10 kat daha hızlı olduğunu görebiliriz.

Daha büyük veri kümeleri için bu farkın daha da büyük olacağını unutmayın.

Fark #2: data.table ile daha hızlı veri işleme

Genel olarak data.table , herhangi bir veri işleme görevini data.frame’den çok daha hızlı gerçekleştirebilir.

Örneğin, aşağıdaki kod hem data.table hem de data.frame’de başka bir değişkene göre gruplandırılmış bir değişkenin ortalamasının nasıl hesaplanacağını gösterir:

 library (microbenchmark)
library (data.table)

#make this example reproducible
set.seed(1)

#create data frame with 10,000 rows and 100 columns
d_frame <- data. frame (team=rep(c(' A ', ' B '), each=5000),
                      points=c(rnorm(10000, mean=20, sd=3)))

#create data.table from data.frame
d_table <- setDT(d_frame)

#calculate mean of points grouped by team in data.frame and data.table
results <- microbenchmark(
  mean_d_frame = aggregate(d_frame$points, list(d_frame$team), FUN=mean),
  mean_d_table = d_table[ ,list(mean=mean(points)), by=team],
  times = 10)

#view results
results

Unit: milliseconds
         expr min lq mean median uq max neval cld
 mean_d_frame 2.9045 3.0077 3.11683 3.1074 3.1654 3.4824 10 b
 mean_d_table 1.0539 1.1140 1.52002 1.2075 1.2786 3.6084 10 a

Sonuçlardan data.table’ın data.frame’den yaklaşık üç kat daha hızlı olduğunu görebiliriz.

Daha büyük veri kümeleri için bu fark daha da büyük olacaktır.

Fark #3: data.table ile daha az satır yazdırılıyor

Bir data.frame’i bir konsola yazdırırken, R, data.frame’deki her satırı yazdırmaya çalışacaktır.

Ancak bir data.table yalnızca ilk 100 satırı görüntüler; bu, büyük bir veri kümesiyle çalışıyorsanız oturumunuzun askıda kalmasını veya çökmesini engelleyebilir.

Örneğin aşağıdaki kodda hem veri çerçevesi hem de 200 satırlık data.table oluşturuyoruz.

data.frame’i yazdırırken R, data.table’ı yazdırırken her satırı yazdırmaya çalışacak, yalnızca ilk beş satırı ve son beş satırı görüntüleyecektir:

 library (data.table)

#make this example reproducible
set. seeds (1)

#create data frame
d_frame <- data. frame (x=rnorm(200),
                      y=rnorm(200),
                      z=rnorm(200))
#view data frame
d_frame

               X Y Z
1 -0.055303118 1.54858564 -2.065337e-02
2 0.354143920 0.36706204 -3.743962e-01
3 -0.999823809 -1.57842544 4.392027e-01
4 2.586214840 0.17383147 -2.081125e+00
5 -1.917692199 -2.11487401 4.073522e-01
6 0.039614766 2.21644236 1.869164e+00
7 -1.942259548 0.81566443 4.740712e-01
8 -0.424913746 1.01081030 4.996065e-01
9 -1.753210825 -0.98893038 -6.290307e-01
10 0.232382655 -1.25229873 -1.324883e+00
11 0.027278832 0.44209325 -3.221920e-01
...
#create data table
d_table <- setDT(d_frame)

#view data table
d_table

               X Y Z
  1: -0.05530312 1.54858564 -0.02065337
  2: 0.35414392 0.36706204 -0.37439617
  3: -0.99982381 -1.57842544 0.43920275
  4: 2.58621484 0.17383147 -2.08112491
  5: -1.91769220 -2.11487401 0.40735218
 ---                                    
196: -0.06196178 1.08164065 0.58609090
197: 0.34160667 -0.01886703 1.61296255
198: -0.38361957 -0.03890329 0.71377217
199: -0.80719743 -0.89674205 -0.49615702
200: -0.26502679 -0.15887435 -1.73781026

Bu, özellikle yanlışlıkla konsola yazdırmak istemediğiniz büyük veri kümeleriyle çalışırken data.table’ın data.frame’e göre sunduğu bir avantajdır.

Ek kaynaklar

Aşağıdaki eğitimlerde R’de diğer ortak görevlerin nasıl gerçekleştirileceği açıklanmaktadır:

R’de bir veri çerçevesine satırlar nasıl eklenir
R’de belirli sütunlar nasıl korunur?
R’de yalnızca sayısal sütunlar nasıl seçilir

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir