"تم إنشاء خمسة إكسابايت من المعلومات من قبل الإنسانية من لحظة ميلاد الحضارة حتى عام 2003 ، ولكن يتم الآن إنشاء نفس الكمية كل يومين". إريك شميدتDatatable هي مكتبة Python لأداء معالجة بيانات متعددة الخيوط بكفاءة. تدعم Datatable مجموعات البيانات التي لا تناسب الذاكرة.
إذا كتبت بـ R ، فأنت ربما تستخدم بالفعل حزمة 
data.table . 
Data.table هو امتداد 
لحزمة data.frame R. بالإضافة إلى ذلك ، لا يمكن لأولئك الذين يستخدمون R لتجميع مجموعات البيانات الكبيرة بسرعة الاستغناء عن هذه الحزمة (نحن نتحدث ، على وجه الخصوص ، عن 100 غيغابايت من البيانات في RAM).
الحزمة 
data.table لـ R مرنة وقوية للغاية. استخدامه سهل ومريح ، تتم كتابة البرامج التي يتم استخدامه بسرعة كبيرة. هذه الحزمة معروفة على نطاق واسع بين المبرمجين R. يتم تنزيله أكثر من 400 ألف مرة في الشهر ، ويتم استخدامه في حوالي 650 حزمة CRAN و Bioconductor ( 
المصدر ).
ما هو استخدام استخراج البيانات لبيثون؟ الشيء هو أن هناك بيثون حزمة البيانات التي هي 
data.table من العالم R. تركز حزمة البيانات بوضوح على معالجة مجموعات البيانات الكبيرة. يتميز بالأداء العالي - عند العمل مع البيانات الموضوعة بالكامل في ذاكرة الوصول العشوائي ، وعند العمل مع البيانات التي يتجاوز حجمها مقدار ذاكرة الوصول العشوائي المتاحة. وهو يدعم معالجة البيانات متعددة الخيوط. بشكل عام ، يمكن 
تسمية الحزمة 
datatable بالأخ الأصغر 
للبيانات .
DataTable و
تحتاج أنظمة التعلم الآلي الحديثة إلى معالجة كميات هائلة من البيانات وإنشاء العديد من الميزات. هذا ضروري لبناء نماذج دقيقة قدر الإمكان. تم إنشاء وحدة بيثون 
datatable لحل هذه المشكلة. هذه مجموعة من الأدوات لتنفيذ العمليات مع وحدات تخزين كبيرة (تصل إلى 100 جيجابايت) على جهاز كمبيوتر واحد بأقصى سرعة ممكنة. الراعي لتطوير 
datatable هو 
H2O.ai ، وأول مستخدم للحزمة هو 
Driverless.ai .
مجموعة الأدوات هذه تشبه إلى حد بعيد 
الباندا ، لكنها تركز بشكل أكبر على توفير معالجة بيانات عالية السرعة ودعم مجموعات البيانات الكبيرة. بالإضافة إلى ذلك ، يسعى مطورو الحزمة 
datatable لجعلها ملائمة للمستخدمين للعمل معها. إنه ، على وجه الخصوص ، واجهة برمجة تطبيقات قوية ورسائل خطأ مدروسة جيدًا. في هذه المقالة ، سنتحدث عن كيفية استخدام 
datatable ، وكيف يبدو مقارنةً 
pandas عند معالجة مجموعات البيانات الكبيرة.
تركيب
على نظام التشغيل MacOS ، يمكن تثبيت 
datatable بسهولة باستخدام 
pip :
 pip install datatable 
على نظام Linux ، يتم التثبيت من خلال توزيعات ثنائية:
 
حاليًا ، لا يعمل 
datatable تحت Windows ، ولكن العمل جارٍ في هذا الاتجاه ، لذلك دعم Windows هو مجرد مسألة وقت.
يمكن العثور على التفاصيل حول تثبيت 
datatable هنا .
يمكن العثور على الكود الذي سيتم استخدامه في هذه المقالة في مستودع جيثب 
هذا أو 
هنا في mybinder.org.
قراءة البيانات
تم الحصول على مجموعة البيانات التي سنختبرها هنا من Kaggle ( 
مجموعة بيانات قرض نادي الإقراض ). تتكون هذه المجموعة من بيانات كاملة عن جميع القروض الصادرة في 2007-2015 ، بما في ذلك الوضع الحالي للقرض (الحالي ، المتأخر ، المدفوع بالكامل ، وما إلى ذلك) وأحدث معلومات الدفع. يتكون الملف من 2.26 مليون صف و 145 عمود. يعد حجم مجموعة البيانات هذه مثاليًا لإظهار قدرات مكتبة البيانات.
 
دعنا تحميل البيانات في كائن 
Frame . الوحدة الأساسية للتحليل في 
datatable هي 
Frame . هذا هو نفس 
DataFrame من جدول 
pandas أو SQL. وهي نتحدث عن البيانات المنظمة كصفيف ثنائي الأبعاد يمكن فيه تمييز الصفوف والأعمدة.
loading تحميل البيانات باستخدام datatable
 %%time datatable_df = dt.fread("data.csv") ____________________________________________________________________ CPU times: user 30 s, sys: 3.39 s, total: 33.4 s           Wall time: 23.6 s 
وظيفة 
fread() أعلاه هي آلية قوية وسريعة للغاية. يمكنه تلقائيًا اكتشاف ومعالجة الغالبية العظمى من الملفات النصية وتنزيل البيانات من أرشيفات ZIP وملفات Excel واسترداد البيانات بواسطة عنوان URL وغير ذلك الكثير.
بالإضافة إلى ذلك ، يحتوي المحلل اللغوي 
datatable على الميزات التالية:
- يمكن أن يكشف تلقائيًا عن المحددات والعناوين وأنواع الأعمدة وقواعد الهروب من الأحرف وما إلى ذلك.
- يمكنه قراءة البيانات من مصادر مختلفة. من بينها نظام الملفات ، URL ، shell command ، النص الخام ، المحفوظات.
- إنه قادر على أداء قراءة بيانات متعددة مؤشرات الترابط لتحقيق أقصى أداء.
- يعرض مؤشر التقدم عند قراءة الملفات الكبيرة.
- يمكنه قراءة الملفات المتوافقة وغير المتوافقة مع RFC4180 .
data تحميل البيانات باستخدام الباندا
الآن دعونا نرى كم من الوقت يحتاج 
pandas لقراءة نفس الملف.
 %%time pandas_df= pd.read_csv("data.csv") ___________________________________________________________ CPU times: user 47.5 s, sys: 12.1 s, total: 59.6 s Wall time: 1min 4s 
يمكنك أن ترى أن 
datatable أسرع بوضوح من 
pandas عند قراءة مجموعات البيانات الكبيرة. تستغرق 
Pandas في تجربتنا أكثر من دقيقة ، ويتم قياس الوقت الذي يتطلبه 
datatable بالثواني.
تحويل كائن الإطار
يمكن تحويل كائن 
Frame حزمة 
datatable موجود إلى كائن 
numpy أو 
DataFrame . يتم ذلك مثل هذا:
 numpy_df = datatable_df.to_numpy() pandas_df = datatable_df.to_pandas() 
دعنا نحاول تحويل 
Frame موجود حاليًا إلى 
datatable pandas DataFrame ومعرفة المدة التي يستغرقها.
 %%time datatable_pandas = datatable_df.to_pandas() ___________________________________________________________________ CPU times: user 17.1 s, sys: 4 s, total: 21.1 s Wall time: 21.4 s 
يبدو أن قراءة ملف في 
Frame datatable ثم تحويل هذا إلى كائن 
DataFrame pandas يستغرق وقتًا أقل من تحميل البيانات إلى 
DataFrame باستخدام 
pandas . لذلك ، ربما ، إذا كنت تخطط لمعالجة كميات كبيرة من البيانات باستخدام 
pandas ، فمن الأفضل تحميلها باستخدام 
datatable ، ثم تحويلها إلى 
DataFrame .
 type(datatable_pandas) ___________________________________________________________________ pandas.core.frame.DataFrame 
الخصائص الأساسية للكائن الإطار
النظر في الخصائص الأساسية لكائن 
Frame من 
datatable . أنها تشبه إلى حد بعيد الخصائص المماثلة لكائن 
DataFrame من 
pandas :
 print(datatable_df.shape)        
هنا يمكننا استخدام طريقة 
head() ، والتي تعرض الأسطر الأولى 
n :
 datatable_df.head(10) 
أول 10 صفوف من كائن إطار من datatableتشير ألوان الرأس إلى نوع البيانات. يشير اللون الأحمر إلى الخطوط ، بينما يشير اللون الأخضر إلى الأعداد الصحيحة ، بينما يشير اللون الأزرق إلى أرقام الفاصلة العائمة.
ملخص الاحصائيات
حساب إحصائيات الملخص في 
pandas هو عملية تتطلب الكثير من الذاكرة لإكمالها. في حالة 
datatable هذا ليس كذلك. فيما يلي الأوامر التي يمكنك استخدامها لحساب المقاييس المختلفة في 
datatable :
 datatable_df.sum()      datatable_df.nunique() datatable_df.sd()       datatable_df.max() datatable_df.mode()     datatable_df.min() datatable_df.nmodal()   datatable_df.mean() 
نقوم بحساب متوسط القيمة على الأعمدة باستخدام 
datatable و 
datatable وتحليل الوقت اللازم لإكمال هذه العملية.
average إيجاد المتوسط باستخدام datatable
 %%time datatable_df.mean() _______________________________________________________________ CPU times: user 5.11 s, sys: 51.8 ms, total: 5.16 s Wall time: 1.43 s 
average العثور على المتوسط باستخدام الباندا
 pandas_df.mean() __________________________________________________________________ Throws memory error. 
كما ترون ، في 
pandas لم نتمكن من الحصول على النتيجة - تم إصدار خطأ يتعلق بالذاكرة.
معالجة البيانات
Frame و 
DataFrame هي هياكل البيانات التي هي الجداول. في 
datatable ، يتم استخدام الأقواس المربعة لمعالجة البيانات. هذا مشابه لكيفية عملها مع المصفوفات التقليدية ، ولكن هنا ، عند استخدام الأقواس المربعة ، يمكنك استخدام ميزات إضافية.
العمل مع البيانات datatable باستخدام الأقواس المربعةفي الرياضيات ، عند العمل مع المصفوفات ، تُستخدم أيضًا إنشاءات النموذج 
DT[i, j] . يمكن العثور على هياكل مماثلة في C ، C ++ و R ، في 
pandas والحزم 
numpy ، وكذلك في العديد من التقنيات الأخرى. النظر في إجراء معالجة البيانات المشتركة في 
datatable .
Row تشكيل عينات الصف أو العمود
تحدد التعليمة البرمجية التالية جميع الصفوف من عمود 
funded_amnt :
 datatable_df[:,'funded_amnt'] 
حدد كل الصفوف من العمود الممولإليك كيفية تحديد أول 5 صفوف و 3 أعمدة:
 datatable_df[:5,:3] 
اختيار أول 5 صفوف و 3 أعمدةort فرز البيانات باستخدام datatable
فرز البيانات التي تم تعيينها حسب العمود المحدد:
 %%time datatable_df.sort('funded_amnt_inv') _________________________________________________________________ CPU times: user 534 ms, sys: 67.9 ms, total: 602 ms Wall time: 179 ms 
ort فرز البيانات باستخدام الباندا
 %%time pandas_df.sort_values(by = 'funded_amnt_inv') ___________________________________________________________________ CPU times: user 8.76 s, sys: 2.87 s, total: 11.6 s Wall time: 12.4 s 
لاحظ الفارق الكبير في الوقت اللازم لفرز البيانات و 
pandas .
el حذف الصفوف والأعمدة
إليك كيفية إزالة عمود باسم 
member_id :
 del datatable_df[:, 'member_id'] 
مجموعة
يدعم Datatable ، مثل 
pandas ، قدرات تجميع البيانات. دعونا نلقي نظرة على كيفية الحصول على متوسط العمود 
funded_amound ، البيانات التي يتم تجميعها حسب عمود 
grade .
data تجميع البيانات باستخدام datatable
 %%time for i in range(100):   datatable_df[:, dt.sum(dt.f.funded_amnt), dt.by(dt.f.grade)] ____________________________________________________________________ CPU times: user 6.41 s, sys: 1.34 s, total: 7.76 s Wall time: 2.42 s 
هنا يمكنك أن ترى استخدام بناء. هذا هو ما يسمى وكيل الإطار - آلية بسيطة تسمح لك بالإشارة إلى كائن 
Frame الذي يتم تنفيذ بعض الإجراءات عليه حاليًا. في حالتنا ، 
dt.f هو نفسه 
datatable_df .
data تجميع البيانات باستخدام الباندا
 %%time for i in range(100):   pandas_df.groupby("grade")["funded_amnt"].sum() ____________________________________________________________________ CPU times: user 12.9 s, sys: 859 ms, total: 13.7 s Wall time: 13.9 s 
تصفية الخط
يشبه بناء جملة التصفية بناء جملة التجميع. 
loan_amnt سطور 
loan_amnt التي تكون 
loan_amnt أكبر من 
funded_amnt .
 datatable_df[dt.f.loan_amnt>dt.f.funded_amnt,"loan_amnt"] 
حفظ كائن الإطار
يمكن كتابة محتويات كائن 
Frame إلى ملف CSV ، والذي يسمح باستخدام البيانات في المستقبل. يتم ذلك مثل هذا:
 datatable_df.to_csv('output.csv') 
يمكنك أن تقرأ عن طرق البيانات الأخرى للعمل مع البيانات 
هنا .
النتائج
وحدة بيثون 
datatable هي بالتأكيد أسرع من 
pandas المعتادة. إنه أيضًا نعمة لأولئك الذين يحتاجون إلى معالجة مجموعات بيانات كبيرة جدًا. حتى الآن ، ناقص 
datatable فقط بالمقارنة مع 
pandas هو مقدار الوظيفة. ومع ذلك ، يجري العمل النشط على 
datatable ، لذلك فمن الممكن تمامًا أن يتجاوز 
datatable pandas في جميع الاتجاهات.
أعزائي القراء! هل تخطط لاستخدام الحزمة 
datatable في مشاريعك؟

