اذهب إلى المحتوى

ياسر مسكين

الأعضاء
  • المساهمات

    1071
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    2

كل منشورات العضو ياسر مسكين

  1. بدون <form> صحيح يمكنك إنشاء حقول إدخال للمستخدم مثل <input>، ولكن لن تتمكن من إرسال هذه البيانات إلى الخادم بشكل تلقائي عند الضغط على زر الإرسال <button type="submit"> لأن وظيفة <form> هي تحديد منطقة تستخدم لجمع بيانات المستخدم وإرسالها إلى خادم الويب لمعالجتها ودور form يبرز عندما يتعلق الأمر بجمع البيانات وإرسالها. يمكنك الاطلاع أكثر من هنا: وظيفة Form.
  2. دالة round في مكتبة NumPy تستخدم لتقريب الأرقام إلى عدد محدد من المنازل العشرية بحيث يمكنك استخدامها لتقريب الأرقام في مصفوفة إلى أقرب عدد صحيح أو إلى عدد معين من الأرقام بعد الفاصلة العشرية بشكل افتراضي تقرب الأرقام إلى أقرب عدد صحيح، ويمكنك التحكم في عدد المنازل العشرية بإضافة وسيط إضافي مثلا إذا أردت تقريب عدد إلى منزلتين عشريتين، تكتب np.round(a, 2) حيث a هو الرقم أو المصفوفة المراد تقريبها.
  3. predict تستخدم بعد اكتمال تدريب النموذج لتوليد توقعات على بيانات جديدة غير مرئية للنموذج. تعتمد فقط على المدخلات التي تقدمها (features) وتعيد النتائج التي يتوقعها النموذج، مثل احتمالات التصنيف في حالة التصنيف أو القيم المتوقعة في حالة الانحدار والهدف منها هو تقديم مخرجات النموذج استنادا إلى المعرفة التي اكتسبها من التدريب فهي لا تتطلب نتائج حقيقية للمقارنة، فهي فقط تعطي التوقعات بناء على البيانات التي توفرها على سبيل المثال إذا كنت تستخدم شبكة عصبية للتنبؤ بالأسعار، فإن predict ستعطيك الأسعار المتوقعة بناء على المدخلات التي قدمتها أما evaluate فهي تستخدم لتقييم أداء النموذج بعد تدريبه على بيانات الاختبار أو التحقق (validation) أي أنها تقوم بأخذ المدخلات (features) بالإضافة إلى النتائج الحقيقية (labels)، ثم تحسب دالة الخسارة (مثل loss) ومقاييس الأداء الأخرى (مثل accuracy) لمعرفة مدى جودة النموذج في التنبؤ بالنتائج الصحيحة ويتم استخدامها لمعرفة مدى دقة النموذج ومدى تقليله للخسارة عند العمل على بيانات لم يتم التدريب عليها وهذا ما يساعد في تحديد إذا ما كان النموذج يُعمم بشكل جيد على بيانات جديدة. و باختصار فإن: predict: لتوليد التوقعات على بيانات جديدة، دون الحاجة إلى النتائج الحقيقية. evaluate: لتقييم النموذج على بيانات تحتوي على النتائج الحقيقية لقياس أدائه ومعرفة دقة تنبؤاته.
  4. هذا غريب، فالمشكلة ليست في الشيفرة حسب ما أرى، وهذه ليست طبيعة عمل بايثون فعادة ما تبقى الجمل المطبوعة على الشاشة إلى أن يتم إدخال قيمة معينة فعلى الأرجح المشكلة في البيئة التي تعمل فيها لذا جرب تشغيل الكود في بيئة أخرى مثل الطرفية Terminal أو بيئة IDE أخرى مستقرة مثل VS Code، وأخبرني إذا استمرت المشكلة. فالمشكلة تحدث عادة عند استخدام بعض بيئات التطوير المتكاملة IDEs أو واجهات المستخدم التي تتعامل مع المدخلات والمخرجات بطريقة خاصة، لذا لدينا عدة حلول يمكن أن تعالج هذه المشكلة: يمكننا استخدام وحدة sys للتحكم في المخرجات ولضمان طباعة النصوص قبل طلب الإدخال كالتالي: import sys print("Hello world") print("نكتب اي شيء") sys.stdout.flush() n = input("how old are you? \n") كما يمكننا أيضا استخدام: end='' في نهاية print الأخير لمنع إضافة سطر جديد كالتالي: print("Hello world") print("نكتب اي شيء", end='') n = input("\nhow old are you? \n") أو يمكن دمج الطباعة مع الإدخال كالتالي: print("Hello world") print("نكتب اي شيء") n = input("how old are you? \n") print(f"السطور السابقة:\nHello world\nنكتب اي شيء") print(f"عمرك هو: {n}") أو كما قلنا في البداية فقط غيّر البيئة التي تعمل فيها، فكلّ الحلول السابقة هي حلول للمشكلة.
  5. إن كان سؤالك متعلقا بأحد الدروس في إحدى الدورات فأرجو في المرة القادمة طرحه في صندوق التعليقات أسفل الدرس وإن لم يكن كذلك فالخأ في الاستعلام بسيط لاحظ أنك كتبت UPDAT بدلا من UPDATE` وأيضا يوجد فاصلة منقوطة ; زائدة قبل ON UPDATE CASCADE لهذا عدّل الاستعلام بالشكل التالي: ALTER TABLE items ADD CONSTRAINT member_1 FOREIGN KEY(member_ID) REFERENCES users(userID) ON DELETE CASCADE ON UPDATE CASCADE;
  6. بالنسبة لرياكت يمكنك إيجاد قالب مباشر للبدء منه من خلال هذا الرابط: رياكت كروم starter على موقع غيتهاب. فمن خلال رياكت يمكنك بناء واجهة الإضافة واستخدامها لتطوير إضافة كروم فستحتاج إلى إعداد رياكت ليعمل داخل بيئة إضافة كروم لذا هناك بعض الخطوات التي يجب اتباعها مثل إعداد manifest.json ودمج تطبيق رياكت مع الإضافة أولا تقوم بإنشاء تطبيق رياكت كالمعتاد باستخدام create-react-app كالتالي: npx create-react-app chrome-extension يمكنك تسمية المشروع كما تشاء مثلا هنا أنا اخترت اسم chrome-extension. بعدها نقوم بالتعديل على ملف manifest.json قبل ذلك يجب أن ننشئ مجلد باسم public داخل مجلد المشروع في حالة لم يكن موجودا ونضيف داخله ملف json وهو الذي يحتوي على إعدادات الإضافة التالية: { "manifest_version": 3, "name": "My Chrome Extension", "version": "1.0", "description": "A Chrome extension using React", "action": { "default_popup": "index.html" }, "permissions": [] } لكن ريكات يستخدم Webpack للتجميع، لذلك ستحتاج إلى تعديل إعدادات Webpack لتوافق مع بيئة الإضافة ثم بناء المشروع من خلال استخدام الأمر التالي: npm run build وأما بالنسبة ل NodeJs فلا يمكن تشغيله مباشرة داخل إضافة كروم، لأن إضافات كروم تعمل فقط ضمن بيئة جافا سكريبت للمتصفح لكن يمكنك استخدام Node.js إذا كنت بحاجة إلى تشغيل خادم خارجي يتواصل مع الإضافة كال API أو لمعالجة البيانات بحيث يمكنك بناء خادم ودمجه مع إضافة كروم عبر الـ HTTP Requests باستخدام fetch أو axios.
  7. حسب ما فهمته فبما أنك تعتمد على NextJS فيمكنك استخدام حل بسيط يعتمد على تحويل النص المدخل في textarea إلى JSX بحيث تستخدم onChange لتتبع التغيرات في textarea وعندما يقوم المستخدم بكتابة المقالة، يتم التحقق من النص المدخل فيتحقق من وجود كلمة "phoenix" مثلا فإذا كانت الكلمة موجودة، يقوم بتحويلها إلى رابط محدد داخل النص بعدها يعرض النص المعدل في عنصر منفصل وهذا مثال على الجزئية التي تعالج الإشكالية: import Link from 'next/link'; const processText = (inputText) => { const blogName = 'phoenix'; const blogUrl = '/'; const parts = inputText.split(new RegExp(`(${blogName})`, 'gi`)); return parts.map((part, index) => { if (part.toLowerCase() === blogName.toLowerCase()) { return ( <Link key={index} href={blogUrl}> <a style={{ fontWeight: 'bold', color: 'blue' }}>{blogName}</a> </Link> ); } return part; }); }; لاحظ أنّ الدالة processText استعملتها هنا بحيث تأخذ النص كمدخل (inputText)، وتبحث عن كلمة "phoenix" داخل النص فإذا وجدتها، تقوم باستبدالها برابط موجه للصفحة الرئيسية مع تنسيق خاص استخدمت هنا اللون الأزرق وخطا عريضا وأما Link فهومستورد من مكتبة next/link ويستخدم لإنشاء الرابط الذي يؤدي إلى الصفحة الرئيسية.
  8. هذا يعتمد على كيفية استخدام تلك المشاريع، فواجهات المستخدم ليست ضرورية بشكل مطلق لمشاريع تعلم الآلة، لكنها مفيدة في حالات كثيرة فمثلا هي غير ضرورية لأبحاث الأكاديمية البحتة أو للنماذج المستخدمة في الخلفية فقط (مثل أنظمة التوصية) أو للمشاريع التي يستخدمها المطورون فقط لكنها قد تكون ضرورية في التطبيقات التجارية الموجهة للمستخدم النهائي أو المشاريع التي تتطلب تفاعلا مستمرا مع العملاء وفي حالات العرض التوضيحي للنموذج لذا فالأهمية تعتمد على: الجمهور المستهدف طبيعة المشروع متطلبات العمل
  9. لكلّ أداة مميزاتها وتتباين من خلال الإيجابيات والسلبيات بناء على تجربة الاستخدام ويرجع القرار النهائي إليك وإلى احتياجاتك الخاصة، فمثلا لو نبدأ ب D365 (Dynamics 365) فمن ناحية التكامل فهو يبدو لي متكاملا لكونه يشمل إدارة المحاسبة، الموارد البشرية، وإدارة العملاء وله واجهة مستخدم متطورة مع دعم قوي لمختلف العمليات التجارية لكن في نفس الوقت يشتكي الكثيرون منه بحجة التكلفة المرتفعة وغالبا ما يتطلب اشتراكا شهريا. لكن لو تتخذ من Power BI بديلا فصحيح أنه قوي في تحليل البيانات والتقارير ويمكنه الاتصال بمصادر بيانات متعددة لكنه يحتاج إلى نظام إدارة بيانات جيد للربط معه ولا أعتبره بديلا كاملا للأنظمة المدمجة مثل D365. فقد يقول البعض أنه إذا كانت لديك ميزانية محدودة وترغب في نظام مرن وقابل للتخصيص ف Power BI مع نظام ERP مفتوح المصدر يعتبر جيدا أما إذا كنت تبحث عن نظام متكامل ف D365 هو الخيار الأفضل على الرغم من التكاليف التي ذكرناها.
  10. لكلّ شخص أسلوبه الخاص به في التعلم فيمكنك الاستمرار في أسلوبك إن كنت ترى فيه فائدة ونتائج جيدة من ناحية الفهم والتطبيق، أما بالنسبة أنّك لا تطبّق بمفردك، فلا أحد بدأ بالتطبيق بمفرده من البداية، فالتعلّم مع المدرب ماهو إلا خطوة أولى فقط، ثم يمكنك فقط المحاولة فقط ابدأ بالتطبيق بمفردك ولا بأس إن أخطأت أو تعثرت فهذا هو الأصل، أن تخطئ وتتعلّم من أخطائك فكلّ المحترفين قبلك أخطأوا في أولى محاولاتهم ومن لا يخطئ لا يتعلّم. بالنسبة لمسار الأساسيات فهو يركّز أكثر على المفاهيم الأساسية في الدورة وفهمها ضروري لإتمام المشاريع لذا أنصح بالتركيز أكثر فيها. يمكنك الاستفادة من النقاش حول الطرق المثلى لدراسة الدورات للاستفادة منها من هنا:
  11. بما أن مساحة الخادم التي تستهلكها أكبر بكثير من حجم ملفات موقعك، وهناك زيادة ملحوظة في الاستهلاك، فهذا يشير إلى أن هناك عوامل أخرى تؤدي إلى استهلاك المساحة فقد تكون ملفات النسخ الاحتياطي أو ملفات السجلات تتزايد دون أن تلاحظ، مما يستهلك مساحة إضافية أو قد تكون هناك ملفات أو مجلدات مخفية غير ضرورية تستهلك المساحة والحل برأيي هو التحقق من ملفات النسخ الاحتياطي والسجلات عبر حذف النسخ الاحتياطية القديمة وملفات السجلات الكبيرة ثم فحص الملفات والمجلدات المخفية يمكنك استخدام أداة FTP أو لوحة التحكم لعرض وحذف الملفات غير الضرورية وإذا كنت تستخدم قاعدة بيانات، قم بتنظيفها وتحسينها وكآخر حلّ ممكن يمكنك الاتصال بدعم خدمة الاستضافة في حال كانت المشكلة تقنية من المصدر.
  12. الخطأ الموجود في الشيفرة يكمن في أنك كتبت الشرط الأخير بشكل خاطئ، فقد قمت بإضافة مسافة إضافية زائدة هكذا: if __name__ == ' __main__': وفي هذه الحالة بايثون لن يستطيع التعرف على أن البرنامج يتم تشغيله بشكل مباشر لذا نقوم بكتابتها بهذا الشكل الصحيح: if __name__ == '__main__': كذلك الدالة add_quotes تعمل بشكل صحيح في حال كان الإدخال نصا فقط ولكن يمكن تحسين الشرط ليشمل الحالات التي يتم فيها إضافة شيء غير نصي، فتقوم بإرجاع رسالة خطأ مناسبة بحيث يمكنك إضافة حالة للتعامل مع القيم الفارغة (Empty string) والتحقق من أن النص المضاف ليس فارغا كالتالي: def add_quotes(quotes): if isinstance(quotes, str) and quotes.strip(): quotes_list.append(quotes) else: return 'مدخل غير نصي'
  13. هذا قد يكون بسبب أن الإصدار الحديث من مكتبة TensorFlow و Keras ربما قد أزال أو عدّل على استخدام optimizers.experimental.AdamW لأنه في الإصدار الحديث يتم استخدام الإصدار المحدث من AdamW بالطريقة التالية: myoptimizer = tf.keras.optimizers.AdamW( learning_rate=0.001, weight_decay=0.004, beta_1=0.9, beta_2=0.999, epsilon=1e-07, amsgrad=False, name="AdamW", )
  14. عند تثبيتنا لحزمة في البيئة الافتراضية فسيتم تثبيتها فقط داخل تلك البيئة الافتراضية ولا يتم تثبيتها على مستوى النظام بشكل عام فالبيئة الافتراضية توفر مساحة معزولة، بحيث يمكنك تثبيت إصدارات مختلفة من الحزم والمكتبات دون التأثير على النظام أو المشاريع الأخرى، وهذا يمنحنا مرونة أكبر في إدارة الحزم الخاصة بكل مشروع على حدة. المشكلة التي قد تكون واجهتها أنّ البيئة الافتراضية لديك كانت تعتمد على مكتبات النظام ففي بعض الحالات، يمكن أن تعتمد البيئة الافتراضية على مكتبات النظام إذا لم تقم بإنشاء البيئة الافتراضية بشكل مستقل تماما أي في حال كان إعداد البيئة الافتراضية يعتمد على المكتبات المثبتة في النظام وهذا ممكن عن طريق استخدام خيار مثل --system-site-packages أثناء إنشاء البيئة فإن حذف مكتبة من النظام قد يؤثر على البيئة الافتراضية في هذه الحالة. لهذا أنصحك دائما بإنشاء البيئة الافتراضية باستخدام الأمر الصحيح دون السماح باستخدام مكتبات النظام كالتالي: python -m venv myenv ثم تفعيلها كالتالي: myenv\Scripts\activate وفي حال أردت توقيفها نعمل التالي: deactivate
  15. توجد عدة مشاكل في حزمة pytube لذا صحيح يمكنك الاستعانة بحزمة pytubefix تحميل حزمة pytubefix لكنها نفسها تحتوي على مشكلة أخرى وهي أنه لا يمكنك تنزيل فيديوهات عالية الجودة دون فقدان الصوت، ولكن يمكنك تنزيل الفيديو بشكل منفصل عن الصوت ثم تشغيلهما معا لاحقا وهذه الشيفرة تحقّق ذات الغرض: from pytubefix import YouTube import os def sanitize_filename(filename): return "".join(c if c.isalnum() or c in " ._-" else "_" for c in filename) def audio(thelink, path): try: yt = YouTube(thelink) print('Title:', yt.title) print('Views:', yt.views) yd = yt.streams.get_audio_only() yt_title = sanitize_filename(yt.title) yd.download(output_path=path, filename=f'{yt_title}.mp3') print('Finished downloading audio') except Exception as e: print(f"Error: {e}") def high(thelink, path): try: yt = YouTube(thelink) print('Title:', yt.title) print('Views:', yt.views) yt_title = sanitize_filename(yt.title) video_stream = yt.streams.filter().order_by("resolution").last() audio_stream = yt.streams.get_audio_only() video_filename = f'{yt_title}.mp4' audio_filename = f'{yt_title}.mp3' video_stream.download(output_path=path, filename=video_filename) audio_stream.download(output_path=path, filename=audio_filename) print('Finished downloading high resolution video and audio') except Exception as e: print(f"Error: {e}") def low(thelink, path): try: yt = YouTube(thelink) print('Title:', yt.title) print('Views:', yt.views) yd = yt.streams.get_lowest_resolution() yt_title = sanitize_filename(yt.title) yd.download(output_path=path, filename=f'{yt_title}.mp4') print('Finished downloading low resolution video') except Exception as e: print(f"Error: {e}") link_inp = input("Please Enter the link of the video: ") path_inp = input("Please Enter the download path: ") menu_inp = input('Select:\n1- Audio\n2- Highest Resolution\n3- Lowest Resolution\n') if menu_inp == '1': audio(link_inp, path_inp) elif menu_inp == '2': high(link_inp, path_inp) elif menu_inp == '3': low(link_inp, path_inp) else: print('Invalid input')
  16. قبل تحديث أيّ أداة نستخدمها يجب أولا أن نتأكد من أنّ جهاز الكمبيوتر لدينا يلبي متطلبات النظام لتثبيت وتشغيل Visual Studio 2022 فانتقالك من نسخة 2013 إلى 2022 قد يتسبّب في عدم اشتغال النسخة الحديثة وعملها معك إلا إن كان حاسوبك يقبل النسخة ويمكنك تحميلها والتعرف على متطلبات النظام من هنا: متطلبات النظام ل Visual Studio 2022. وبعد تثبيته يمكنك فتح مشاريعك القديمة لكنك قد تحتاج إلى تحديثها لتكون متوافقة مع الإصدار الجديد، وأنصحك دوما بالتحقق من وجود تحديثات جديدة من خلال الذهاب إلى "Help" ثم "Check for Updates" كي يكون دوما محدّثا.
  17. الإجابة الدقيقة تعتمد على أيّ دولة ترغب في الدراسة فيها، وحظوظ العمل وقطاع الشغل داخلها، والجامعات وهيكلتها فلكلّ جامعة مسار معين يتم اتباعه وتوجد أيضا الجامعات والمعاهد الخاصة لكن بشكل عام فالدراسة المباشرة في الأمن السيبراني ستركّز مباشرة على المهارات والمعرفة المتعلقة بالأمن السيبراني ويكون هنالك فرص للتعلم من خلال البرامج العملية والمشاريع المتعلقة بالاختراق الأخلاقي، تحليل البيانات، وغيرها. لكن لا يخفى عليك أنه قد تجد مفاهيم ناقصة مقارنة بدراسة تقنية المعلومات التي تشمل الفهم الشامل لتقنيات المعلومات، بما في ذلك الشبكات، قواعد البيانات، البرمجة، والأنظمة وبرأيي أنها تتيح مرونة أكبر في اختيار مجالات العمل، حيث يمكنك العمل في مجالات تقنية متنوعة قبل التخصص لكن قد يستغرق الأمر وقتا أطول للوصول إلى تخصص الأمن السيبراني. لهذا الأمر يرجع بالنسبة إليك، فإذا كان لديك إلمام بالمجال ووجدت نفسك متأكدا من رغبتك في العمل ومستعدّا يمكنك البدء مباشرة في هذا المجال. أما إذا كنت ترغب في اكتساب معرفة أوسع، فقد يكون من الأفضل البدء بتقنية المعلومات ثم التخصص لاحقا.
  18. توجد مكتبات مثل jsPDF وpdfmake توفر دعما أفضل للغات التي تكتب من اليمين إلى اليسار كالعربية، وهذه المكتبات تسمح بتسجيل الخطوط العربية وضبط اتجاه الكتابة بسهولة يمكنك محاولة تحسين استخدام @react-pdf/renderer عن طريق تسجيل الخطوط العربية بشكل صحيح واستخدام خصائص CSS مثل writingMode: 'rtl' لتحسين عرض النص العربي ففي بعض الحالات، قد تحتاج إلى استخدام مكتبات إضافية مثل bidi-js لمعالجة النص قبل عرضه في PDF فقد لا تجد مكتبة شاملة وكاملة لذا قد يتعين التعديل للتحسين من العرض.
  19. تحقق من أن لديك أحدث إصدار من TensorFlow ويكون متوافق مع إصدار بايثون لديك، يمكنك تحديثه باستخدام الأمر التالي: pip install --upgrade tensorflow إن استمرت المشكلة قم بإلغاء التثبيت ثم أعد تثبيته من خلال: pip uninstall tensorflow pip install tensorflow إذا كنت تستخدم GPU، تأكد من تثبيت CUDA و cuDNN بشكل صحيح ومتوافق مع إصدار TensorFlow كما أنصحك بإنشاء بيئة بايثون افتراضية جديدة وثبّت فيها جميع المكتبات المطلوبة هذا يمكن أن يساعد في تجنب تعارضات الإصدارات.
  20. المشكلة في تحويل الأرقام إلى نصوص يبدو أنك بدأت في التفكير بحلول تقليدية مثل استخدام for loop و if statements، ولكن كما ذكرت، هذا الحل سيكون غير عملي ومعقد، خاصة إذا كنت تتعامل مع نطاق واسع من الأرقام فالأرقام لها أنماط محددة ومن 1 إلى 19 لكل رقم اسم مختلف وأما من 20 إلى 99 لديك العشرات (twenty, thirty, forty,...)، والرقم الذي يتبعها 1 إلى 9 أيضا. في حين أنّ الأرقام من 100 إلى 999 تحتاج إلى التعامل مع المئات، ثم معالجة العشرات والوحدات بعد المئات. وللتفكير في حلّ للمشكلة هذه سيتطلب منك البحث عن الأنماط بدلا من التفكير في كل رقم على حدة، عليك ملاحظة أن هناك مجموعات من الأرقام التي تتكرر بنمط معين ثم تقسيم المشكلة إلى أجزاء صغيرة كأن تسأل: كيف ستحول الأرقام من 1 إلى 19؟ كيف ستحول العشرات مثل 20، 30، 40؟ كيف ستتعامل مع الأرقام التي تحتوي على مئات مثل 220 أو 345؟ وهنا يظهر العيب في استخدام الحلقات مع if statements لكل رقم يعني أنك ستحتاج إلى العديد من الشروط لكل رقم، وستكون الحلول غير مرنة مع الأرقام الكبيرة أو المستقبلية والفكرة تكمن في إيجاد طريقة لحل المشكلة بشكل عام وليس مجرد حل لكل حالة. يمكنك مراعاة استخدام الكائنات بحيث يمكنك تخزين الأرقام الأساسية (من 1 إلى 19 والعشرات) كقيمة نصية في كائن، بحيث تسترجع النص المقابل لكل رقم بسهولة بعدها يمكنك تقسيم الأرقام إلى مئات وعشرات ووحدات، ومعالجة كل جزء على حدة.
  21. توجد العديد من اللغات البرمجية والكثير من أطر العمل الجديدة، وعشرات المسارات المختلفة، ولكلّ مسار أو لغة أو إطار مجتمع من المبرمجين الدّاعم له، فلو افترضنا أنّك سمعت كلاما كلّ شهرين وظهر لك بأنّ المسار الذي تعلّمته طيلة الشهرين هو خاطئ فأنت لن تتعلّم أبدا! لا أريد منك أن تعتبر كلامي هذا تثبيطا لك، لكن ما قصدته هو أنّ اختيار المجال يكون قبل البدء في التعلم، من خلال دراسته جيدا وما ترغب في العمل به، وميولاتك وما تحبّ وما تفضّل، وليس كلام الناس والمبرمجين الآخرين، فلكلّ مبرمج تفضيلاته الشخصية التي سيدافع عنها لا محالة، وقد يكن الأمر بالنسبة لك لا يساعدك فتجد نفسك تسير في مسار خاطئ، لأنك اتبعت آراء الناس ولم تستمع لما تريده أنت. فالسر وراء الاستمرارية في البرمجة هو صبر وحبّ المبرمج لهذه المهنة، التي هي قبل أن تكون مهنة هي شغف. عليك أن تدرس سوق العمل، التحديثات الجديدة التي تطرأ في المجال، والكثير من العوامل، بما أنك في البداية، وإن طلبت آراء أو نصائح واستشارات فهو أمر جيد لكني أنصحك باتباع الآراء الموضوعية.
  22. بالنسبة لمسار الذكاء الاصطناعي في الأكاديمية يمكنك تفّحصه مباشرة من هنا: يمكنك مراجعة المقالات والأسئلة التي تمّ التطرق فيها للفروقات والمعلومات المختلفة المتضمنة هذا المسار من هنا: أو من هنا: https://academy.hsoub.com/artificial-intelligence/.
  23. بدلا من الاعتماد على مكتبة python-bidi، يمكنك تجربة مكتبات أخرى تدعم النصوص من اليمين إلى اليسار (RTL) على الأجهزة التي تعمل بمعمارية ARM، مثل مكتبة arabic_reshaper والتي تعمل على إعادة تشكيل النصوص العربية بشكل صحيح لتعمل مع مكتبة PIL و pyftsubset لرسم النصوص بشكل صحيح على الأجهزة المحمولة.
  24. الدالة KNNImputer تستخدم لملء القيم المفقودة في مجموعة البيانات والغرض منها هو تعويض القيم المفقودة في البيانات بحيث يتم استخدام خوارزمية الجار الأقرب k-nearest neighbors وللتبسيط فهي تبحث عن k وهي نقاط البيانات الأقرب للقيمة المفقودة وتستخدم متوسطها أو وسيطها لملء الفراغ وما يميزها أنها تحافظ على العلاقات بين المتغيرات وتعمل بشكل جيد مع البيانات غير الخطية.
  25. وعليكم السلام. import numpy as np data = np.array([1, 2, np.nan, 4]) print(np.isnan(data)) لاحظ في هذا المثال قمنا بإنشاء مصفوفة NumPy تحتوي على بعض القيم، بما في ذلك قيمة NaN أي غير عددية واستخدمنا الدالة np.isnan() للتحقق من وجود قيم NaN في المصفوفة، حيث ستعطينا مصفوفة Boolean تُظهر أن هناك قيمة NaN واحدة: [False False True False] ف NaN أو Not a Number هو تمثيل يستخدم للإشارة إلى القيم المفقودة أو غير المعرفة في البيانات وهو ببساطة إذا كان لدينا مجموعة من الأرقام وواحد منها غير معروف أو غير متوفر، يمكن استخدام NaN بدلا من تركه فارغ هذا للمساعدة في إدارة البيانات بشكل أفضل، حيث يمكننا حينها إجراء حسابات مع تجاهل القيم المفقودة.
×
×
  • أضف...