Datatable Python Package Overview

"تم إنشاء خمسة إكسابايت من المعلومات من قبل الإنسانية من لحظة ميلاد الحضارة حتى عام 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 ، يتم التثبيت من خلال توزيعات ثنائية:

 #  Python 3.5 pip install https://s3.amazonaws.com/h2o-release/datatable/stable/datatable-0.8.0/datatable-0.8.0-cp35-cp35m-linux_x86_64.whl #  Python 3.6 pip install https://s3.amazonaws.com/h2o-release/datatable/stable/datatable-0.8.0/datatable-0.8.0-cp36-cp36m-linux_x86_64.whl 

حاليًا ، لا يعمل datatable تحت Windows ، ولكن العمل جارٍ في هذا الاتجاه ، لذلك دعم Windows هو مجرد مسألة وقت.

يمكن العثور على التفاصيل حول تثبيت datatable هنا .

يمكن العثور على الكود الذي سيتم استخدامه في هذه المقالة في مستودع جيثب هذا أو هنا في mybinder.org.

قراءة البيانات


تم الحصول على مجموعة البيانات التي سنختبرها هنا من Kaggle ( مجموعة بيانات قرض نادي الإقراض ). تتكون هذه المجموعة من بيانات كاملة عن جميع القروض الصادرة في 2007-2015 ، بما في ذلك الوضع الحالي للقرض (الحالي ، المتأخر ، المدفوع بالكامل ، وما إلى ذلك) وأحدث معلومات الدفع. يتكون الملف من 2.26 مليون صف و 145 عمود. يعد حجم مجموعة البيانات هذه مثاليًا لإظهار قدرات مكتبة البيانات.

 #    import numpy as np import pandas as pd import datatable as dt 

دعنا تحميل البيانات في كائن 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)       # ( ,  ) print(datatable_df.names[:5])   #   5  print(datatable_df.stypes[:5])  #   5  ______________________________________________________________ (2260668, 145) ('id', 'member_id', 'loan_amnt', 'funded_amnt', 'funded_amnt_inv') (stype.bool8, stype.bool8, stype.int32, stype.int32, stype.float64) 

هنا يمكننا استخدام طريقة 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 في مشاريعك؟



Source: https://habr.com/ru/post/ar455507/


All Articles