شعار زيفيرنت

إدارة كود Python القابل لإعادة الاستخدام كعالم بيانات

التاريخ:

إدارة كود Python القابل لإعادة الاستخدام كعالم بيانات

فيما يلي بعض الأساليب التي استقرت عليها لإدارة كود Python الخاص بي القابل لإعادة الاستخدام كعالم بيانات ، تم تقديمه من معظم إلى الأقل استخدامًا للشفرة العامة ، ويستهدف المبتدئين.


الشكل
تصوير كريس رييد on Unsplash

 

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

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

هذا هو السبب في أنك تستخدم بالفعل مكتبات الطرف الثالث. لا حاجة لإعادة تنفيذ قاعدة رمز آلة متجه الدعم من نقطة الصفر في كل مرة تريد استخدامها ؛ بدلاً من ذلك ، يمكنك الاستفادة من مكتبة - ربما Scikit-Learn - والاستفادة من العمل الجماعي للعديد من الأشخاص الذين يتقنون بعض الرموز بمرور الوقت.

إن توسيع هذه الفكرة إلى مجال البرمجة الشخصية أمر منطقي فقط. ربما تقوم بذلك بالفعل (أتمنى أن تكون كذلك) ، ولكن إذا لم يكن الأمر كذلك ، فإليك بعض الطرق التي استقرت عليها لإدارة كود Python الخاص بي القابل لإعادة الاستخدام كعالم بيانات ، مقدم من معظم إلى أقل استخدام عام للكود.

مكتبات كاملة

 
هذا هو النهج الأكثر عمومية ، وما يمكن المجادلة به هو الأكثر "احترافية" ؛ ومع ذلك ، هذا وحده لا يجعله الاختيار الصحيح طوال الوقت.

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

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

def find_nth (كومة قش ، إبرة ، n): البدء = كومة قش.عثر على (إبرة) أثناء البدء> = 0 و n> 1: البدء = كومة قش.


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

والآن بعد أن أصبح لدي ملف textproc المكتبة ، يمكنني استيراد ملفات find_nth تعمل بسهولة ، وبقدر ما أحب ، دون الحاجة إلى نسخ الوظيفة ولصقها في كل برنامج أكتبه وأستخدمه فيه.

من استيراد textproc ، find_nth section = line [: find_nth (line، '،'، 4)]. strip ()


أيضًا ، إذا كنت أرغب في توسيع المكتبة لإضافة المزيد من الوظائف ، أو تغيير ملفات find_nth رمز ، يمكنني القيام بذلك في مكان واحد وإعادة الاستيراد فقط.

البرامج النصية المشتركة الخاصة بالمشروع

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

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

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

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

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

قوالب خاصة بالمهام

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

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

في هذه الحالة ، أكتب فقط قالب نص برمجي يمكن تغييره بسهولة ، واحتفظ به في متناول اليد في مجلد به قوالب مماثلة. هذا مقتطف من listify_df، والذي ينتقل من ملف CSV إلى Pandas DataFrame ، إلى إخراج HTML المطلوب.

استيراد الباندا كـ pd # قراءة ملف CSV إلى dataframe csv_file = 'data.csv' df = pd.read_csv (csv_file) # تكرار فوق df ، وإنشاء إدخالات قائمة مرقمة i = 1 للفهرس ، والصف في df.iterrows (): entry = ' ' + str (i) + '. '+ صف [' عنوان '] +' + 'nn n '+ row [' description '] +' n n 'i + = 1 طباعة (إدخال)


في هذه الحالة ، تساعد أسماء الملفات الواضحة وتنظيم المجلدات في إدارة هذه المقتطفات المفيدة غالبًا.

بطانات قصيرة وكتل

 
أخيرًا ، هناك الكثير من المقتطفات المتكررة التي ربما تكتبها بانتظام. فلماذا تفعل ذلك؟

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

على سبيل المثال ، هل تستورد الكثير من نفس المكتبات لجميع مشاريعك من نوع معين؟ أفعل. على سبيل المثال ، يمكنك إعداد جميع عمليات الاستيراد التي قد تحتاجها للعمل في مهمة معينة عن طريق كتابة ، على سبيل المثال ، #nlpimport والتي ، بمجرد كتابتها ، يتم التعرف عليها على أنها كلمة رئيسية مشغلة ويتم استبدالها بما يلي:

استيراد sys ، طلبات استيراد numpy كـ np استيراد الباندا مثل pd استيراد texthero استيراد مبعثر مثل st استيراد spacy من spacy.lang.en.stop_words استيراد STOP_WORDS من مجموعات البيانات استيراد load_metric ، list_metrics من محولات استيراد خط أنابيب من fastapi استيراد FastAPI


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

 
كانت هذه نظرة عامة على نهج إدارة كود Python القابل لإعادة الاستخدام كعالم بيانات. آمل أن تكون قد وجدتها مفيدة.

 
مقالات ذات صلة:


أفلاطون. Web3 مُعاد تصوره. تضخيم ذكاء البيانات.

انقر هنا للوصول.

المصدر: https://www.kdnuggets.com/2021/06/managing-reusable-python-code-data-scientist.html

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة