Data.table vs bingkai data di r: tiga perbedaan utama


Dalam bahasa pemrograman R, data.frame adalah bagian dari database R.

Data.frame apa pun dapat dikonversi ke data.table menggunakan fungsi setDF dari paket data.table .

Data.table menawarkan keuntungan berikut dibandingkan data.frame di R:

1. Anda dapat menggunakan fungsi fread dari paket data.table untuk membaca file ke dalam data.table jauh lebih cepat daripada fungsi dasar R seperti read.csv , yang membaca file ke dalam data.frame.

2. Anda dapat melakukan operasi (seperti pengelompokan dan agregasi) pada data.tabel jauh lebih cepat daripada data.frame.

3. Saat mencetak data.frame ke konsol, R akan mencoba mencetak setiap baris di data.frame. Namun, data.table hanya akan menampilkan 100 baris pertama, yang dapat mencegah sesi Anda terhenti atau terhenti jika Anda bekerja dengan kumpulan data yang besar.

Contoh berikut menggambarkan perbedaan antara data.frames dan data.tables dalam praktiknya.

Perbedaan #1: Impor lebih cepat dengan fread

Kode berikut menunjukkan cara mengimpor bingkai data 10.000 baris dan 100 kolom menggunakan fungsi fread dari paket data.table dan fungsi read.csv dari database R:

 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

Dari hasilnya, kita dapat melihat bahwa fread 10 kali lebih cepat untuk mengimpor file CSV ini dibandingkan dengan fungsi read.csv .

Perhatikan bahwa perbedaan ini akan lebih besar untuk kumpulan data yang lebih besar.

Perbedaan #2: Manipulasi data lebih cepat dengan data.table

Secara umum, data.table juga dapat melakukan tugas manipulasi data apa pun lebih cepat daripada data.frame .

Misalnya, kode berikut menunjukkan cara menghitung rata-rata suatu variabel, yang dikelompokkan berdasarkan variabel lain di data.table dan data.frame:

 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

Dari hasilnya, kita dapat melihat bahwa data.table tiga kali lebih cepat dibandingkan data.frame .

Untuk kumpulan data yang lebih besar, perbedaan ini akan semakin besar.

Perbedaan #3: Lebih sedikit baris yang dicetak dengan data.table

Saat mencetak data.frame ke konsol, R akan mencoba mencetak setiap baris di data.frame.

Namun, data.table hanya akan menampilkan 100 baris pertama, yang dapat mencegah sesi Anda terhenti atau terhenti jika Anda bekerja dengan kumpulan data yang besar.

Misalnya, dalam kode berikut, kita membuat bingkai data dan tabel data sebanyak 200 baris.

Saat mencetak data.frame, R akan mencoba mencetak setiap baris sementara mencetak data.tabel hanya akan menampilkan lima baris pertama dan lima baris terakhir:

 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

Ini adalah keuntungan yang ditawarkan data.table dibandingkan data.frame , terutama saat bekerja dengan kumpulan data besar yang tidak ingin Anda cetak ke konsol secara tidak sengaja.

Sumber daya tambahan

Tutorial berikut menjelaskan cara melakukan tugas umum lainnya di R:

Bagaimana cara menambahkan baris ke bingkai data di R
Bagaimana cara mempertahankan kolom tertentu di R
Cara memilih hanya kolom numerik di R

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *