-
المساهمات
15389 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
403
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Mustafa Suleiman
-
Facebook يتطلب أن يكون عنوان Webhook مُشفر يبدأ بـ https://، بالتالي رابط Ngrok الذي تستخدمه يجب أن يكون رابط آمن (HTTPS)، وليس الرابط الذي يبدأ بـ http://. عند إضافة Webhook في إعدادات تطبيق Facebook، يقوم Facebook بإرسال طلب GET إلى عنوان Webhook لديك للتحقق، ويجب كتابة كود لمعالجة الطلب وإرجاع hub.challenge. أيضًا تأكد من أن قيمة $_GET['hub_mode'] و$_GET['hub_verify_token'] يتم التحقق منها بشكل صحيح. if ($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['hub_mode']) && $_GET['hub_mode'] === 'subscribe') { if ($_GET['hub_verify_token'] === $verify_token) { echo $_GET['hub_challenge']; exit; } else { echo "رمز التحقق غير صحيح"; exit; } } ويجب أن تكون قيمة $verify_token في الكود هي نفسها التي أدخلتها في إعدادات Webhook في تطبيق Facebook. لاحظت أنك تستخدم الرأس ngrok-skip-browser-warning: 1، لتخطي تحذير المتصفح عند الوصول إلى رابط Ngrok من متصفح الويب، لكنه ليس ضروريًا عند التعامل مع Facebook، من الأفضل إزالة أي رؤوس HTTP مخصصة عند التعامل مع Facebook. إن استمرت المشكلة حاول فحص سجلات Ngrok أي الـ logs، فواحدة من مميزات Ngrok هي إمكانية مشاهدة الطلبات التي تمر عبره. افتح متصفح الويب وانتقل إلى http://localhost:4040، وستجد لوحة تحكم تظهر جميع الطلبات الواردة والصادرة، تفقد طلبات Facebook تصل إلى خادمك أم لا. في حال لم تكن الطلبات تصل، فربما هناك مشكلة في تكوين Ngrok أو في إعدادات Firewall على جهازك. وتستطيع استخدام أدوات مثل Postman لإرسال طلبات اختبارية إلى Webhook والتأكد من أنه يعمل بشكل صحيح. أي إرسال طلب GET يحتوي على البارامترات المطلوبة (hub.mode, hub.challenge, hub.verify_token) وتحقق من الاستجابة. ستجد تفصيل هنا من المستند الرسمي: Webhooks from Meta Getting Started
-
إذن أنت تستخدم إصدار حديث، بدءًا من الإصدارات الحديثة من React Query (TanStack Query v5)، تم تغيير isLoading إلى isPending، ستجد تفصيل هنا: status: loading has been changed to status: pending and isLoading has been changed to isPending and isInitialLoading has now been renamed to isLoading
- 3 اجابة
-
- 1
-
-
تفقد أولاً هل يوجد خطأ أم لا، من خلال تعديل useLoginMutation، هل يتم طباعة رسالة خطأ؟ export const useLoginMutation = () => { return useMutation({ mutationFn: async (data) => await loginApi(data), onSuccess: (data) => { localStorage.setItem("token", data.token); }, onError: (error) => { console.error(error); } }); }; إن لم تجد خطأ، تأكد من استدعاء useLoginMutation في المكون الرئيسي، واستخرج isLoading و mutate: const { mutate, isLoading } = useLoginMutation(); ثم استيراد ScaleLoader بشكل صحيح: import { ScaleLoader } from "react-spinners"; والتأكد من أن مكتبة React Query تم إعدادها بشكل صحيح من خلال تغليف التطبيق بـ QueryClientProvider: import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; const queryClient = new QueryClient(); function App() { return ( <QueryClientProvider client={queryClient}> {/* باقي مكونات التطبيق */} </QueryClientProvider> ); } إن استمرت المشكلة حاول إضافة تأخير في دالة loginApi: export const loginApi = async(data) => { try { // هنا await new Promise(resolve => setTimeout(resolve, 1000)); const res = await axios.post( `${process.env.REACT_APP_USER_URL}/login`, data ); return res.data; } catch (error) { throw error.response?.data?.message || 'An error occurred'; } } إن استمرت قم بإضافة console.log للتحقق من قيمة isLoading: console.log('Loading state:', isLoading);
- 3 اجابة
-
- 1
-
-
ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم أسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
-
أسهل طريقة من خلال PyCox وهي مكتبة بايثون مبنية على أساس PyTorch ومخصصة لتحليل البقاء، حيث تحتوي على تنفيذ لنموذج DeepHit، لتسهيل عملية تدريبه واستخدامه. تثبيت المكتبة أولاً: pip install pycox ثم استيراد نموذج DeepHit واستخدامه كما يلي: import torch from pycox.models import DeepHit from pycox.models.loss import DeepHitLoss model = DeepHit(...) # حدد المعلمات المناسبة للنموذج loss = DeepHitLoss() optimizer = torch.optim.Adam(model.parameters(), lr=1e-3) model.fit(dataloaders, loss, optimizer, epochs=100, ...) ستجد تفصيل في المستند الرسمي: https://github.com/havakv/pycox أيضًا يوجد على GitHub أمثلة لاستخدام النموذج، تفقد المستودعات التالية: https://github.com/search?q=deep-hit&type=repositories وللعلم يوجد lifelines وهي مكتبة بايثون شهيرة لتحليل البقاء، رغم أنها تركز بشكل أكبر على النماذج التقليدية مثل Cox Proportional Hazards، إلا أنها مفيدة كخلفية لدراسة وتحليل البيانات قبل تطبيق نماذج عميقة.
- 4 اجابة
-
- 1
-
-
للتوضيح ميثود train_test_split في مكتبة scikit-learn ليست مقتصرة على استقبال أربعة متغيرات فقط، فتلك الميثود مرنة جداً وتسمح لك بتقسيم البيانات بعدة طرق. ونستخدمها لتقسيم مجموعة البيانات إلى مجموعتين رئيسيتين، مجموعة التدريب Training set لتدريب نموذج الذكاء الاصطناعي، ومجموعة الاختبار Testing set لتقييم أداء النموذج بعد التدريب. المعاملات الأساسية هي تمرير عدد من المصفوفات مثل المميزات Features والأهداف Targets، حيث الصيغة الأساسية هي كالتالي: from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, ...) X مصفوفة المميزات وy مصفوفة الهدف. المعاملات الإضافية أولها test_size لتحديد نسبة بيانات الاختبار، وتقبل أن تكون قيمة عشرية (مثل 0.2 للنسبة 20%) أو عدد صحيح يمثل عدد العينات. train_test_split(X, y, test_size=0.25) و train_size لتحديد نسبة بيانات التدريب بنفس طريقة test_size. ويوجد random_state لتحديد رقم ثابت لضمان إمكانية إعادة التقسيم بنفس الطريقة في كل مرة تُشغّل فيها الكود. train_test_split(X, y, random_state=42) shuffle لتحديد هل البيانات سيتم خلطها قبل التقسيم، والقيمة الافتراضية هي True. train_test_split(X, y, shuffle=False) أيضًا stratify للحفاظ على توزيع الفئات في كل من مجموعتي التدريب والاختبار، وذلك مفيد خاصة في مشاكل التصنيف حيث تكون الفئات غير متوازنة. train_test_split(X, y, stratify=y) وتستطيع تمرير أكثر من مصفوفة واحدة للتقسيم في نفس الوقت، حيث تقوم الدالة بتقسيم كل مصفوفة بنفس الطريقة واسترجاعها بشكل منفصل. X_train, X_test, y_train, y_test, z_train, z_test = train_test_split(X, y, z, test_size=0.2)
- 5 اجابة
-
- 1
-
-
التنبوء عملية توقع قيمة مستمرة حسب بيانات الإدخال المتاحة، والفائدة منه مثلاً التنبؤ بكميات مثل أسعار الأسهم، درجات الحرارة، حجم المبيعات، أو وقت الوصول. وتشمل نماذج التنبوء الانحدار الخطي، الانحدار اللوجيستي (في بعض الحالات)، أشجار القرار، والشبكات العصبية. أما التصنيف يهدف إلى تصنيف البيانات إلى فئات أو مجموعات محددة مسبقًا، بمعنى في المهام التي تتطلب تحديد فئة معينة، مثل تصنيف الرسائل الإلكترونية إلى سبام أو غير سبام، التعرف على أنواع الحيوانات في الصور، أو تصنيف الأوراق المالية إلى شراء أو بيع. والنماذج تشمل الانحدار اللوجستية، آلات الدعم الناقل (SVM)، أشجار القرار، والغابات العشوائية، والشبكات العصبية. أما الاحتمالات تتعلق بتحديد مدى احتمالية انتماء بيانات معينة إلى فئة معينة، وذلك لتوفير تقديرات احتمالية بدلاً من تعيين فئة محددة، مما يسمح بفهم درجة اليقين في التصنيفات والتنبؤات، أي توفير معلومات إضافية حول درجة اليقين في التصنيفات، للمساعدة في اتخاذ قرارات أكثر دقة وتشمل النماذج البايزية، الشبكات العصبية مع طبقات إخراج احتمالية (مثل دالة Softmax في التصنيف متعدد الفئات)، وأشجار القرار التي توفر احتمالات نسبية لكل فئة. بالتالي نوع المخرجات هو التنبوء: قيمة عددية مستمرة. التصنيف: فئة أو تصنيف محدد. الاحتمالات: تقديرات احتمالية لكل فئة ممكنة.
- 2 اجابة
-
- 1
-
-
هل يعمل الموقع على الهاتف؟ وهل نفس الشبكة تتصل من خلالها على الهاتف والحاسوب؟ وهل هناك VPN يعمل على الحاسوب، وهل قمت بتجربة متصفح آخر؟ حاول حذف الملفات المؤقتة أولاً من خلال الضغط على الأيقونة التالية بجانب عنوان الموقع ثم اختيار cookies and site data: ثم اختر manage وسيظهر لك البيانات وبجانبها أيقونة سلة مهملات قم بالضغط عليهم جميعًا ثم أعد تحديث الموقع. إن استمرت المشكلة حاول استخدام البرنامج التالي بتثبيته وتشغيله ثم تصفح الموقع. https://1111-releases.cloudflareclient.com/win/latest
-
لا مشكلة في ذلك، عند إغلاق نظام الويندوز يقوم بعمليات ممنهجة لحفظ البيانات قبل الإغلاق ويحذرك من وجود برنامج يعمل، في حال غير مهم بالنسبة لكِ تختارين shutdown أو المتابعة في عملية الإغلاق. في حال وجود برامج هامة قيد التشغيل، تأكدي من حفظ ما كنتي تعملين عليه ثم الإغلاق، حيث تستطيعي التراجع من خلال إختيار إلغاء الأمر، ولكن ذلك لا يحدث دائمًا فأحيانًأ يتم غلق النظام.
- 2 اجابة
-
- 1
-
-
يدعم كلاهما لا مشكلة، فهو يعتمد على jupyter. لكن يجب تفعيل الإنترنت لـ kaggle-notebook من خلال زر internet on: ولتفعيله يجب تسجيل الدخول ثم تفعيل حسابك عن طريق الهاتف Phone verification ستجد ذلك في إعدادات الحساب. في حال لم يتم تفعيله قم بإنشاء notebook جديد.
- 3 اجابة
-
- 1
-
-
وعليكم السلام ورحمة الله مرهف، نعتذر لك على التأخير، سيتم الرد عليك إن شاء الله لا تقلق بخصوص ذلك، أحيانًأ يوجد ضغط على مركز المساعدة بسبب كثرة الرسائل. تستطيع إرسال رسالة كتذكير مع تفصيل رسالتك لتحصل على رد مناسب، ثم الإنتظار قليلاً لحين الحصول على رد. أيضًا تستطيع استبدال الدورة بدورة أخرى لو أردت، وفي حال تواجه مشكلة في الدورة الحالية تستطيع أسفل الدروس وسيتم مساعدتك بالتفصيل.
-
تلك حقوق قانونية تحمي الأعمال الإبداعية من النسخ أو التعديل أو التوزيع دون إذن من صاحب الحقوق، تشمل النصوص، الصور، الموسيقى، الأفلام، البرامج، وغيرها، وتُنشأ تلك الحقوق تلقائيًا بمجرد إنشاء العمل، دون الحاجة إلى تسجيل رسمي في معظم الدول. ثانياً، حقوق النشر تنطبق تلقائياً عند إنشاء العمل، لكن التسجيل الرسمي يساعد في حماية أقوى، وبالنسبة للمواقع، يجب على العميل تأمين حقوق المحتوى الخاص به، مع استخدام إشعار حقوق النشر لإعلام الآخرين بالملكية. وللعلم يوجد فرق بين حقوق النشر والتسجيل التجاري، فحقوق النشر تخص الملكية الفكرية للمحتوى مثل النصوص والصور، بينما التسجيل التجاري إجراء قانوني لتأسيس نشاط تجاري. ولن تحتاج إلى فعل شيء من قبلك أنت، سوى تضمين إشعار حقوق النشر في تذييل مواقع الويب التي تقوم بتطويرها لعملائك، ويجب أن يتضمن الإشعار اسم مالك حقوق النشر وسنة الإنشاء وعبارة "جميع الحقوق محفوظة"، ولا يُشترط قانونًا، لكن وضع إشعار مثل "© اسم الشركة 2024" يُعد تحذيرًا للآخرين بعدم الاستخدام غير المصرح به، ودليلًا على المطالبة بالحقوق في حال النزاع. أيضًا عليك الإلتزام بالتراخيص، فلو استخدمت صورًا من مواقع مثل Unsplash، يجب الالتزام بترخيص الصورة (بعضها مجاني مع ذكر المصدر). فمثلاً المحتوى الذي يتم نشره على جوجل، يحق لصاحب المحتوى الأصلي الإبلاغ عمن يسرق محتواه وسيتم معاقبته من قبل جوجل، وفي بعض الدول مثل الولايات المتحدة، متاح تسجيل حقوق النشر في هيئة مختصة لتعزيز الحماية القانونية. أما لو الموقع يهدف إلى تقديم خدمات تجارية أو بيع منتجات، فسيحتاج مالكها إلى التسجيل في السجل التجاري، وللتوضيح السجل التجاري إجراء منفصل عن حقوق النشر، ويتعلق بشرعية ممارسة النشاط التجاري وفق قوانين الدولة.
- 3 اجابة
-
- 1
-
-
لا عليك، المعاملات المالية يتم مناقشتها من خلال مركز المساعدة، أرجو مراسلتهم بما تريده وسيتم الرد عليك وتوضيح الأمر لك.
-
ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم أسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
-
IterativeImputer يعتمد على نماذج إحصائية كالانحدار الخطي أو أشجار القرار لتقدير القيم المفقودة، وتلك النماذج تُنتج توقعات مستمرة (أرقام عشرية)، حتى لو كانت البيانات الأصلية منفصلة أي أعداد صحيحة. بمعنى لو النموذج يتنبأ بقيمة بين 1 و2 (مثل 1.8)، فسيُدخلها كقيمة عشرية بدلًا من تقريبها إلى 2. والسلوك متوقع لأن IterativeImputer مصمم للتعامل مع البيانات العددية المستمرة بشكل افتراضي، لكن لو متغيرك يمثل فئات أو أعدادًا صحيحة (مثل عدد التطابقات الجينية)، فإن القيم العشرية لا معنى لها وذلك يعني مشكلة في النموذج أو طريقة التعامل مع البيانات. بالتالي لو المتغير يجب أن يكون عددًا صحيحًا، فالقيم العشرية غير منطقية وتشوّه تفسير البيانات. ولو المتغير يمثل درجة مستمرة، فتكون القيم مقبولة، لكن يُفضَّل التحقق من سياق البيانات فهي الأساس. أي تفقد هل المتغير يجب أن يكون، فئويًا/منفصلًا، كـ 0 = لا يوجد تطابق، 1 = تطابق جزئي، 2 = تطابق كامل. أو عدديًا مستمرًا مثل نسبة التطابق الدقيقة. في الحالة الأولى استخدم SimpleImputer مع إستراتيجية most_frequent (إدخال المنوال) بدلًا من IterativeImputer. في الثانية استخدم IterativeImputer ثم قَرِّب النتائج إلى أقرب عدد صحيح: from sklearn.impute import IterativeImputer import numpy as np imputer = IterativeImputer() data_imputed = imputer.fit_transform(data) data_imputed = np.round(data_imputed).astype(int)
- 3 اجابة
-
- 1
-
-
لو ستقوم بالأمر بمفردك ستحتاج إلى أن تصبح مطور Full-stack بمعنى قادر على تطوير الواجهة الأمامية والخلفية، وكبداية ستتعلملغات الويب وهم HTML, CSS, JS. بمعنى الواجهة الخلفية أو Back-End تعني الجزء من موقع الويب أو التطبيق الذي لا يراه المستخدم، ويشمل ذلك الخوادم والبيانات والبرامج التي تعالج الطلبات وترسل ردودًا للمستخدمين. والواجهة الأمامية Front-End هو الجزء من موقع الويب أو التطبيق الذي يراه المستخدم، ويتضمن HTML وCSS وJavaScript، والتي يتم استخدامها لإنشاء الواجهة الرسومية للموقع أو التطبيق. بعد ذلك تعلم إطار عمل Full-stack يوفر لك تطوير الواجهة الأمامية والخلفية معًا، وبما أنك في دورة بايثون فلديك إطار جانغو وهو إطار قوي يوفر لك إنشاء الواجهة الأمامية من خلال القوالب الواجهة الخلفية (الخادم) أي إنشاء API's من خلال الأدوات التي يوفرها ومنها النماذج models ودعم قواعد البيانات المختلفة، والمصادقة Authentication. ستحتاج إلى قراءة ما يلي:
-
أثناء تعلم الأساسيات يجب التطبيق على تمارين بسيطة لتوظيف ما تعلمته وتثبيته وليس الإنتظار حتى النهاية. بعد ذلك ستحتاج إلى توظيف ما تعلمته في الأساسيات من خلال مشاريع عملية، ابحث على اليوتيوب عن "مشاريع بايثون للمبتدئين" أو python projects for beginners أثناء التطبيق العملي عليك العمل على تطوير مهارة التفكير المنطقي لديك بحل المسائل البرمجية من خلال مواقع مثلHackerrank أو codewars. أي عليك الجمع بين حل المسائل والتطبيق على المشاريع، وقبل حل المسائل البرمجية، عليك تعلم أساسيات هياكل البيانات والخوارزميات أي مفاهيم بسيطة من الـ DSA مثل: Arrays وطرق التعامل معها. Strings والخوارزميات الأساسية عليها مثل عكس النصوص، البحث عن عنصر. Time Complexity بشكل بسيط مثل فهم الفرق بين O(n) و O(n^2). وتجنب التطبيق على المشاريع الصغيرة دائمًا مثل تطبيق Todo list، ذلك جيد في البداية للتدرج في الاستيعاب، لكن عليك الإنتقال من تلك المرحلة والتطبيق على مشاريع كاملة، ولا تكتفي بالنسخ واللصق أو النقل من الشرح في الفيديو، عليك استيعاب ما تقوم بكتابته ولماذا تقوم به، وأيضًا حاول التغيير قليلاً في المشروع فذلك يجبرك على التركيز في الكود والتطبيق.
-
قبل التعويض، حدد الأعمدة التي من نوع int وfloat: import pandas as pd int_cols = df.select_dtypes(include=['int']).columns.tolist() float_cols = df.select_dtypes(include=['float']).columns.tolist() numerical_cols = int_cols + float_cols ثم استخدم IterativeImputer على الأعمدة الرقمية وسيحول جميعها إلى float مؤقتًا: from sklearn.experimental import enable_iterative_imputer from sklearn.impute import IterativeImputer imputer = IterativeImputer(random_state=42) df_imputed = pd.DataFrame( imputer.fit_transform(df[numerical_cols]), columns=numerical_cols ) ثم إعادة تحويل الأعمدة إلى أنواعها الأصلية، بتقريب القيم العشرية إلى أقرب عدد صحيح لو كان ذلك مناسب للبيانات. df_imputed[int_cols] = df_imputed[int_cols].round().astype(int) ولو لديك أعمدة غير رقمية (فئوية)، أعد دمجها، وهنا افترض أن df يحتوي أيضًا على أعمدة فئوية مثل 'category_col'. df_final = pd.concat([ df_imputed, df[['category_col']] ], axis=1)
- 6 اجابة
-
- 1
-
-
عليك إنشاء قائمتين لكل عمود، فلو لديك 3 أعمدة رقمية: العمود 1 (مثل العمر): min=0, max=100 العمود 2 (مثل الراتب): min=1000, max=10000 العمود 3 (مثل درجة الحرارة): min=-20, max=50 فستكون القوائم: min_values = [0, 1000, -20] max_values = [100, 10000, 50] ثم تحديد القيم ديناميكيًا، ففي حال الأعمدة كثيرة مثل 60 عمودًا، فتستطيع حساب الحدود لكل عمود تلقائيًا باستخدام الرباعيات أو القيم الدنيا/القصوى: import pandas as pd min_values = df[numerical_cols].quantile(0.05).tolist() max_values = df[numerical_cols].quantile(0.95).tolist() لاحظ حساب الحد الأدنى كـ 5% لكل عمود ثم حساب الحد الأقصى كـ 95% لكل عمود. ثم تمرير القوائم إلى IterativeImputer from sklearn.experimental import enable_iterative_imputer from sklearn.impute import IterativeImputer imputer = IterativeImputer( min_value=min_values, max_value=max_values, estimator=RandomForestRegressor(), max_iter=50, random_state=42 ) df_imputed = imputer.fit_transform(df[numerical_cols]) ولو الأعمدة غير مرتبة بنفس ترتيب القوائم min_values و max_values، ستُطبَّق القيم الخاطئة، لذا علينا التأكد من أن ترتيب الأعمدة في df[numerical_cols] مطابق تمامًا لترتيب القيم في min_values و max_values. numerical_cols = df.select_dtypes(include=['number']).columns.tolist() min_values = df[numerical_cols].quantile(0.05).values max_values = df[numerical_cols].quantile(0.95).values وفي حال بعض الأعمدة لا تحتاج إلى حدود (مثل الأعمدة التي يمكن أن تأخذ أي قيمة)، عليك استخدم None أو np.inf: import numpy as np min_values = [0, None, -np.inf] max_values = [100, np.inf, 50] حيث العمود الثاني والثالث بلا حدود دنيا، والعمود الثاني بلا حدود قصوى.
- 6 اجابة
-
- 1
-
-
ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم أسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
-
أثناء التثبيت أرجو إختيار default locale إن استمرت المشكلة، قم بتجربة تغيير ذلك إلى English, United States بدلاً من default locale.
-
الأهم هو الأساسيات، فالمكتبات قائمة على اللغة البرمجية وهي بايثون، بالتالي إتقان أساسيات اللغة مثل الهياكل البيانية (القوائم، القواميس، المجموعات)، التحكم بالتدفق (الشروط، الحلقات)، الدوال، والكائنات البرمجية Classes بمعنى OOP. بعد تخطي تلك المرحلة وتنفيذ مشاريع متوسطة المستوى، تستطيع البحث عن أفضل الممارسات عند كتابة كود بايثون Python best practices وكيفية عمل refactoring للكود. ثم ابدء في حل المسائل البرمجية من خلال منصات مثل LeetCode أو HackerRank. بعد ذلك تقوم بالتعمق في تعلم المكتبات مثل pandas وفهم الميثودز التي توفرها المكتبة بشكل عميق لتتمكن من استخدامها كما ينبغي. وبالطبع تنفيذ مشاريع صغيرة باستخدام Pandas لتحليل مجموعات بيانات مختلفة، للتطبيق على المفاهيم وتثبيت المعلومات، ثم زيادة صعوبة المشاريع شيئًا فشيئًا. ثم اطلع على مشاريع مفتوحة المصدر على منصات مثل GitHub، ودراسة كيفية تنظيم الكود وطريقة كتابته وربطه ببعضه البعض، كتابة التوثيق، واستخدام الـ Design patterns. بمعنى قم بتحليل كود من مكتبات شهيرة، ففهم كيفية كتابة مكتبات ووحدات برمجية مستخدمة على نطاق واسع يوفر رؤى قيمة حول أفضل الممارسات.
- 5 اجابة
-
- 1
-
-
المشكلة في السطر التالي: data_train[original_dtypes.select_dtypes(include=['int64']).columns] = original_dtypes.select_dtypes(include=['int64']).astype(int) فما تريده هو تحويل الأعمدة التي كانت في الأصل من نوع صحيح int64 مرة أخرى إلى أعداد صحيحة بعد الإكمال، ولكن ما يتم في الكود هو تعيين أنواع البيانات الأصلية المحولة إلى أعداد صحيحة بدلاً من تحويل بيانات الأعمدة نفسها. بمعنى original_dtypes.select_dtypes(include=['int64']).columns يجلب أسماء الأعمدة التي كانت في الأصل من نوع int64. original_dtypes.select_dtypes(include=['int64']).astype(int) يعمل على تحويل أنواع البيانات التي تكون كائنات dtype إلى أعداد صحيحة، وذلك غير منطقي لأنك تريد تحويل القيم في الأعمدة إلى أعداد صحيحة وليس أنواع البيانات. عليك تطبيق دالة astype(int) مباشرة على بيانات تلك الأعمدة وليس على معلومات أنواع البيانات. data_train = ordinalencoder_data(data_train) original_dtypes = data_train.dtypes.copy() imputer = IterativeImputer(max_iter=5, random_state=42, initial_strategy='mean') imputer_data = imputer.fit_transform(data_train) data_train = pd.DataFrame(imputer_data, columns=data_train.columns) int_columns = original_dtypes[original_dtypes == 'int64'].index data_train[int_columns] = data_train[int_columns].astype(int) print(data_train.info())
- 6 اجابة
-
- 1
-
-
المشكلة تعني الاستيراد من نفس الملف admin.py حيث أنك كتبت بداخله التالي: from .admin import CustomUserAdmin أرجو حذف ذلك السطر، فلا نستطيع الاستيراد من نفس الملف ونقل CustomUserAdmin إلى ما بعد الاستيرادات مباشرًة، لكي تتمكن من استخدام admin.site.register(User, CustomUserAdmin)
- 6 اجابة
-
- 1
-