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