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

