Data.table مقابل إطار البيانات في r: ثلاثة اختلافات رئيسية
في لغة برمجة R، يعد data.frame جزءًا من قاعدة بيانات R.
يمكن تحويل أي data.frame إلى data.table باستخدام الدالة setDF الخاصة بحزمة data.table .
يوفر data.table المزايا التالية مقارنة بإطار data.frame في R:
1. يمكنك استخدام الدالة fread من الحزمة data.table لقراءة ملف في data.table بشكل أسرع بكثير من وظائف R الأساسية مثل read.csv ، التي تقرأ الملفات في data.frame.
2. يمكنك تنفيذ العمليات (مثل التجميع والتجميع) على data.table بشكل أسرع بكثير من data.frame.
3. عند طباعة data.frame إلى وحدة التحكم، سيحاول R طباعة كل صف في data.frame. ومع ذلك، فإن data.table سيعرض فقط أول 100 صف، مما قد يمنع جلستك من التعليق أو التعطل إذا كنت تعمل مع مجموعة بيانات كبيرة.
توضح الأمثلة التالية هذه الاختلافات بين data.frames وdata.tables في الممارسة العملية.
الفرق رقم 1: استيراد أسرع مع الخبز
يوضح التعليمة البرمجية التالية كيفية استيراد إطار بيانات مكون من 10000 صف و100 عمود باستخدام الدالة fread من الحزمة data.table والدالة read.csv من قاعدة بيانات 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
من النتائج، يمكننا أن نرى أن fread أسرع بحوالي 10 مرات لاستيراد ملف CSV هذا مقارنة بوظيفة read.csv .
لاحظ أن هذا الاختلاف سيكون أكبر بالنسبة لمجموعات البيانات الأكبر.
الفرق رقم 2: معالجة أسرع للبيانات باستخدام data.table
بشكل عام، يمكن لـ data.table أيضًا تنفيذ أي مهمة لمعالجة البيانات بشكل أسرع بكثير من data.frame .
على سبيل المثال، يوضح التعليمة البرمجية التالية كيفية حساب متوسط متغير، مجمعة بواسطة متغير آخر في كل من data.table و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
من النتائج، يمكننا أن نرى أن data.table أسرع بحوالي ثلاث مرات من data.frame .
وبالنسبة لمجموعات البيانات الأكبر حجما، سيكون هذا الاختلاف أكبر.
الفرق رقم 3: عدد أقل من الصفوف المطبوعة باستخدام data.table
عند طباعة data.frame إلى وحدة التحكم، سيحاول R طباعة كل صف في data.frame.
ومع ذلك، فإن data.table سيعرض فقط أول 100 صف، مما قد يمنع جلستك من التعليق أو التعطل إذا كنت تعمل مع مجموعة بيانات كبيرة.
على سبيل المثال، في التعليمة البرمجية التالية، نقوم بإنشاء إطار بيانات وجدول بيانات مكون من 200 صف.
عند طباعة data.frame، سيحاول R طباعة كل صف أثناء طباعة data.table سيعرض فقط الصفوف الخمسة الأولى والصفوف الخمسة الأخيرة:
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
هذه هي الميزة التي يقدمها data.table عبر data.frame ، خاصة عند العمل مع مجموعات البيانات الكبيرة التي لا تريد طباعتها عن طريق الخطأ إلى وحدة التحكم.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية تنفيذ المهام الشائعة الأخرى في R:
كيفية إضافة صفوف إلى إطار البيانات في R
كيفية الحفاظ على أعمدة معينة في R
كيفية تحديد الأعمدة الرقمية فقط في R