Uploaded avatar of iHiD

إنه أبريل التحليلي!

@iHiD
منذ أكثر من 3 سنوات
فيديو

مرحبًا جميعًا! كان لدينا Functional February وMechanical March. والآن حان وقت Analytical April، الذي سنركّز فيه على اللغات الرائعة لعلم البيانات.

وكما اعتدتَ من الأشهر القليلة الماضية، سنقدم لك أنا وErik في هذا الفيديو نظرة سريعة على ما يتناوله الشهر وعلى اللغات المختلفة التي سنستكشفها.

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

أولًا، اللغات المميزة لهذا الشهر. لدينا ثلاث لغات فقط هذا الشهر: Julia وPython وR. كل لغة من هذه اللغات مختلفة تمامًا، ومن الواضح أن Python لغة متعددة الأغراض، لكننا سنشجعك هذا الشهر على تجربة استخدام هذه اللغات بعقلية عالم البيانات.

للحصول على شارة Analytical April، عليك إكمال خمسة تمارين في إحدى هذه اللغات. سنستكشف الفروق بينها بعد قليل، لكن بمصطلحات Exercism، يتمتع مسار Python لدينا بمنهج رائع، لذا أوصيك بشدة بتجربته. نأمل أيضًا إطلاق منهج لـ Julia خلال الشهر، فقد أُنجز الكثير من العمل عليه ولا يحتاج سوى بعض الصقل. أما R فليس لها منهج، لكنها تتضمن الكثير من التمارين الممتعة لتلعب بها.

لدينا خمسة تمارين مميزة لتجربتها:

  • etl: حيث يمكنك استكشاف إعادة تشكيل البيانات إلى صيغة مختلفة
  • largest-series-product: حيث يمكنك التدرب على طرق فعّالة للبحث عن أنماط في سلسلة نصية من الأرقام
  • saddle-points: لاستكشاف العمل مع المصفوفات متعددة الأبعاد
  • sum-of-multiples: للتدرب على تصفية متتالية من الأعداد وجمعها
  • word-count: تحويل سلسلة نصية إلى كلمات وحساب عددها

تذكيرًا: إلى جانب شارة Analytical April، هناك شارة #12in23 التي تمتد طوال العام ويمكنك الحصول عليها بحلّ التمارين المميزة المختلفة في أي وقت من السنة. لذا ستحتاج إلى حلّ تلك التمارين الخمسة بـ Python أو R أو Julia في وقت ما هذا العام للحصول على تلك الشارة! وللحصول على القائمة الكاملة للتمارين، هناك منشور في المنتدى مرتبط من صفحة Analytical April.

وأخيرًا، قبل أن نتعمق في اللغات، تذكير بأننا أطلقنا خادم Discord الجديد خلال مارس. وقد شهد نشاطًا ممتعًا كثيرًا، لذا احرص على الاطلاع عليه. الرابط في الوصف أدناه!

حسنًا، لنستكشف اللغات. لنأخذ نظرة سريعة على كل لغة ثم نتعمق في ميزاتها وحالات استخدامها. لنبدأ بـ Python.

Python

  • ابتكرها وطوّرها Guido van Rossum في أواخر ثمانينيات القرن العشرين كخلف للغة البرمجة ABC. وصدرت لأول مرة عام 1991.
  • طُوّرت في هولندا في Centrum Wiskunde & Informatica (CWI) (المشهور بكونه المكان الذي أنجز فيه Edsger Dijkstra معظم عمله)، وهو مختبر بحثي ممول من الحكومة.
  • كان Guido يبرمج باستخدام C ونصوص shell، لكن لكل منهما عيوبه. وتهدف Python إلى الجمع بين أفضل ما في العالمين دون عيوب.
  • تُدار بواسطة Python Software Foundation، وتحدث تغييرات اللغة عبر مقترحات تحسين Python (PEPs) (على غرار RFC)

R

  • ابتكرها Ross Ihaka وRobert Gentleman في جامعة أوكلاند. ويمكن اعتبار R تنفيذًا مختلفًا للغة S (بفروق طفيفة نسبيًا)، والتي خلفتها S-plus، وهي تنفيذ تجاري (غير مفتوح) للغة S. وبينما تتشارك R معظم الصياغة مع S، فإن دلالاتها مستوحاة من Scheme
  • الهدف: إنشاء لغة أنسب للحوسبة الإحصائية والرسوم البيانية وأسهل في الاستخدام من البرمجيات المماثلة التي صممها علماء الحاسوب

Julia

  • طوّرها Jeff Bezanson وStefan Karpinski وViral B. Shah وAlan Edelman بشكل مفتوح، ولديها حاليًا أكثر من ألف مساهم
  • الهدف: بناء لغة حرة عالية المستوى تجمع سرعة C، وحيوية Ruby، والبرمجة الفوقية في LISP، وقدرات Python متعددة الأغراض، ودعم R للإحصاء، ودعم MatLab للجبر الخطي، وقوة Perl في معالجة السلاسل النصية، مع القدرة في الوقت نفسه على دعم التنفيذ المتوازي على نطاق واسع
  • ممتازة للحوسبة العلمية، لكنها أيضًا لغة متعددة الأغراض (إطار عمل Genie لتطبيقات الويب)

وكما هو الحال مع لغات كثيرة، بُنيت اللغات الثلاث جميعها بدافع عدم الرضا :)

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

Python

  • لغة متعددة الأغراض حقًا (مواقع الويب، النصوص البرمجية، الحوسبة العلمية)
  • يمكن استخدامها لأغراض كثيرة ومختلفة: الذكاء الاصطناعي (TensorFlow)، الحوسبة العلمية (NumPy)، النصوص البرمجية، مواقع الويب (Django)، الأنظمة المدمجة (micro python)، والتفاعل مع العتاد (مثل raspberry pi)، والألعاب (EVE online)، حتى إن Python وصلت إلى المريخ
  • رائعة لتعلّم البرمجة: ثروة من المصادر ومجتمع ضخم. وهناك الكثير من الإرشادات حول كتابة الكود بأسلوب Python (أي كيفية كتابة الكود الاصطلاحي بلغة Python، وأمثلة)، مثل "الوضوح أفضل من الإيماء" و"قابلية القراءة مهمة"). معظم أنظمة التشغيل تأتي Python مثبتة عليها افتراضيًا
  • من أكثر اللغات استخدامًا في الوقت الحالي، لذا تتوفر لها وثائق ومكتبات كثيرة ومجتمع كبير

R

  • تُستخدم R في أماكن متنوعة كثيرة، منها استخدام الباحثين لها لتحليل بيانات التجارب، والجامعات لتدريس الإحصاء وتحليل البيانات، والقطاع المالي الذي يُعدّ الإحصاء فيه أمرًا جوهريًا (مثل التأمين)، وكذلك قطاع التجزئة (تستخدم Amazon لغة R في تحليلات البيانات) والتصنيع (تقدّر John Deere عدد قطع الغيار التي ينبغي إنتاجها)، ويساعد National Weather Service في التنبؤ بالطقس والكوارث، والصحافة القائمة على البيانات (تحليل بيانات العالم الواقعي وفهمها، غالبًا عبر التمثيل البصري)، وتُستخدم بكثافة في الرعاية الصحية، مثل تحديد مدى أمان دواء ما بناءً على التجارب قبل السريرية

Julia:

  • رائعة للحوسبة العلمية والتنقيب في البيانات وتعلّم الآلة والجبر الخطي والحوسبة الموزعة. وستبدو صياغتها قريبة من الصياغة الرياضية، لذا فإن تحويل المعادلة إلى كود أمر سهل نسبيًا
  • الحوسبة الموزعة: تتيح المهام (=الروتينات المتزامنة) والقنوات تشغيل الكود بالتوازي مع تواصلها مع بعضها البعض، ودعم تعدد العمليات عبر تمرير الرسائل (رائع للحوسبة عالية الأداء)
  • تُستخدم في مشروع Celeste (حاسوب فائق يشغّل كود Julia لتحليل 178 تيرابايت من البيانات الفلكية) (وهذا يجعل Julia جزءًا من نادي البيتافلوب، الذي لم يكن فيه آنذاك سوى C وC++ وFortran، لتكون Julia أول لغة ديناميكية، بمعدل كوادريليون عملية حسابية ذات فاصلة عائمة في الثانية. أي 1 أمامه 15 صفرًا)، وClima (تحالف نمذجة المناخ) الذي يعمل فيه أشخاص من Caltech وMIT ومختبر الدفع النفاث التابع لـ NASA على تطوير نموذج للتنبؤ بالمناخ، وCERN، وASML

ومن منظور البرمجة، كيف تختلف عن بعضها؟ هل هي وظيفية، أم كائنية التوجه، أم غير ذلك؟

Python:

  • ديناميكية ومحددة الأنواع بقوة
  • متعددة الأنماط: أمرية، ووظيفية، لكنها في الحقيقة لغة كائنية التوجه (كل شيء فيها كائن)
  • المفسّر الافتراضي CPython يترجم الكود إلى كود بايتي، ثم يُفسَّر ذلك في آلة افتراضية. بينما PyPy بديل لـ CPython يترجم في الوقت المناسب إلى لغة الآلة

R:

  • ديناميكية ومحددة الأنواع بقوة
  • متعددة الأنماط، فنواتها وظيفية لكنها تدعم أيضًا الأسلوبين الإجرائي أو الكائني التوجه

Julia:

  • ديناميكية ومحددة الأنواع بقوة، وتُترجم في الوقت المناسب
  • متعددة الأنماط: أمرية، وكائنية التوجه (تحميل الدوال عبر الإرسال المتعدد)، ووظيفية (الدوال عالية الرتبة، والتطبيق الجزئي، وعامل الأنبوب)
  • يُترجم الكود في الوقت المناسب ترجمة مسبقة عند التنفيذ

وبمواصلة النظر إليها من منظور البرمجة، هل تمتلك أي من هذه اللغات ميزات بارزة بشكل خاص؟

Python:

  • صياغة مريحة: الحساسية للمسافات البيضاء تجعل النطاق سهل الرؤية. والكود عادة سهل القراءة، مثل الشروط المنطقية المقروءة للبشر (and/or)
  • تعبيرية: تنجز الكثير بالكود القليل نسبيًا (استيعاب القوائم، والمولّدات، والمزيّنات)
  • ثروة هائلة من المكتبات المتاحة لأغراض متنوعة
  • وكما ذُكر سابقًا، فهي لغة متعددة الأغراض بحق، إذ يمكن استخدامها في سيناريوهات كثيرة ومختلفة

Julia

  • الإرسال المتعدد. تحديد الدالة التي سيتم استدعاؤها بناءً على أنواع جميع الوسائط (مثل تحميل الدوال)
  • ديناميكية مع أداء رائع. يمكن أن يضاهي أداء Julia أداء Fortran ويقترب من أداء C. وغالبًا ما يكون الكود "العادي" عالي الأداء (من دون حيل جنونية، بل إن الدوال الأصغر مشجَّعة فعليًا). ومكتبات تدعم تشغيل الكود على GPU
  • الحوسبة الموزعة: تتيح المهام (=الروتينات المتزامنة) والقنوات تشغيل الكود بالتوازي مع تواصلها مع بعضها البعض، ودعم تعدد العمليات عبر تمرير الرسائل (رائع للحوسبة عالية الأداء)
  • رائعة للحوسبة العلمية والتنقيب في البيانات وتعلّم الآلة والجبر الخطي والحوسبة الموزعة. وستبدو صياغتها قريبة من الصياغة الرياضية، لذا فإن تحويل المعادلة إلى كود أمر سهل نسبيًا

R:

  • أنواع بيانات مرنة: المتجه هو النوع الأساسي، وحتى القيم القياسية هي متجهات. ويمكن أن ترتبط بالمتجهات بيانات وصفية (مثل أسماء عناصرها). أما القوائم فهي غير متجانسة (يمكن أن تضم عناصر من أنواع مختلفة). وهناك نوع خاص هو إطار البيانات لتجميع المتجهات (جميعها بالطول نفسه).
  • تتيح العمليات المتجهية تحديث المتجهات بصورة موجزة وفعّالة ومقروءة
  • R عبارة عن مجموعة متكاملة من الأدوات البرمجية لمعالجة البيانات والحساب والعرض البياني. ويسهل عبر R Studio استكشاف البيانات وتمثيلها بصريًا ومعالجتها. وهي رائعة للتنقيب في البيانات
  • مجتمع رائع، ودود ومتنوع. إن R for Data Science Online Learning Community مجتمع من متعلمي R بمختلف مستويات المهارة يعملون معًا لتحسين مهاراتهم. وهناك مجموعة Slack مفتوحة يتواصل فيها الأعضاء ويساعد بعضهم بعضًا في حل المشكلات.

إذا كان شخص ما مترددًا في أي لغة يجرب في أبريل، فكيف توصيه بأن يتخذ قراره؟

كما هو الحال في كل شيء في مجال تقنية المعلومات: الأمر يعتمد على السياق! وفي هذه الحالة، أقول إنه يعتمد في معظمه على أهدافك وتجربتك الشخصية.

إذا كنت جديدًا نسبيًا على البرمجة، أو مهتمًا بالذكاء الاصطناعي أو تعلّم الآلة، أو ترغب في تعلّم لغة يمكنك استخدامها في أمور كثيرة ومختلفة، فغالبًا سأوصيك بالبدء بـ Python: عدد المصادر المتاحة لـ Python هائل، ويشمل دورات مجانية كثيرة عبر الإنترنت تُستخدم Python في كل مكان مع الذكاء الاصطناعي وتعلّم الآلة يمكن استخدام Python لعدد كبير من الأغراض يتيح مسار Python وضع التعلّم، الذي يساعدك على تعلّم المفاهيم الأساسية للغة بطريقة ممتعة

إذا كنت مهتمًا بالعمل الإحصائي، أو ترغب في استكشاف البيانات وتمثيلها بصريًا، أو لديك فضول لمعرفة طريقة مختلفة للتعامل مع البيانات، فإن لغة R خيار رائع: تعتمد أنواع البيانات في R على تجمّعات من البيانات (متجهات/قوائم)، ويمكن تطبيق العمليات على التجمّعات بسهولة (دون حاجة إلى الحلقات) بيئة تطوير RStudio رائعة لاستكشاف البيانات وتمثيلها بصريًا تقدم R دعمًا ممتازًا للتحليل الإحصائي تتيح R رسم البيانات بسهولة

إذا كنت مهتمًا بالحوسبة العلمية، أو ترغب في تشغيل الكود بالتوازي، أو يهمك الأداء حقًا، أو ترغب في تعلّم لغة حديثة وأنيقة تقدم شيئًا مختلفًا عن معظم اللغات الأخرى، فسأوصي بـ Julia:

  • الإرسال المتعدد سيكون جديدًا على كثيرين، وهو قوي إلى حد لا يصدق
  • Julia رائعة للحوسبة العلمية
  • نظام الأنواع في Julia مرن وتعبيري
  • تمتلك Julia أداءً ممتازًا
  • Julia رائعة للتنفيذ المتوازي

بالطبع، إن كان لديك وقت فأوصيك بتجربة الثلاث جميعًا! فلن تعرف حقًا أي لغة ستستمتع بها إلا إذا جرّبتها.

1 أبريل، 2023 · هل وجدته مفيدًا؟