-
المساهمات
19762 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
472
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Mustafa Suleiman
-
ملف index.js قمت بتضمينه بشكل سليم ولو قمت بكتابة: console.log("Hello World"); ستجد أنّ الرسالة ظهرت في الكونسول، إذن يوجد مشكلة في الكود تمنع عمله بشكل صحيح. لنقم بحل المشكلة الأولى وهي الضغط على الأرقام لا يظهر أيًا منها على شاشة الآلة الحاسبة، عليك تصحيح متغير prevlousOperator بتهيئته بقيمة null، وتصحيح خطأ في handleNumber لأنك تستخدم === الخاص بالمقارنة بدلاً من = لتعيين قيمة. ثم إضافة تحويل runningTotal إلى نص باستخدام toString() عند عرضه، وإضافة استدعاء handleMath(symbol) وكلمة break في حالات العمليات الحسابية. ثم تصحيح اسم متغير event في دالة الاستماع، لأنك كتبت even بدلاً من event: console.log("Hello World"); let runningTotal = 0; let buffer = "0"; let prevlousOperator = null; const screen = document.querySelector('.screen') function buttonClick(value){ if(isNaN(value)){ handleSymbol(value) }else{ handleNumber(value) } screen.innerText = buffer; } function handleSymbol(symbol){ switch(symbol){ case 'C': buffer = "0"; runningTotal = 0; break; case "=": if(prevlousOperator === null){ return } flushOperation(parseInt(buffer)); prevlousOperator = null; buffer = runningTotal.toString(); runningTotal = 0; break; case "←" : if(buffer.length === 1){ buffer = "0"; }else{ buffer = buffer.substring(0, buffer.length - 1); } break; case '+': case '-': case '×': case '÷': handleMath(symbol); break; } } function handleMath(symbol){ if(buffer === '0'){ return; } const inBudffer = parseInt(buffer); if(runningTotal === 0){ runningTotal = inBudffer; }else{ flushOperation(inBudffer); } prevlousOperator = symbol; buffer = '0'; } function flushOperation(inBudffer){ if(prevlousOperator === '+'){ runningTotal += inBudffer; }else if(prevlousOperator === '-'){ runningTotal -= inBudffer; }else if(prevlousOperator === '×'){ runningTotal *= inBudffer; }else if(prevlousOperator === '÷'){ runningTotal /= inBudffer; } } function handleNumber(numberString){ if(buffer === "0"){ buffer = numberString; }else{ buffer += numberString; } }; function init(){ document.querySelector('.calc-buttons').addEventListener('click', function(event){ buttonClick(event.target.innerText); }) } init();
-
في البرمجة الدراسة تتم عبر الإنترنت من خلال مشاهدة دورات مسجلة من قبل، لذا التعلم التفاعلي بوجود محاضر وأشخاص غير متوفر في ذلك المجال بل هو مضيعة للوقت. الحل الأنسب لك هو التحدث بشكل مرتفع قليلاً وشرح ما استوعبته لنفسك كما لو أنك تقوم بالشرح لشخص آخر، وذلك سيجبرك على التركيز لاستيعاب ما تم شرحه لكي تتمكن من شرحه أنت، أيضًا حاول إنشاء حساب على LinkedIn أو الإشتراك في مجموعة فيسبوك خاصة بالبرمجة ومشاركة ما تعلمته لكن الأمور التي تجدها مهمة بالفعل وليس كل شيء، ذلك من شأنه تحفيزك أيضًا. ولا تؤجل التطبيق لبعد عدّة دروس، الأفضل أن تجرّب كل فكرة فورًا، ضع قاعدة لكل 20-30 دقيقة مشاهدة/قراءة، امنح نفسك 20-30 دقيقة أخرى للكتابة والتجربة. أيضًا حل المساءل البرمجية على codewars أو leetcode والتدرج بالطبع في الصعوبة وستجد تحفيز للتعلم لكي تتمكن من حل المزيد من المساءل. بخصوص طريقة الدراسة المناسبة ستجد تفصيل هنا:
-
ستحتاج إلى استخدام رمز يونيكود لكتابتها، لكن الأسهل اضغط على زر الويندوز سواء علامة الويندوز أو به كلمة Win حسب لوحة المفاتيح واستمر بالضغط، ثم اضغط على الزر الذي به علامة < بجانب حرف و أسفل اليمين بلوحة المفاتيح، ستظهر لك نافذة مثل التالي الخاصة بالرموز بالنظام اختر منها symbols كالتالي وستجد بها ما تريد:
-
ذلك تمرين حول التنبؤ بحجم حركة مرور القطارات بالإعتماد على بيانات معينة، المطلوب منك هو بناء نموذج يتنبأ بحجم حركة مرور القطارات وذلك هو الـ Traffic Volume، الفائدة تظهر في حال أنك مثلاً تبني تطبيقًا يخبر المستخدمين هل محطة القطار ستكون مزدحمة أم لا؟ ستحتاج إلى البحث عن مجموعة بيانات تحتوي على معلومات درجة الحرارة، المطر، الأعياد، التاريخ والوقت، وحجم حركة المرور. وعليك استخدام طريقتين للتنبؤ، الأولى الطريقة التقليدية أو الكلاسيكية بواسطة الانحدار الخطي Linear Regression أو الغابات العشوائية Random Forest أو غيرهم. الثانية من خلال شبكة عصبية Neural Network لبناء نموذج يعتمد على الشبكات العصبية. وعليك محاولة تحقيق دقة أعلى من زملائك في التنبؤ، وأيضًأ معالجة البيانات إذا لزم الأمر، والملف يحتوي على تلميحات لمساعدتك في تلك الخطوة. ثم توفير تقرير عن أفضل النتائج التي حققتها باستخدام الطريقة التقليدية والشبكة العصبية. والخطوات الموجودة في الملف توجهك للخطوات كالتالي: تحميل البيانات وعرضها. إضافة عمود جديد يوضح هل اليوم هو عطلة نهاية أسبوع أم لا. تصور البيانات لفهم الاتجاهات والعلاقات. تشفير وتوسيع نطاق البيانات encoding and scaling باستخدام Pipelines. البحث عن الارتباطات بين المتغيرات. تقسيم البيانات إلى مجموعات تدريب واختبار. بناء وتقييم النموذج الكلاسيكي باستخدام Mean Absolute Error كمقياس للأداء. بناء وتقييم نموذج الشبكة العصبية باستخدام Mean Absolute Error كمقياس للأداء.
- 2 اجابة
-
- 1
-
-
تلك مرحلة طبيعية يمر بها الجميع لا تقلق، المشكلة أنك تقوم بالتطبيق مع وليس بمفردك، فالتطبيق مع الشرح لا مشكلة به، لكن ليس كافٍ ستحتاج إلى التوقف والتطبيق بمفردك لقياس مدى استيعابك وتفهمك، ولا أقصد التوقف كل دقيقة مثلاً ثم تنفيذ ما تم، بل التوقف بعد شرح جزء من الدرس، والأمر يعود لك تستطيع التطبيق مع الشرح مرة ثم إعادة ما قمت به مرة أخرى للتثبيت والمراجعة. أيضًا يجب استيعاب لماذا كتبنا الأمر بتلك الطريقة ولماذا نستخدمه وكيف نستخدمه أيضًا وكيف نربط بينه وبين ما تعلمناه سابقًا. كذلك التغيير في الكود قليلاً لفهم آلية عمله أي تغيير القيم أو تطبيق منطق خاص بك لا مشكلة وذلك أفضل حيث سيفرض عليك التركيز والتعلم. بجانب أنه يجب التدرج في التطبيق العملي أي التمرن على نماذج بسيطة ثم التدرج للتطبيق على مشروع كامل وعند العمل عليه يجب تقسيم ما تريد تنفيذه إلى مهام صغيرة وليس التفكير في المشروع أو المشكلة ككل، ولا تخف من البحث والتجربة والخطأ فستتعلم الكثير منها. ستجد تفصيل هنا:
-
الأمر طبيعي في البداية، وكل شخص له ظروفه لذا لا يوجد قاعدة ثابتة، فالبعض يتبع مبدأ السعر الرخيص في البداية والبعض الآخر يُقدر مجهوده بسعر أعلى وعادل أكثر، بالطبع على مواقع العمل الحر الغالبية تتجه لخفض سعرها للمنافسة ولا مشكلة في ذلك للحصول على أول تقييم لك، لكن بعدها خفض سعرك سيعود بالسلب عليك وأيضًا ستعمل مع نوعية عملاء ليست بالجيدة. بالطبع الأمر يعتمد أيضًا على الجودة التي تقدمها فالبعض يقدم جودة منخفض لذا تقديم سعر مُرتفع غير منطقي مقارنًة بشخص له خبرة ويقدم جودة أعلى بنفس السعر. أي الموضوع يتوقف على معرض الأعمال لديك ومستوى جودته والخبرة التي تمتلكها وهل ستقوم أنت بالتصميم والبرمجة أم البرمجة فقط، أيضًا بلد العميل وقوة العملة لديه. بشكل بسيط، في المتوسط تستطيع تحديد سعر تطوير صفحة واحدة بالموقع بسعر 25 إلى 50 دولار لكن في حال كانت ليست معقدة، ولو بها الكثير من المكونات فالسعر يرتفع بالطبع. وهناك طريقة أفضل وهي تحديد سعر ساعة العمل الخاصة بك، ثم ضرب عدد ساعات العمل المتوقعة للمشروع في سعر الخاصة بك ولتكن مثلاً 10 دولار كمثال ليس أكثر فساعات العمل تتراوح ما بين 10 إلى 50 دولار حسب الخبرة ومستوى الجودة. لكن مشكلة سعر الساعة هو أنه في البداية لن يكون لديك دراية بالمدة المناسبة للمشروع حيث ستتمكن من معرفة ذلك لاحقًا بعد تنفيذ مشاريع واكتساب خبرة، لذا تفقد الأسعار للمبرمجين الذي يعملون بنفس التقنيات على مواقع العمل الحر من حيث سعر الساعة، ثم احسب متوسط السعر وضع سعر ساعة منخفض قليلاً عن المتوسط في البداية وقدم جودة عمل جيدة أعلى من المطلوب في حال كان ذلك أول مشروع لك. ستحتاج إلى قراءة التفصيل التالي وبه مصادر وشرح بالفيديو لاستيعاب الأمر: https://io.hsoub.com/programming/103606-أيها-المبرمج-كيف-تسعر-أعمالك
- 3 اجابة
-
- 1
-
-
الأسهل لك تعلم Node.js لأنك بالفعل تعلمت أساسيات جافاسكريبت، وهي بيئة تشغيل لجافاسكريبت للواجهة الخلفية أي خارج المتصفح للعمل على السيرفر، وتعلم الإطار Express.js الخاص بها. أو يوجد حل أسرع حل من دون تطوير Back-End عن طريق خدمة Backend-as-a-Service أي واجهة خلفية ولكن عن طريق منصة في السحابة وأشهرهم Firebase أو Supabase حيث ستتصل بالواجهة الخلفية عن طريق المكتبة الخاصة بكل منصة ولو اختر firebase فيوجد مكتبة جافاسكريبت Firebase JS. ولو اضطررت لتطوير السيرفر بنفسك فاختر Node.js لأنك تعلمت أساسيات JavaScript، ولو لابد من حصر الاختيار بين PHP و Ruby فاختر PHP لسهولة التطوير من خلالها بفضل إطار لارافل الخاص بها وأيضًا يوجد الكثير من الشروحات العربية والمكتبات الجاهزة.
- 3 اجابة
-
- 1
-
-
ما ستحتاجينه هو محرر أكواد وهو vscode، أيضًا تثبيت بايثون و Node.js وكذلك برنامج لإدارة قواعد البيانات، لكن لا داعي للتفكير بشأن تلك الأدوات دفعة واحدة الآن، كل ما عليكِ فعله هو دراسة الدورة بالترتيب وسيتم توضيح كيفية تثبيت الأداة واستخدامها عندما يحين الوقت لذلك.
- 9 اجابة
-
- 1
-
-
تتوفر مكتبة androidx.appcompat.widget.SearchView ضمن مكتبة أندرويد نفسها لإضافة مربع بحث بسهولة وخاصة مع قائمة RecyclerView أو حتى مع Toolbar ولا تحتاج لمكتبة خارجية. كمثال لملف واجهة وليكن باسم search_menu.xml: <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_search" android:title="بحث" android:icon="@android:drawable/ic_menu_search" android:showAsAction="always" android:actionViewClass="androidx.appcompat.widget.SearchView" /> </menu> ثم في Activity: @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.search_menu, menu); MenuItem searchItem = menu.findItem(R.id.action_search); SearchView searchView = (SearchView) searchItem.getActionView(); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { // عند الضغط على زر البحث return false; } @Override public boolean onQueryTextChange(String newText) { nameAdapter.filter(newText); return false; } }); return true; } أما لو أردتي تنفيذ الأمر بشكل يدوي وتحكم كامل، ستحتاجين إلى RecyclerView للبحث عن اسم وعرض النتائج، أي لو لديكِ قائمة بأسماء وتريدين البحث فيهم، ستقومين بإنشاء layout/activity_main.xml لتصميم الواجهة. لكن للعلم تلك الطريقة على عكس SearchView لا تقدم تجربة مستخدم رسمية أي زر إكس للحذف أو دعم إدراج صوتي وخلافه، وستحتاجين إلى تنفيذ الخيارات متقدمة بنفسك من إخفاء لوحة المفاتيح والاحتفاظ بالسجل. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <EditText android:id="@+id/searchEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="ابحث عن اسم" /> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> ثم NameAdapter.java وهو الأدابتر الخاص بالأسماء: public class NameAdapter extends RecyclerView.Adapter<NameAdapter.NameViewHolder> { private List<String> nameList; private List<String> nameListFull; public NameAdapter(List<String> nameList) { this.nameList = new ArrayList<>(nameList); this.nameListFull = new ArrayList<>(nameList); // نسخة كاملة للبحث } @NonNull @Override public NameViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(android.R.layout.simple_list_item_1, parent, false); return new NameViewHolder(view); } @Override public void onBindViewHolder(@NonNull NameViewHolder holder, int position) { holder.textView.setText(nameList.get(position)); } @Override public int getItemCount() { return nameList.size(); } public void filter(String text) { nameList.clear(); if (text.isEmpty()) { nameList.addAll(nameListFull); } else { text = text.toLowerCase(); for (String name : nameListFull) { if (name.toLowerCase().contains(text)) { nameList.add(name); } } } notifyDataSetChanged(); } static class NameViewHolder extends RecyclerView.ViewHolder { TextView textView; NameViewHolder(View itemView) { super(itemView); textView = itemView.findViewById(android.R.id.text1); } } } ثم في MainActivity.java نكتب المنطقي البرمجي للبحث: public class MainActivity extends AppCompatActivity { private NameAdapter nameAdapter; private EditText searchEditText; private RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); searchEditText = findViewById(R.id.searchEditText); recyclerView = findViewById(R.id.recyclerView); // إعداد قائمة بأسماء، استبدليهم بأسماءك List<String> names = Arrays.asList("محمد", "علي", "سارة", "خالد", "فاطمة", "يوسف"); nameAdapter = new NameAdapter(names); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(nameAdapter); searchEditText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) { nameAdapter.filter(s.toString()); } @Override public void afterTextChanged(Editable s) {} }); } } مربع البحث هو EditText عند الكتابة به يتم فلترة الأسماء في قائمة RecyclerView تلقائيًا.
-
حسب ما فهمته ما تريده هو: جمع معلومات الأعطال والأخطاء المنطقية. معرفة السياق من خلال نسخة النموذج، إحداثيات GPS، نوع الجهاز وغيرها من المعلومات. تحليل الأداء Latency، Network، Battery. تنبيه المستخدم فوراً أو لاحقاً. إمكانية إيقاف ميزة أو تحديث نموذج AI عن بُعد إن لزم. قنوات CI/CD لتكامل سريع وتوزيع تجريبي. وبناءًا على ذلك ستحتاج إلى استخدام التقنيات التالية من Firebase: Firebase Crashlytics Firebase Performance Monitoring Firebase Analytics مع BigQuery Export Firebase Cloud Messaging Firebase In-App Messaging Firebase Remote Config Firebase Cloud Functions Firebase ML / Model Management أيضًا تتوفر Firebase ML لاستضافة نموذج TFLite لو أردت التشغيل السحابي، أو استخدم TFLite مباشرة على الجهاز، وRemote Config للتحكم الديناميكي.
- 3 اجابة
-
- 1
-
-
ذلك ملف FeedbackController أي متحكم مسؤول عن إدارة تقارير الكفاية للموظفين، الحقول الرئيسية للتقرير: text_grade: تقرير الكفاية اللفظي وهو وصف نصي للتقييم. grade: الدرجة النهائية للتقرير وهي قيمة رقمية لتقييم الأداء. year: السنة التي يغطيها التقرير يجب أن تكون فريدة لكل موظف في السنة الواحدة، أي لا يجوز تكرار تقرير لنفس السنة. emp_id إجباري فقط لو استخدمت المسار createAll أو أرسلت $id=0 حيث يحدد الموظف الذي سيسجل له التقرير. وبقية الحقول إختيارية: $feed->grade11 = request('grade11'); $feed->grade12 = request('grade12'); $feed->textGrade1 = request('grade13'); $feed->grade21 = request('grade21'); $feed->grade22 = request('grade22'); $feed->textGrade1 = request('grade23'); $feed->grade31 = request('grade31'); $feed->grade32 = request('grade32'); $feed->textGrade1 = request('grade33'); $feed->grade41 = request('grade41'); $feed->grade42 = request('grade42'); $feed->textGrade1 = request('grade43'); وكل تلك الحقول هي درجة فرعية وحقل نصي لها للتعليق وإضافة ملاحظة، بمعنى text_grade هو التقرير اللفظي أو الوصف العام لتقييم الكفاية العام للموظف مثلاً ممتاز، جيد جداً، جيد، ضعيف. وgrade هي الدرجة الإجمالية الرقمية لتقرير الكفاية مثلاً 95, 80, 60. بالتالي يوجد نظام لتقييم الموظف بناءًا على عدة معايير، وكل معيار له درجة رقمية وملاحظة نصية، ويوجد أربع مجموعات من الحقول: المجموعة الأولى: grade11: درجة رقمية للمعيار الأول أو جزء منه. grade12: درجة رقمية للمعيار الأول أو جزء آخر منه. grade13 مخزنة في $feed->textGrade1 ملاحظة نصية للمعيار الأول. ونفس الأمر بالنسبة بالنسبة لباقي المجموعات. لكن يوجد مشكلة هنا: $feed->textGrade1 = request('grade13'); $feed->textGrade1 = request('grade23'); $feed->textGrade1 = request('grade43'); كل سطر يقوم بتغيير نفس الخاصية textGrade1، بالتالي لن يتم الاحتفاظ إلا بآخر قيمة grade43. ويوجد أيضًا حقل الملفات files[] وهو اختياري من أجل مرفقات ملفات pdf أو صور وخلافه.
-
لا فرق بينهم كلاهما لنفس الوظيفة وهي تعريف السلسلة النصية أي تغليف نص لتتعرف عليه اللغة على أنه نص string. لكن تظهر أهمية علامة التنصيص المزدوجة عند كتابة التالي: let sentence3 = 'it's a rainy day' لاحظ بسبب وجود فاصلة apostrophe في اللغة الإنجليزية حدث مشكلة عند استخدام علامة التنصيص الفردية. لذا سنحتاج إلى استخدام المزدوجة هنا: let sentence3 = "it's a rainy day" أيضًا تستطيع استخدام كلاهما: let sentence = 'hello zen, "how are you?"' سنحصل على: hello zen, "how are you?"
- 3 اجابة
-
- 1
-
-
ستحتاج إلى تثبيت إضافة python لكي يظهر الزر: https://marketplace.visualstudio.com/items?itemName=ms-python.python إن لم يظهر قم بإعادة تشغيل محرر vscode. ولو استمرت المشكلة قم باستخدام إضافة code runner: https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner
- 4 اجابة
-
- 1
-
-
الأسئلة الإختبارية لا يتم الإجابة عليها بشكل مباشر لكي تحقق استفادة أنت، كتوجيه لطريقة الحل عليك فهم البيانات الموجودة، أي استعرض الأعمدة المتاحة في إطار البيانات. ثم حدد نوع كل عمود بطرح الأسئلة التالية: هل هو رقمي كسعر، كمية، عمر؟ هل هو فئوي أو تصنيفي، مثل نوع المنتج، اللون، الجنس؟ هل هو تاريخ أو وقت كتاريخ الشراء، وقت التسجيل؟ هل هو نصي كوصف المنتج أو تعليق المستخدم؟ هل هو منطقي Boolean، مثل هل تم الشراء؟ ستجد بيانات بنعم أو لا؟ فكر في معنى كل عمود أي ماذا يمثل العمود في سياق البيانات والمشكلة التي تحاول حلها؟ بعد ذلك عليك التفكير في العلاقات والتفاعلات بين الأعمدة، فبناءًا على أنواع الأعمدة ومعانيها، ابدأ بطرح أسئلة على نفسك: للأعمدة الرقمية: هل يمكنني جمع عمودين أو أكثر للحصول على معلومة جديدة؟ مثلاً إجمالي_المصروفات = مصروفات_طعام + مصروفات_مواصلات. هل يمكنني طرح عمود من آخر؟ هل يمكنني ضرب عمودين؟ هل يمكنني قسمة عمود على آخر للحصول على نسبة أو معدل؟ هل يمكن تحويل قيمة رقمية إلى فئة؟ كتحويل العمر إلى فئات شاب، متوسط العمر، كبير السن، وذلك يسمى Binning أو Discretization. هل يمكن إنشاء ميزات متعددة الحدود من عمود رقمي واحد؟ بمعنى لو لديك عمود X، فتستطيع إنشاء X^2, X^3. لأعمدة التاريخ والوقت: استخراج السنة، الشهر، اليوم، يوم_الأسبوع، هل_هو_نهاية_أسبوع، رقم_الأسبوع_في_السنة، الفصل. هل يمكن حساب المدة الزمنية بين تاريخين؟ بمعنى مدة_الاشتراك = تاريخ_انتهاء_الاشتراك - تاريخ_بدء_الاشتراك. هل يمكن حساب الوقت المنقضي منذ تاريخ معين؟ وذلك من خلال عمر_الحساب_بالأيام = تاريخ_اليوم - تاريخ_إنشاء_الحساب. للأعمدة الفئوية والتصنيفية: هل يمكن دمج فئتين أو أكثر من عمود فئوي واحد لتقليل عدد الفئات؟ كدمج فئات أزرق فاتح وأزرق غامق إلى أزرق. هل يمكن إنشاء ميزات تفاعلية بين عمودين فئويين؟ وليكن عمود المدينة وعمود نوع_المنتج، هنا تستطيع إنشاء ميزة جديدة المدينة_نوع_المنتج. هل يمكن حساب تكرار ظهور كل فئة؟ للأعمدة النصية: هل يمكن استخراج طول النص؟ هل يمكن استخراج عدد الكلمات؟ هل يمكن التحقق من وجود كلمات مفتاحية معينة؟ أي يحتوي التعليق على كلمة رائع أو سيء؟ بالطبع عند العمل على مشكلة معينة مثل التنبؤ بمبيعات، اكتشاف الاحتيال وخلافه، فكر في المقاييس أو المعلومات التي يستخدمها الخبراء في المجال، مثلاً في التجارة الإلكترونية، ميزات كمتوسط قيمة الطلب للعميل أو معدل تكرار الشراء مفيدة جدًا.
-
data.head() تعود بكائن DataFrame به أول 5 صفوف بشكل افتراضي أو عدد الصفوف الذي تحدده داخل الأقواس، مثلاً data.head(10). وشكل البيانات المعروضة يعتمد على البيئة، حيث يُعرض بتنسيق HTML تلقائيًا في البيئات التفاعلية كما في Jupyter أو IPython console لعرض الجداول بشكل أفضل، كالتالي: ولا يتم عرض شيء في السكربتات أي ملف python عادي ما لم يتم تمريرها لدالة print أو اسناده القيمة لمتغير وطباعته ويظهر بشكل نصي عادي وليس في شكل جدول HTML.
- 4 اجابة
-
- 1
-
-
مهم في تحليل البيانات من أجل فهمها بشكل صحيح، الاستكشاف، التحقق، والربط، لأنه المعرف الأساسي للسجلات ويساعد على تمييز وفهم كل صف من البيانات على حدة، مثلاً، عند تحليل بيانات العملاء، اسم العميل هو ما يميز عميلاً عن آخر. أما لبناء النموذج فيُستبعد من مجموعة الميزات المستخدمة لتدريب النموذج، إلا إن تم تحويله إلى ميزات أخرى ذات معنى من الأسماء كالجنس من اللقب، أو نوع الشركة من اسمها، فتلك الميزات الجديدة هي التي تُستخدم في النموذج، وليس الاسم الأصلي. أما بعد بناء النموذج والحصول على التنبؤات، يُستخدم لربط التنبؤات بالسجلات الأصلية وفهم لمن أو لأي شيء تنطبق تلك التنبؤات.
- 3 اجابة
-
- 1
-
-
تتوفر بيئة تطوير XAMPP والتي تدعم نظام لينكس، ستجد الأنظمة المدعومة هنا: https://www.apachefriends.org/download.html ويوجد أيضًا بيئة مماثلة باسم FlyEnv وهي أفضل وأحدث من لاراجون و XAMPP متوفرة لمختلف الأنظمة: https://github.com/xpf0000/FlyEnv وهي بيئة متكاملة تدعم مجموعة واسعة من التقنيات، بها تثبيت سريع لخوادم الويب Apache، Nginx، Caddy، Tomcat، قواعد البيانات MySQL، MariaDB، PostgreSQL، MongoDB، ولغات البرمجة PHP، Node.js، Java، Go، Python، Ruby، Erlang، أيضًا تدعم مصادر تثبيت متعددة مثل Homebrew، APT، وDNF. وفي حال تستطيع التعامل مع docker، فيوجد بيئة DDEV.
-
تستطيع الإرسال مرة أخرى للتذكير، وأرجو عدم القلق بخصوص الرد، سيتم مساعدتك والرد عليك.
-
يوجد مشكلة في أداة بناء أندرويد وهي AAPT2 - Android Asset Packaging Tool فشلت في معالجة وربط ملفات الموارد الخاصة بالتطبيق وتشمل ملفات XML ومنها ملفات الواجهات، النصوص، الألوان، الأبعاد، الستايلات، وغيرها، الصور والرسومات PNG, JPG, XML drawables، وأيضًا ملفات أخرى كملفات الصوت، الفيديو الخام، وخلافه. أولاً وقبل كل شيء افتحي نافذة Build في أندرويد ستوديو وحاولي العثور على رسالة خطأ، انسخيها والصقيها هنا لتفقد المشكلة، أيضًا راجعي آخر التغييرات، ما هي آخر ملفات XML أو موارد قمتِ بتعديلها قبل ظهور الخطأ؟ غالبًا المشكلة هناك.
-
حاليًا أنت تدرس دورة الذكاء الاصطناعي، ما تمر به شعور طبيعي يحدث لجميع من توقف أثناء الفترة الأولى من التعلم ثم عاد بعد إنقطاع، وكلما طالت الفترة زاد التأثير. لكن الأمر يتوقف على طريقة دراستك، ففي حال كنت تقوم بتنفيذ ما جاء بالدروس بمفردك وليس مع الشرح، ستجد أن المعلومات مثبتة أكثر في ذهنك وأيضًا الاستيعاب أفضل. وفي حال مشاهدة الدروس والتطبيق مع الشرح فقط ستنسى ما تعلمته سريعًا، فالممارسة أمر أساسي لتثبيت ما تعلمته، وبالطبع في بداية فترة التعلم الاستمرار عامل مهم، لمعرفة نسبة الفقد لديك، ستحتاج إلى إعادة التمارين والمشاريع التي جاءت بالدروس بمفردك كمراجعة، ولا تنزعج من ذلك فالمراجعة أمر أساسي لابد منه سواء انقطعت أم لا، حاول قدر الإمكان استرجاع ما استوعبه من خلال التطبيق العملي وبالطبع تستطيع الرجوع للدروس بعد المحاولة وليس قبلها لتنشيط ذهنك، وذلك سيتم خلال أيام قليلة لتنشيط الذاكرة. ولو حاولت القفز مباشرة لما توقفت عنده، ستجد صعوبة أكبر في فهم الأفكار الجديدة لأن الأساسيات التي بنيت عليها قد تكون غير حاضرة بقوة، وسيؤدي للإحباط والشعور بأنك لست مستوعب سيتضاعف. وبالطبع لو لديك مُلخصات أو ملاحظات قمت بكتابتها، فذلك من شأنه تسريع عملية تنشيط الذاكرة، ولا تبحث عن مصادر جديدة حاليًا، فقط الدروس بالدورة. وركز على لماذا وكيف، بمعنى لماذا نستخدم تلك الدالة؟ وكيف يرتبط هذا المفهوم بذاك؟ أيضًأ كن نشطاً ولا تقرأ فقط، حاول أن تشرح لنفسك بصوت عالٍ، أو اكتب ملاحظات سريعة جداً. وحدد وقت لكل جزء، وليكن سأقضي ساعتين اليوم في مراجعة أساسيات بايثون، لتجنب عدم الإفراط في المراجعة.
-
لا يتم توفير إجابة مباشرة لمثل تلك الأسئلة، وذلك لكي تحقق استفادة أنت، المطلوب منك هو التالي: تحميل مجموعة البيانات وقدم نظرة عامة أساسية من خلال df.info()، df.columns، df.describe()، والميثودز الأخرى. افهم هيكلية البيانات، بما في ذلك أسماء الأعمدة، أنواع البيانات، والإحصائيات الأساسية. بالنسبة للأعمدة الرقمية، قم بتحليل توزيعها كالهيستوغرام والانحراف، وحدد المشكلات التالية: التوزيعات ذات الانحراف العالي، سواء إيجابي أو سلبي. القيم المتطرفة التي تبتعد بشكل كبير عن الباقين. أي مشكلات منهجية في البيانات كقيم غير منطقية مثل الأجور السلبية. اقترح حلولاً لمعالجة تلك المشكلات لكل عمود رقمي وقم بتطبيقها. 3- هندسة الميزات أو Feature Engineering قم بإجراء اختيار الميزات للاحتفاظ بالميزات الأكثر أهمية وإزالة تلك غير المهمة أو ذات الأهمية المنخفضة. واستخدم تقنيات مثل SelectKBest مع mutual_info_regression لاختيار أفضل الميز Comfy إن كانت الميزة ذات أهمية منخفضة، قم بإسقاطها. 4- استخلاص الميزات Feature Extraction عليك إنشاء ميزات جديدة من الأعمدة الموجودة لتحسين مجموعة البيانات. باستخلاص السنة، الشهر، اليوم، والساعة من أعمدة التاريخ والوقت، وحساب مسافة الرحلة باستخدام صيغة Haversine بناءًا على إحداثيات الالتقاط والتوصيل. ستحتاج إلى قراءة الدروس التالية:
-
ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم أسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
