لغات تحليل البيانات Languages of data analysis

دائماً ما يرد هذا السؤال: ما هي أفضل لغة برمجة؟ عند البشر نزعة إلى التصنيف والاختزال نجدها في الكثير من اختياراتنا في الحياة اليومية، ما هو أفضل جوال؟ ما هي أفضل سيارة؟ ما هو أفضل تخصص، أو جامعة؟ … ولكن هناك مشكلة تكمن في السؤال نفسه. ليس هناك شيء يصلح لكل شخص أو زمان أو مكان، فالأسلوب المناسب للسؤال يفترض أن يحتوي ما يدل على سياق الحاجة. وحيث أننا مهتمون بتحليل ومعالجة البيانات، اسمحوا لي بتغيير السؤال إلى: ما هي أفضل لغة برمجة لتحليل البيانات؟ وسأطرح سؤالين إضافيين سيحددان خصائص اللغات المناسبة لتحليل البيانات:

كيف يتم التعامل مع البيانات؟هناك العديد من صور هيكلة البيانات، ولكن في الغالب يتم التعامل معها عند تحليلها على شكل مصفوفات. الكثير من البيانات الرقمية والنصية يتم تخزينها كجداول، إما في ملف نصي، أو جداول اكسل، أو قواعد البيانات. كذلك الإشارات والصور والفيديو يتم معالجاتها كمصفوفات. إذاً، أحد الخصائص المهمة التي نحتاجها في لغات تحليل البيانات قدرتها على التعامل مع المصفوفات ومعالجتها بسهولة وفعالية.

كيف تتم عملية تحليل البيانات؟
هل عملت في السابق على تحليل بيانات؟ في الغالب عملية تحليل البيانات تكون استكشافية (على الأقل قبل أتمتة العملية)، حيث تحتاج أن ترى النتائج بعد كل مجموعة من الأوامر، وبناءاً عليها تقرر ما هي الخطوة التالية. هذا يختلف عن الطريقة المعتادة في كتابة البرنامج، بحيث تكون تعرف بالضبط ما تحتاجه، ثم تكتبه كاملاً وتقوم بعمل compile له. تحليل البيانات ستكون فعاليته أكبر إذا استخدمت لغة تفاعلية، أو ما يطلق عليها لغة سكربت (Scripting language).

بعد أن عرفنا خصائص لغات تحليل البيانات، سأستعرض هنا بعض اللغات التي لها علاقة بذلك، سواء كانت مباشرة أم من بعيد. الهدف معرفة مزايا كل لغة بما يتعلق بمهمة تحليل البيانات. هناك العديد من لغات البرمجة تختلف نقاط قوتها، فبعضها ممتازة لتحليل البيانات تحديداً، وبعضها لتصميم مواقع الانترنت وأخرى للسرعة. بعضها مجاني وبعضها برسوم. سيكون الاستعراض موضوعياً قدر الإمكان، وبعد ذلك أناقش كيف يمكنك اختيار اللغة المناسبة لك.

ملاحظة: حاولت قدر الاستطاعة أن أكون دقيقاً، ولكن قد تتغير هذه اللغات أو مجتمعاتها مع الوقت، أو يضاف إليها خصائص أخرى لم يتم ذكرها.
أولاً: لغات تحليل البيانات
كما ذكرت، فإن لغات تحليل البيانات المفضلة تمتاز بتعاملها الجيد مع المصفوفات، وبأنها تفاعلية. في التالي أشهر اللغات التي تمتاز لهذا.
ماتلاب (Matlab) و أوكتيف (Octave)
ماتلاب، أحد منتجات شركة MathWorks، مشتق من كلمتي (matrix laboratory)، معمل المصفوفات. تكمن قوة ماتلاب (كما هو واضح من اسمه) بقدرته على التعامل مع المصفوفات بسهولة كبيرة، لذا فهو خيار مفضل للعديد من المجالات، وبخاصة العلمية والأكاديمية التي تحتاج للتعامل معها، ومن ضمنها تحليل البيانات. ويمكن عرض البيانات وتصويرها بشكل جيد باستخدام ماتلاب.
ماتلاب عبارة عن بيئة برمجية سهلة التعلم، وتكمن قوتها في المكتبات الإضافية (toolboxes) التي يمكن شراؤها، والتي تتيح لك المزيد من المميزات. تتيح لك هذه المكتبات التعامل مع وقراءة البيانات من مصادر مختلفة، التعامل مع الإشارات والصور، التحاليل المالية، خوارزميات تعلم الآلة، وغيرها.
ما يعيب ماتلاب أنه مغلق المصدر وتكلفة تراخيصه عالية جداً (تحتاج كذلك ترخيص لكل toolbox)، خصوصاً خارج الإطار الأكاديمي. يوجد خيار آخر، وهو أوكتيف (Octave)، بيئة مفتوحة المصدر لنفس لغة ماتلاب، ولكن مشكلته أنه يفتقد لأهم مزايا ماتلاب، وهي مكتباته القوية. كما أن مجتمعه غير نشط مثل بعض اللغات التي سأذكرها. العيب الآخر لماتلاب هو محدودية خيارات النشر (deployment) للأنظمة، كعمل موقع انترنت أو تطبيق ثابت مستقل.

آر ®
يطلق على لغة آر “لغة للإحصائيين، بنيت بواسطة الإحصائيون”. وقد طورت عام 1997م من لغة S كخيار بديل عن البرمجيات المكلفة جداً، مثل ماتلاب وساس (SAS)، وهي الآن مفتوحة المصدر ومدعومة من R Foundation for Statistical Computing.
بالرغم من أن بداية لغة آر كانت موجهة للإحصائيين، إلا أنها لاقت القبول من مجتمعات متعددة جامعها المشترك معالجة وتحليل البيانات. وساعد على قبول اللغة وانشارها تطوير مكتبات عديدة تغطي ما يحتاج إلىه كل من هذه المجتمعات. ويتم استخدامها حتى في المؤسسات والشركات الضخمة لتحليل البيانات وتصويرها بطريقة جذابة وجميلة. هناك العديد من المكتبات القوية مفتوحة المصدر التي يمكن استخدامها مجاناً. تحظى لغة آر بمجتمع ممتاز ونشط.
تعلم آر ليس صعباً جداً، ولكنه ليس بسهولة ماتلاب أو بايثون. إضافة إلى أنها تعاني من البطء في بعض المكتبات خصوصاً عند معالجة بيانات كبيرة. كما أن الهدف الأساسي من اللغة تحليل البيانات فقط، فهي ليست لغة عامة مثل بايثون، فلن يكون لديك الحرية لعمل التطبيقات المتنوعة (للحاسب أو الانترنت).

بايثون (Python)
تم تطوير لغة بايثون في عام 1991م بواسطة Guido van Rossum، وهي لغة برمجة عامة تمتاز بسهولة تعلمها، مما أسهم في سرعة انتشارها وتبنيها في العديد من الجهات. ولسهولتها فإن بعض المدارس أضافوها منهجاً لتعليم الطلاب مبادئ البرمجة. كما أنه يتم استخدامها من قبل العديد من الشركات الكبيرة، فأجزاء من مواقع مشهورة تم تطويرها باستخدام بايثون، مثل Youtube، Google، Dropbox، و Reddit.
في الأساس تعتبر بايثون لغة عادية، ولكن بعد تطوير عدد من المكتبات البرمجية لها اكتسبت شعبية كبيرة بين العديد من المجتمعات، ومن ضمنها تحليل البيانات وتعلم الآلة. من أهم المكتبات في هذا المجال، مكتبة NumPy التي تتيح لبايثون التعامل مع المصفوفات، وهي مشابهة بشكل كبير لطريقة ماتلاب مما جعل الانتقال منه إلى بايثون سهلاً. وكذلك هناك مكتبة SciPy للرياضيات والعلوم والهندسة، ومكتبة Matplotlib للرسوم البيانية وتصوير البيانات، وهي كذلك مشابهة جداً لأسلوب ماتلاب. وهناك العديد من المكتبات الأخرى، وكثير منها مبنية على السابق ذكرها مثل مكتبة Pandas لمعالجة البيانات. ساعد على انتشار لغة بايثون وتبنيها مجتمعها القوي والنشط. لأن بايثون لغة عامة، فيمكن تطوير البرامج ومواقع الانترنت مباشرة من خلالها.
من عيوب بايثون، كغيرها من لغات السكريبت مثل ماتلاب وآر، بطئها النسبي مقارنة بغيرها من اللغات. هناك حلول لذلك مثل استخدام Cython أو Pypy وغيرها. كما أن اللغة dynamically typed، مما يعني أنه يجب على المبرمج أن ينتبه جيداً لأنواع المتغيرات أثناء التطوير. هذا يؤثر سلباً على قابلية إعادة الاستخدام (Re-usability)، مما يجعل تطوير الأنظمة الكبيرة مفضلاً باستخدام لغات أكثر صرامة مثل جافا.
أخرى
هناك بعض اللغات الأخرى ضمن بيئات للتعامل مع البيانات، لم يتم ذكرها لغلائها وقلة استخدامها مقارنة بما تم ذكره، مثل IBM SPSS Statistics، و SAS.

ثانياً: لغات مهمةبعض اللغات ليست هي الأنسب لتحليل ومعالجة البيانات، ولكنها تستخدم في بناء التطبيقات (غالباً الكبيرة)، أو في تحليل البيانات الضخمة، أو في عرض البيانات. سأذكر هنا أبرزها.

جافا (Java)
قد لا تكون لغة جافا الخيار الأمثل لتحليل البيانات، ولكن إذا أردت الانتقال من مرحلة الاستكشاف واختبار الخوارزميات إلى بناء الأنظمة (وبخاصة الكبيرة) فستكون خيار جيد. تمتاز جافا بانتشارها وقبولها لدى العديد من الجهات، وبسهولة إعادة استخدام البرامج المكتوبة بواستطتها. كما أنها لغة صارمة جداً وتتبع منهجية البرمجة الكائناتية (object oriented). من الأمثلة لأنظمة تحليل البيانات التي بنيت باستخدام جافا منصة هدوب (Hadoop) لتخزين ومعالجة وتحليل البيانات الضخمة.

سكالا (Scala)تشبه لغة سكالا جافا كثيراً، كما تعمل على نفس Java Virtual Machine بعد تحويلها إلى bytecode. وتمتاز بإتاحتها الفرصة بالبرمجة الكائناتية (object oriented) أو الوظيفية (functional). سكالا هي اللغة الأساسية لبرمجة سبارك (Spark) لتحليل البيانات الضخمة على منصة هدوب (هناك أيضاً خيار لاستخدام بايثون). تعلم اللغة أسهل من جافا ولكن أصعب من بايثون.

جافا سكربت (Javascript)جافا سكربت تستخدم أساساً لتطوير مواقع وبرمجيات الانترنت. وكذلك فهي تستخدم لتصوير البيانات بطريقة تفاعلية جميلة. من أشهر المكتبات لتصوير البيانات مكتبة D3، وهذه الصفحة تشرح 12 مكتبة لتصوير البيانات.
C++\C
لغة سي ليس لها منازع في مجال السرعة (إلّا لغة أسمبلي!). في التطبيقات التي تحتاج سرعة، قد تحتاج التضحية بسهولة البرمجة، وهنا قد يكون خيارك لغة سي. ولكن لا يعني ذلك أن استخدامها محدود جداً. على سبيل المثال، أحد أشهر مكتبات معالجة الصور، openCV، مكتوبة بلغة سي، ولكن يمكن استخدامها بواسطة لغات أخرى مثل بايثون.

ثالثاً: لغات في بداياتها
جوليا (Julia)
تم تطوير لغة جوليا عام 2009 كلغة عامة (مثل بايثون) سهلة التعلم والاستخدام. يمكن استخدام جوليا كلغة سكربت أو للتطوير، وهي أسرع من لغتي آر وبايثون. مشكلة اللغة قلة المجتمعات التي تستخدمها مقارنة مثلاً ببايثون وآر وماتلاب، كما أن مكتباتها المتعلقة بتحليل ومعالجة البيانات تحتاج لمزيد من التطوير.

قو (GO)قامت قووقل بتطوير وإطلاق لغة قو عام 2007م، وهي لغة تأخذ من لغة سي في طريقة الكتابة، وبايثون في السهولة والاختصار. اللغة ليست سكربت، ولكن compiled، وهي مفتوحة المصدر. هناك بعض المكتبات لتحليل البيانات، ولكن مثل لغة جوليا تحتاج لمزيد من التطوير، كما أن المجتمعات المتبنية لها لا تزال محدودة.

رابعاً: أخرى
هناك بعض اللغات التي يجدر التنويه بها. هذه اللغات لا تعتبر لغات برمجة، ولكنها مفيدة للتعامل مع البيانات. من أشهر هذه اللغات:
SQL: للتحكم وإنشاء قواعد البيانات العلائقية (relational databases)، وإرسال الاستعلامات. تستخدم في منتجات العديد من الشركات، مثل MySQL، Oracle، و Microsoft.
Hive: لغة هايف شبيهة بـ SQL، وهي لـ Apache Hive لإدارة البيانات والإستعلام، أحد مكونات منصة هدوب (Hadoop).
Pig Latin: اللغة التي تتعامل مع Apache Pig لتحليل البيانات الضخمة، كذلك أحد مكونات منصة هدوب.


كيف تختار لغة البرمجة؟لا توجد إجابة واحدة، ويعتمد ذلك على حاجتك وطبيعة عملك. فإذا كنت تعمل في مرحلة استكشاف البيانات، أو تطوير الخوارزميات واختبارها فلغات تحليل البيانات التي ذكرتها مناسبة لك. قد يكون الأفضل للأفراد والمؤسسات الصغيرة العمل على بايثون أو آر لأنهما مجانيان، ويعتمد الاختيار بينهما على توفر المكتبات التي تحتاجها والمجتمع الذي تريده. فمثلاً الإحصائيون يفضلون آر، والمبرمجون يفضلون بايثون. بعض المؤسسات والشركات لها متطلبات خاصة قد تستلزم العمل على المنصات المدفوعة مثل ماتلاب أو SPSS.

إذا كنت تود العمل على البيانات الضخمة، فقد تكون جافا مناسبة إذا كنت تعمل على منصات هدوب، أو سكالا إذا كنت ستعمل على سبارك (Spark). وكذلك تستطيع العمل باستخدام بايثون عن طريق Hadoop Streaming، كما توجد مكتبة لبايثون لاستخدام سبارك. جافا مناسبة أيضاً لتطوير البرامج الكبيرة غير منصة هدوب.

هل ستنشر البرنامج (deploy)؟ قد لا تكون آر أو اللغات المدفوعة مثل ماتلاب وSPSS الأفضل لمحدودية الخيارات، حيث أنها ليست لغات عامة مثل جافا وبايثون. وإذا كانت السرعة هي أهم المتطلبات عندك، فقد تكون لغة سي خياراً ممتازاً.

هذه بعض الأفكار العامة حول اختيار لغة برمجة لتحليل البيانات، وهي لا تعدو كونها مقترحات تخضع للتفضيلات الشخصية. و قد يتأثر خيارك لأحد اللغات بعوامل شخصية، كدراسة أحدها سابقاً (مثلاً في الجامعة).

آمل أن تكون قد استفدت من هذا الموضوع لتكون فكرة عن اللغات الموجودة في الساحة. وأود أن أسمع منكم: ما هي اللغة/اللغات التي تستخدمها لتحليل البيانات؟ ولماذا اخترتها؟

ليست هناك تعليقات: