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

Mustafa Suleiman

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

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

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

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

    403

كل منشورات العضو Mustafa Suleiman

  1. في pandas، توجد دوال مُخصصة لتسهيل معالجة البيانات بشكل فعال، ومنها select_dtypes وapply(). حيث select_dtypes تسمح لك بفلترة (تصفية) أعمدة الـ DataFrame حسب نوع البيانات dtypes، بالشكل التالي: df.select_dtypes(include=[int, float], exclude=[object]) include اختيار الأعمدة ذات الأنواع المحددة (مثل int، float، datetime) و exclude استبعاد الأعمدة ذات الأنواع المحددة. import pandas as pd data = {'A': [1, 2], 'B': ['x', 'y'], 'C': [3.0, 4.0]} df = pd.DataFrame(data) numeric_df = df.select_dtypes(include='number') أما apply() تطبق دالة مُخصصة على جميع الصفوف أو الأعمدة (حسب المحور axis). df.apply(func, axis=0) df.apply(func, axis=1) كالتالي: df['sum'] = df.apply(lambda row: row.sum(), axis=1) ودوال pandas مثل select_dtypes وapply() تكون أسرع بشكل عام لأنها مبنية على تحسينات مُستوى منخفض مثل C أو NumPy. أما الحلقات التقليدية (for/if) في Python تكون أبطأ، خاصة مع البيانات الكبيرة، لأنها تُنفذ بشكل تسلسلي ولا تستفيد من تحسينات المتجهات vectorization.
  2. أرجو توضيح ما المقصود بالمتابعة، تقصد طريقة الدراسة الصحيحة؟
  3. أرجو الإنتظار قليلاً ومن المفترض أن تجدها في حسابك من خلال تبويب دوراتي، وعند الضغط عليه ستجد الدورات المشترك بها كالتالي: في حال لم تجدها أرجو التواصل مع مركز المساعدة وسيتم حل المشكلة لك.
  4. لغات الويب هي HTML, CSS, JS حيث HTML توفر لك تطوير هيكل الصفحة من خلال العناصر الخاصة بها، ثم تنسيق الهيكل من خلال لغة CSS من حيث المظهر وتموضع العناصر في الصفحة كما تريد حسب التصميم الذي تنوي تنفيذه. ثم تأتي جافاسكريبت لإضافة تفاعلية للصفحة بمعنى برمجة ما الذي سيحدث عن النقر على زر معين في الصفحة مثلاً، وأيضًا تمكننا من إنشاء مواقع ديناميكية غير ثابتة بمعنى التواصل مع الخادم والحصول على بيانات وتغيير محتوى الصفحة فلا يظل ثابت، فمثلاً عند نشر سؤالك هنا أنت قمت بالإضافة إلى الموقع أي أضفت محتوى وذلك معنى موقع ديناميكي محتواه غير ثابت. بعد تعلم ما سبق ستحتاج إلى تعلم إطار أو مكتبة للواجهة الأمامية مثل React. ولو أردت إنشاء واجهة خلفية للموقع ستحتاج إلى تعلم Node.js وهي تعتمد على جافاسكريبت أيضًا. مع العلم أنه يوجد لغة PHP أيضًا لتطوير مواقع الويب وإطار لارافل الخاص بها، لكن ستحتاج إلى تعلم HTML, CSS, JS أيضًا قبل تعلمها، فهي لغة واجهة خلفية بالأساس.
  5. الدورة متاحة لك مدى الحياة والتحديثات الخاصة بها كذلك، والإختبارات تستطيع التقدم لها متى تجهزت لذلك لا مشكلة. والدورة مقسمة إلى مسارات بشكل ممنهج وكل مسار به مجموعة من الأقسام وكل قسم به دروس، أي يجب دراستها بالترتيب، وتنفيذ التطبيقات العملية التي بها. إن كان هناك شيء غير واضح لك أرجو الاستفسار عنه.
  6. عليك استخدام نوع البيانات الصالحة للقيم المفقودة في Pandas (Int32)، بمعنى استخدام Int32 بدلاً من float من خلال dtype='Int32' (بـ I كبيرة) لإنشاء عمود صحيح مع دعم القيم المفقودة. واستبدال np.nan بـ pd.NA من pandas لتمثيل القيم المفقودة في الأعمدة من النوع الصحيح. وإزالة التحويل إلى float، فلم يعد هناك حاجة للتحويل إلى float لأن Int32 يدعم القيم المفقودة مباشرةً. data_encoded = data_train.copy() for col in data_encoded.select_dtypes(include=['object']).columns: mask = data_encoded[col].isna() temp_data = data_encoded[col].fillna('missing') le = LabelEncoder() encoded_data = le.fit_transform(temp_data) encoded_series = pd.Series(encoded_data, dtype='Int32') encoded_series[mask] = pd.NA data_encoded[col] = encoded_series ويجب أن يكون تأكد إصدار Pandas لديك هو 0.24 أو أحدث لدعم الأنواع الصحيحة القابلة للفقدان، وفي حال تريد التعامل مع القيم المفقودة كفئة منفصلة (بدلاً من حفظها كـ NaN)، تستطيع حذف الخطوة التي تستخدم mask و pd.NA.
  7. الأمر بحاجة إلى توضيح عملي، ابحث على اليوتيوب عن "حل مشكلة certificate chain not trusted problem in SQL Server"
  8. repair تعني أنك قمت بالتثبيت من قبل، أرجو إعادة تشغيل حاسوبك، ثم البحث في شريط البحث بالويندوز بالأسفل عن SSMS إن لم يظهر شيء ابحث عن SQL Server Management Studio ثم انقر عليه للتشغيل.
  9. إذن المشكلة في تحديث الحالة state للمكون Header، في الجزء الخاص بعملية تسجيل الدخول يجب تحديث كائن المستخدم في contexts، ثم إعادة التوجيه للصفحة الرئيسية من خلال next/router. وفي كائن Header يتم قراءة الحالة التي تم تحديثها. في حال استمرت المشكلة أرفق مجلد المشروع لتفقده.
  10. الفكرة ببساطة هي حفظ الملفات والبيانات على خوادم بعيدة مُتاحة عبر الإنترنت، بدلًا من تخزينها على أجهزتك المحلية (مثل الهارد ديسك)، ويتميز بإمكانية الوصول من أي مكان، مشاركة الملفات بسهولة، وتقليل تكاليف الصيانة، ويعتمد على تقنيات مثل الخوادم الافتراضية والتوزيع الجغرافي لضمان السرعة والاستمرارية. والخوادم المستخدمة في ذلك هي خوادم مادية Dedicated Servers، بمعنى أجهزة فعلية مملوكة أو مؤجرة من مراكز بيانات. أو خوادم افتراضية VPS/Cloud Servers، أي موارد مُجزأة من خوادم كبيرة تُقدمها شركات مثل (AWS، Google Cloud، Microsoft Azure). أو التخزين الموزع مثل نظام CDN لتسريع الوصول للبيانات عالميًا، بمعنى وجود سيرفرات في بلاد مختلفة حول العالم لتسريع الوصول للبيانات للمستخدمين في تلك المناطق. والأمر ليس بتلك السهولة، فذلك بحاجة إلى مركز بيانات ضخم لتصبح لديك منصة تخزين سحابي، ألقي نظرة على التالي: ذلك هو مركز البيانات الذي أتحدث عنه، وبالطبع الأمر بحاجة إلى مهندسي برمجيات متخصصين في قواعد البيانات وفي الـ DevOPS، بالإضافة إلى البرمجة.
  11. السؤال غير واضح أرجو توضيحه. الأمر لا يتم من هنا في الأكاديمية، بل من خلال منصة Firebase، أو من خلال المنصة التي تستخدمها فهي المسؤولة عن إرسال الرمز لك، سواء برمجيًا أو من خلال الواجهة الخاصة بالمنصة مثل التطبيق أو موقع الويب.
  12. قم بتنفيذ: jupyter contrib nbextension install --user ثم: pip install jupyter_nbextensions_configurator ثم: jupyter nbextensions_configurator enable --user
  13. ذلك نموذج تعلم عميق مُصمم خصيصًا لتحليل البقاء Survival Analysis مع مراعاة المخاطر المتعددة المُتنافسة Competing Risks، والفائدة منه التنبؤ بوقت حدوث حدث ما (مثل الوفاة، الفشل، الانتكاسة) في وجود أحداث متعددة قد تمنع حدوث الحدث الرئيسي. بمعنى يتميز بمعالجة المخاطر المُتنافسة أي التعامل مع سيناريوهات توجد فيها أحداث متعددة تؤثر على بعضها البعض كوفاة مريض بسبب سببين مختلفين، أو تحليل مغادرة العملاء مع أسباب متنافسة مثل الانتقال إلى منافس أو إلغاء الخدمة. وعدم افتراض توزيع معين، أي لا يفترض النموذج شكلًا محددًا لوظيفة الخطر، على عكس نماذج مثل Cox Proportional Hazards التي تفترض تناسبًا خطيًا للمخاطر. ويستخدم شبكات عصبية عميقة لاكتشاف العلاقات المعقدة والغير خطية بين الميزات ووقت الحدث. والتنبؤ بتوزيع الوقت بدلًا من تقدير خطر لحظي، يُخرج النموذج توزيعًا احتماليًا لوقت الحدث لكل خطر على حدة. ويعمل بالآلية التالية، يُدرب النموذج على بيانات تحتوي على: ميزات المريض/العينة Features. وقت المراقبة Time-to-event. نوع الحدث Event Type أو الإخفاق Censoring. الهندسة المعمارية: طبقات الإدخال: تستقبل الميزات (مثل العمر، التشخيص الطبي). طبقات مخفية: تتعلم تمثيلات غير خطية للبيانات. طبقات الإخراج: تُنتج احتمالية حدوث كل حدث في فترات زمنية محددة. دالة الخسارة Loss Function تجمع بين: خسارة الاحتمالية السلبية Negative Log-Likelihood لضمان دقة التنبؤات. عقوبة الاختلاف Difference Penalty لتجنب القفزات المفاجئة في التوزيع الزمني.
  14. ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم أسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
  15. ستجدين أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم أسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
  16. من الأفضل عدم فعل ذلك، لأنّ LabelEncoder مُصمم خصيصًا لتحويل الفئات النصية مثل أحمر، أزرق إلى أرقام 0, 1, 2. ولو البيانات من نوع float وتُمثِّل قيمًا عددية مثل 1.5, 2.3، فهي ليست فئوية، ولا يجب تحويلها باستخدام LabelEncoder، وستحتاج إلى تسوية البيانات Normalization/Standardization في حال كانت قيمًا عددية أو التعامل معها كفئات لو تمثل تصنيفات مثل 1.0 = منخفض، 2.0 = متوسط. ففي حال القيم float وليست فئات حقيقية، أحيانًا يُفسرها النموذج بشكل خاطئ كقيم عددية، ويؤثر على الأداء، أو تظهر قيم عشرية غير متوقعة أثناء التنبؤ مثل 2.5، بينما الـ LabelEncoder يُحوّلها إلى أعداد صحيحة (0, 1, 2) فقط. بالتالي لو الـ float تمثِّل فئات حوّلها إلى نص أولاً، ثم استخدم LabelEncoder أو OrdinalEncoder: import pandas as pd from sklearn.preprocessing import LabelEncoder df['column'] = df['column'].astype(str) le = LabelEncoder() df['column_encoded'] = le.fit_transform(df['column']) أما القيم العددية فلا تستخدم LabelEncoder، بل استخدم تقنيات معالجة البيانات العددية: from sklearn.preprocessing import StandardScaler scaler = StandardScaler() df['column_scaled'] = scaler.fit_transform(df[['column']]) وفي حال القيم العشرية تمثِّل فئات مُرتبة Ordinal، عليك استخدام OrdinalEncoder مع تحديد الترتيب يدويًّا: from sklearn.preprocessing import OrdinalEncoder categories = [['1.0', '2.0', '3.0']] encoder = OrdinalEncoder(categories=categories) df['column_encoded'] = encoder.fit_transform(df[['column']]) وللعلم إن كانت القيم العشرية ناتجة عن أخطاء في البيانات كـ 1.0 بدلًا من 1، حوّلها إلى أعداد صحيحة int أولاً: df['column'] = df['column'].astype(int)
  17. يوجد قيم مفقودة في البيانات، لديك، فالأرقام في Non-Null Count، تعني عدد الصفوف التي تحتوي على بيانات غير فارغة لكل عمود. والعمود ID مثلًا يحتوي على 28800 قيمة (عدد الصفوط الكلي في البيانات)، أي لا توجد قيم مفقودة فيه، وعمود tce_match يحتوي على 9804 قيمة فقط، أي %65.9 من البيانات مفقودة هنا (28800 - 9804 = 18996 قيمة فارغة). بالتالي يوجد أخطاء في جمع البيانات مثل عدم تسجيل بعض الحقول، أو عدم انطباق البيانات لأنّ بعض الحقول أحيانًا غير ذات صلة لحالات معينة، أو بسبب خصوصيات في المجال الطبي حيث لا تُقاس بعض المؤشرات لجميع المرضى.
  18. تقنية MICE تعمل بشكل أفضل مع البيانات الرقمية، وذلك لاستخدام العلاقات الإحصائية بين المتغيرات لملء القيم المفقودة، أما البيانات الفئوية Categorical فتستطيع التعامل معها ولكنها تتطلب بعض المعالجة المسبقة، مثل تحويلها إلى أرقام باستخدام الترميز Encoding. وسيتم استبدال القيم الفارغة Null بالقيم الجديدة، لأنّ MICE تقوم بملء الفراغات، فالهدف الرئيسي لها هو ملء القيم المفقودة في مجموعة البيانات الأصلية، ولا تقوم بإنشاء نسخ جديدة كاملة من البيانات، بل تحديث القيم المفقودة في البيانات الأصلية حسب التقديرات التي تم الحصول عليها من خلال العملية التكرارية.
  19. نعتذر لك محمد، أرجو إعادة إرسال ما تريده بالتفصيل لمركز المساعدة مع ذكر أنك أرسلت من قبل وسيتم مساعدتك، مع الإنتظار قليلاً لحين الاستجابة على رسالتك فيوجد ضغط حاليًا.
  20. لتجنب أخطاء LabelEncoder، حيث LabelEncoder من مكتبة scikit-learn لا يدعم التعامل مع القيم الفارغة (NaN) بشكل مباشر، فهو مصمم ليعمل مع فئات محددة مثل ye','no، لكن NaN ليست فئة، بل هي قيمة مفقودة. فكرة الحل استبدال NaN بقيمة مؤقتة مثل 'missing' قبل التشفير، وتُعامل كفئة Category جديدة أثناء التشفير، وبعد التشفير، نستبدل القيمة المؤقتة بـ NaN مرة أخرى.
  21. تقصد تحويل البيانات باستخدام LabelEncoder مع الحفاظ على قيم NaN دون تغيير، عليك إذن استبدال القيم NaN بقيمة مؤقتة قبل التشفير لتجنب أخطاء LabelEncoder وتطبيقه على كل عمود، ثم إعادة استبدال القيمة المؤقتة بـ NaN بعد التشفير. import pandas as pd import numpy as np from sklearn.preprocessing import LabelEncoder data = pd.DataFrame({ 'A': ['yes', 'yes', np.nan, 'no', 'no'], 'B': [np.nan, 'no', 'no', 'no', 'no'], 'C': ['no', 'yes', 'yes', np.nan, 'yes'] }) data_encoded = data.copy() for col in data_encoded.columns: mask = data_encoded[col].isna() temp_data = data_encoded[col].fillna('missing') le = LabelEncoder() encoded_data = le.fit_transform(temp_data) encoded_data = encoded_data.astype(float) encoded_data[mask] = np.nan data_encoded[col] = encoded_data print(data_encoded) وستحصل على: A B C 0 2.0 NaN 1.0 1 2.0 1.0 2.0 2 NaN 1.0 2.0 3 1.0 1.0 NaN 4 1.0 1.0 2.0 لاحظ لو العمود لا يحتوي على NaN، سيتم ترميزه بشكل طبيعي، أيضًا القيم المشفرة ستكون أرقامًا صحيحة (مثل 0, 1, ...)، بينما تظل NaN كما هي.
  22. ستحتاج إلى إضافة Pylance لتوفير ميزات متقدمة فيما يخص Python IntelliSense في vscode، مع إضافة التالي إلى الإعدادات، اضغط على F1 ثم ابحث عن settings json وأضف التالي لنهاية كائن الإعدادات: "python.analysis.autoImportCompletions": true, "python.analysis.indexing": true أيضًا تأكد من أنّ pylance هو سيرفر بايثون لديك بالضغط على CTRL + . في vscode ثم ابحث عن python language server واختر pylance.
  23. ستحتاج إلى إضافة موقعك إلى Google Search Console ثم طلب عمل أرشفة للموقع index، لكن قبل ذلك ستحتاج إلى تجهيز موقعك ليتوافق مع معايير الـ SEO وخاصًة الـ Technical SEO. وللظهور على كلمات معينة الأمر بحاجة إلى إنشاء محتوى قوي وأيضًا إنشاء روابط خلفية backlinks في حال كان هناك تنافس قوي على تلك الكلمات. والـ SEO بحاجة إلى نفس طويل، فالأمر لن يحدث بين ليلة وضحاها، هناك آلاف الموقع تتنافس على الظهور، لذا يجب اكتساب ثقة جوجل واستحقاق التواجد في المراكز العشر الأولى.
  24. للتوضيح، التقنية بإختصار شديد، طريقة إحصائية ذكية لـ ملء الفراغات (القيم المفقودة) في مجموعة البيانات، عن طريق: تخمين القيم المفقودة بشكل متكرر باستخدام علاقات المتغيرات الأخرى. تكرار العملية عدة مرات لإنشاء عدة نسخ من البيانات المكتملة (لتقليل الخطأ). دمج النتائج من جميع النسخ للحصول على تقدير أدق للقيم المفقودة. وتتوفر في مكتبات مختلفة أولها مكتبة statsmodels تحتوي على دعم مُدمج لـ MICE عبر IterativeImputer. أو sklearn في إصدارات حديثة (≥0.24)، متوفر استخدام IterativeImputer من sklearn.impute. أو fancyimpute وهي مكتبة خارجية تُوَدِّع خوارزميات متقدمة للتعامل مع البيانات المفقودة، بما في ذلك MICE. مثلاً من خلال IterativeImputer من sklearn: import pandas as pd import numpy as np from sklearn.experimental import enable_iterative_imputer from sklearn.impute import IterativeImputer data = pd.DataFrame({ 'A': [1, 2, np.nan, 4, 5], 'B': [np.nan, 2, 3, 4, 5], 'C': [1, 2, 3, np.nan, 5] }) imputer = IterativeImputer( max_iter=10, random_state=42, initial_strategy='mean' ) imputed_data = imputer.fit_transform(data) imputed_df = pd.DataFrame(imputed_data, columns=data.columns) print(imputed_df) أو من خلال fancyimpute التي توفر خوارزميات متقدمة مثل Matrix Factorization وKNN وMICE، لكنها أبطأ مع البيانات الكبيرة. from fancyimpute import IterativeImputer imputer = IterativeImputer(n_imputations=5, max_iter=10) imputed_data = imputer.fit_transform(data) imputed_df = pd.DataFrame(imputed_data, columns=data.columns) print(imputed_df) بمعنى sklearn أسرع لكن بها دعم محدود للنماذج وهي أفضل للمجموعات الصغيرة، بينما fancyimpute تدعم نماذج معقدة لكن أبطأ بسبب اعتمادها على TensorFlow وليس دائمًا بسبب ذلك، بل بسبب التطبيقات الداخلية، وتتطلب موارد حاسوبية أعلى. عامًة sklearn مُفضَّلة في معظم الحالات من حيث السرعة والكفاءة بالنسبة للبيانات الصغيرة أو متوسطة الحجم أي أقل من ١٠٠ ألف عينة. أما fancyimpute لو أردت تجربة خوارزميات غير موجودة في sklearn (مثل MatrixFactorization)، أو بحاجة إلى خيارات متقدمة للبيانات المعقدة مثل الصور أو النصوص.
  25. العامل Not في البرمجة نستخدمه لعكس المنطق المنطقي Boolean Logic أي القيم البوليانية لتحويل True إلى False والعكس. If Not Integer.TryParse(txtInput.Text, userInput) Then ' ... إظهار رسالة خطأ End If الدالة Integer.TryParse تُعيد القيمة True وإن نجح التحويل إلى رقم، وFalse إن فشل، وباستخدام Not، نعكس النتيجة حيث الشرط يصبح إن فشل التحويل إلى رقم. وذلك للتحقق من الحالات السلبية مثل الأخطاء بشكل مباشر، بدلًا من استخدام Else، بالتالي يقلل من التعقيد عند التعامل مع شروط متعددة وتسهيل قراءة الكود.
×
×
  • أضف...