
هذه مكتبة تحليلية C ++ مصممة لتحليل البيانات مماثلة للمكتبات في Python و R.
يمكنك تقطيع البيانات بعدة طرق مختلفة. يمكنك الانضمام ، والاندماج ، مجموعة تلو الأخرى. يمكنك تشغيل خوارزميات إحصائية وتلخيص ومالية و ML المختلفة على البيانات. يمكنك إضافة خوارزمياتك المخصصة بسهولة. يمكنك فرز متعدد العمود ، واختيار المخصص وحذف البيانات. وأكثر ...
تتضمن DataFrame أيضًا مجموعة كبيرة من الخوارزميات التحليلية في شكل من الزوار. هذه هي من الإحصائيات الأساسية مثل المتوسط ، الانحراف الأمراض المنقولة جنسياً ، العودة ، ... إلى تحليل أكثر مشاركة مثل انتشار التقارب ، ملاءمة متعدد الحدود ، تحويل فورييه السريع للطول التعسفي ... بما في ذلك مجموعة جيدة من مؤشرات التداول. يمكنك أيضًا إضافة الخوارزميات الخاصة بك بسهولة.
توظف DataFrame أيضًا Multiredreading في جميع API تقريبًا ، لمجموعات البيانات الكبيرة. هذا يجعل DataFrame مناسبًا بشكل خاص لتحليل مجموعات البيانات الكبيرة.
لكي تبدأ العمليات الأساسية ، انظر Hello World. للحصول على قائمة كاملة بالميزات مع عينات رمز ، راجع الوثائق.
لقد اتبعت بعض المبادئ في هذه المكتبة :
ربما تكون قد سمعت عن Polars DataFrame. يتم تنفيذها في الصدأ وتنقلها مع رأس صفر إلى بيثون (طالما لم يكن لديك حلقة). لقد طلب مني العديد من الأشخاص كتابة مقارنة لـ DataFrame مقابل Polars . لذلك ، وجدت أخيرًا بعض الوقت لأتعلم قليلاً عن Polars وكتابة معيار بسيط للغاية.
كتبت البرامج المتطابقة التالية لكل من Polars و C ++ DataFrame (و Pandas). لقد استخدمت إصدار Polars: 0.19.14 (الإصدار الباندا: 1.5.3 ، الإصدار Numpy: 1.24.2). واستخدمت برنامج التحويل البرمجي C ++ 20 Clang مع خيار -o3. ركضت على كل من بلدي ، عفا عليها الزمن إلى حد ما ، MacBook Pro (Intel Chip ، 96GB RAM).
في كلتا الحالتين ، قمت بإنشاء نظام بيانات مع 3 أعمدة عشوائية. تتطلب DataFrame C ++ أيضًا عمود فهرس إضافي من نفس الحجم. Polars لا يؤمن بأعمدة الفهرس (التي لها إيجابيات وسلبيات خاصة بها ، أنا لا أتجاوزها هنا). كل برنامج لديه ثلاثة أجزاء متطابقة. أولاً ، يقوم بإنشاء 3 أعمدة مع أرقام عشوائية 300 متر لكل منها (في حالة DataFrame C ++ ، يجب أن ينشئ أيضًا عمود فهرس متسلسل من نفس الحجم). هذا هو الجزء الذي لست مهتمًا به. في الجزء الثاني ، يحسب متوسط العمود الأول ، وتباين العمود الثاني ، وترابط بيرسون للعمود الثاني والثالث. في الجزء الثالث ، يقوم باختيار (أو تصفية كما يدعوها Polars) على أحد الأعمدة.
نتائج :
كان الحد الأقصى لمجموعة البيانات التي يمكنني تحميلها في Polars 300 مليون صف لكل عمود. أي مجموعة بيانات أكبر فجرت الذاكرة وتسبب في قتلها. قمت بتشغيل C ++ DataFrame مع صفوف 10B لكل عمود وأنا متأكد من أنه كان سيتم تشغيله مع مجموعات بيانات أكبر أيضًا. لذلك ، أُجبرت على الجري على حد سواء مع صفوف 300 متر للمقارنة. ركضت كل اختبار 4 مرات واستغرقت أفضل وقت. تباينت أرقام Polars كثيرًا من شوط إلى آخر ، وخاصة أوقات الحساب والاختيار. كانت أرقام C ++ DataFrame أكثر اتساقًا.
| C ++ DataFrame | Polars | الباندا | |
|---|---|---|---|
| توليد البيانات/وقت التحميل | 26.945900 ثانية | 28.468640 ثانية | 36.678976 ثانية |
| وقت الحساب | 1.260150 ثانية | 4.876561 ثانية | 40.326350 ثانية |
| وقت الاختيار | 0.742493 ثانية | 3.876561 ثانية | 8.326350 ثانية |
| الوقت العام: | 28.948600 ثانية | 36.876345 ثانية | 85.845114 ثانية |
يرجى النظر في رعاية DataFrame ، خاصة إذا كنت تستخدمه في طاقتها الإنتاجية. هذا هو أقوى شكل من أشكال التقدير