تعديل المحتوى الموضوع * -- اختر موضوع --C# CourseCSSHTMLJava ScriptPython Fundamentals اساسياتSQL Serverرواية الفيل الأزرقمواضيع متنوعة الوحدة * -- اختر وحدة --1. الوحدة 1: الانطلاقة (1)2. الوحدة 2: الأساسيات (2)3. الوحدة 3: التحكم في مسار البرنامج (3)4. الوحدة 4: هياكل البيانات (4)5. الوحدة 5: الدوال وتنظيم الكود (5)6. الوحدة 6: الملفات والمدخلات والمخرجات (6)7. الوحدة 7: البرمجة الكائنية OOP (7)8. الوحدة 8: مكتبات Python الأساسية (8)9. الوحدة 9: مقدمة تحليل البيانات (9) ترتيب الدرس ترتيب ظهور الدرس داخل الوحدة عنوان المحتوى * محتوى الدرس * (13581 حرف) <!DOCTYPE html> <html lang="ar" dir="rtl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>الدرس 9.1: مقدمة في NumPy</title> <script src="https://cdn.tailwindcss.com"></script> <link href="https://fonts.googleapis.com/css2?family=Tajawal:wght@300;400;700;800&display=swap" rel="stylesheet"> <style> body { font-family: 'Tajawal', sans-serif; background-color: #f8fafc; color: #1e293b; } .section-card { background: white; border-radius: 1rem; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); padding: 2rem; margin-bottom: 2rem; border-right: 5px solid #10b981; } .icon-box { display: inline-flex; align-items: center; justify-content: center; width: 3rem; height: 3rem; border-radius: 0.5rem; margin-left: 0.75rem; font-size: 1.7rem; } .code-block { position: relative; background-color: #1e293b; color: #e2e8f0; border-radius: 0.75rem; padding: 1.5rem; font-family: 'Courier New', monospace; overflow-x: auto; direction: ltr; text-align: left; margin-top: 1rem; white-space: pre; font-size: 1.1rem; border: 2px solid #0f172a; } .copy-btn { position: absolute; top: 0.5rem; right: 0.5rem; background-color: #334155; color: white; border: 1px solid #475569; padding: 0.3rem 0.9rem; border-radius: 0.25rem; font-size: 0.85rem; cursor: pointer; transition: 0.2s; font-family: 'Tajawal', sans-serif; } .copy-btn:hover { background-color: #475569; } .copy-btn.copied { background-color: #10b981; border-color: #10b981; } .try-btn { margin-top: 0.5rem; background-color: #10b981; color: white; padding: 0.55rem 1.2rem; border-radius: 0.45rem; font-size: 0.95rem; font-weight: 700; display: inline-block; cursor: pointer; transition: 0.2s; box-shadow: 0 3px 5px rgba(16, 185, 129, 0.22); } .try-btn:hover { background-color: #059669; transform: translateY(-1px); box-shadow: 0 4px 8px rgba(16, 185, 129, 0.28); } .py-comment { color:#94a3b8; font-style:italic; } .py-str { color:#4ade80; } .py-func { color:#60a5fa; } .py-num { color:#facc15; } .py-import { color:#a5b4fc; font-weight:bold; } .py-name { color:#fda4af; } </style> </head> <body> <div class="p-4 md:p-8 max-w-6xl mx-auto"> <!-- Header --> <header class="text-center mb-12"> <h1 class="text-4xl md:text-5xl font-extrabold text-green-700 mb-4"> الدرس 9.1: مقدمة في NumPy </h1> <p class="text-2xl text-gray-600"> الأساس الرياضي لتحليل البيانات والعمل مع المصفوفات في Python </p> </header> <!-- Section 1: ما هي NumPy؟ --> <section class="section-card"> <h2 class="text-3xl font-bold mb-6 flex items-center"> <span class="icon-box bg-green-100 text-green-700">📊</span> ما هي مكتبة NumPy ولماذا نستخدمها؟ </h2> <p class="text-xl text-gray-700 mb-4"> <strong>NumPy</strong> هي مكتبة قوية في Python متخصصة في التعامل مع: </p> <ul class="list-disc pr-6 text-gray-700 text-xl space-y-3"> <li>المصفوفات (Arrays) ذات الأبعاد المختلفة.</li> <li>العمليات الرياضية السريعة على كميات كبيرة من البيانات.</li> <li>الدوال الإحصائية والرياضية الأساسية المستخدمة في تحليل البيانات.</li> </ul> <p class="text-xl text-gray-700 mt-4"> تعتبر NumPy هي الأساس الذي تُبنى عليه مكتبات أخرى مثل <strong>Pandas</strong> و <strong>Scikit-learn</strong> و<strong>Matplotlib</strong>، لذلك فهمها خطوة مهمة جدًا في طريق تحليل البيانات. </p> <p class="text-xl text-gray-700 mt-4"> قبل استخدام NumPy يجب تثبيتها (مرة واحدة فقط) عبر: <br> <code>pip install numpy</code> </p> </section> <!-- Section 2: إنشاء مصفوفة NumPy --> <section class="section-card" style="border-right-color:#0ea5e9;"> <h2 class="text-3xl font-bold mb-6 flex items-center"> <span class="icon-box bg-blue-100 text-blue-700">🧱</span> إنشاء أول مصفوفة NumPy (ndarray) </h2> <p class="text-xl text-gray-700 mb-4"> النوع الأساسي في NumPy هو <strong>ndarray</strong> وهو مشابه للقوائم ولكنّه: <strong>أسرع، وأكثر كفاءة، ويدعم العمليات الرياضية المباشرة</strong>. </p> <div class="code-block"> <button class="copy-btn" onclick="copyCode('numpy-basic-array', this)">نسخ</button> <code id="numpy-basic-array"> <span class="py-import">import</span> numpy <span class="py-func">as</span> np <span class="py-comment"># إنشاء مصفوفة من قائمة عادية</span> data_list = [<span class="py-num">1</span>, <span class="py-num">2</span>, <span class="py-num">3</span>, <span class="py-num">4</span>] arr = np.array(data_list) <span class="py-func">print</span>(arr) <span class="py-comment"># [1 2 3 4]</span> <span class="py-func">print</span>(type(arr)) <span class="py-comment"># <class 'numpy.ndarray'></span> </code> </div> <button class="try-btn" onclick="runCode('numpy-basic-array')">▶️ تجربة الكود</button> <p class="text-xl text-gray-700 mt-4"> لاحظ أن طريقة العرض مختلفة عن القوائم، وأن النوع أصبح <strong>ndarray</strong> وليس list. </p> </section> <!-- Section 3: مصفوفات متعددة الأبعاد --> <section class="section-card" style="border-right-color:#f97316;"> <h2 class="text-3xl font-bold mb-6 flex items-center"> <span class="icon-box bg-orange-100 text-orange-700">🧊</span> مصفوفات ثنائية الأبعاد (مثل الجداول) </h2> <p class="text-xl text-gray-700 mb-4"> يمكن اعتبار المصفوفة ثنائية الأبعاد مثل جدول (صفوف × أعمدة)، وهي مفيدة جدًا في تمثيل البيانات: </p> <div class="code-block"> <button class="copy-btn" onclick="copyCode('numpy-2d', this)">نسخ</button> <code id="numpy-2d"> <span class="py-import">import</span> numpy <span class="py-func">as</span> np matrix = np.array([ [<span class="py-num">1</span>, <span class="py-num">2</span>, <span class="py-num">3</span>], [<span class="py-num">4</span>, <span class="py-num">5</span>, <span class="py-num">6</span>] ]) <span class="py-func">print</span>(matrix) <span class="py-comment"># شكل المصفوفة (عدد الصفوف × عدد الأعمدة)</span> <span class="py-func">print</span>(matrix.shape) <span class="py-comment"># نوع البيانات داخل المصفوفة</span> <span class="py-func">print</span>(matrix.dtype) </code> </div> <button class="try-btn" onclick="runCode('numpy-2d')">▶️ تجربة الكود</button> <p class="text-xl text-gray-700 mt-4"> الخاصية <strong>shape</strong> تعطيك (عدد الصفوف، عدد الأعمدة)، والخاصية <strong>dtype</strong> تبيّن نوع البيانات (int32, float64, ...). </p> </section> <!-- Section 4: عمليات رياضية على المصفوفات --> <section class="section-card" style="border-right-color:#6366f1;"> <h2 class="text-3xl font-bold mb-6 flex items-center"> <span class="icon-box bg-indigo-100 text-indigo-700">➕</span> العمليات الرياضية على المصفوفات دفعة واحدة </h2> <p class="text-xl text-gray-700 mb-4"> قوة NumPy تظهر عند إجراء العمليات على كل عناصر المصفوفة مرة واحدة بدون استخدام الحلقات: </p> <div class="code-block"> <button class="copy-btn" onclick="copyCode('numpy-ops', this)">نسخ</button> <code id="numpy-ops"> <span class="py-import">import</span> numpy <span class="py-func">as</span> np arr = np.array([<span class="py-num">1</span>, <span class="py-num">2</span>, <span class="py-num">3</span>, <span class="py-num">4</span>]) <span class="py-comment"># جمع ثابت مع كل العناصر</span> <span class="py-func">print</span>(arr + <span class="py-num">10</span>) <span class="py-comment"># [11 12 13 14]</span> <span class="py-comment"># ضرب كل العناصر في 2</span> <span class="py-func">print</span>(arr * <span class="py-num">2</span>) <span class="py-comment"># [2 4 6 8]</span> <span class="py-comment"># عملية بين مصفوفتين من نفس الطول</span> arr2 = np.array([<span class="py-num">10</span>, <span class="py-num">20</span>, <span class="py-num">30</span>, <span class="py-num">40</span>]) <span class="py-func">print</span>(arr + arr2) <span class="py-comment"># [11 22 33 44]</span> </code> </div> <button class="try-btn" onclick="runCode('numpy-ops')">▶️ تجربة الكود</button> <p class="text-xl text-gray-700 mt-4"> هذا النوع من العمليات يسمى <strong>Vectorization</strong>، وهو أسرع بكثير من استخدام الحلقات for على القوائم. </p> </section> <!-- Section 5: دوال جاهزة مفيدة (إحصائية وبنائية) --> <section class="section-card" style="border-right-color:#8b5cf6;"> <h2 class="text-3xl font-bold mb-6 flex items-center"> <span class="icon-box bg-purple-100 text-purple-700">📈</span> دوال مفيدة: متوسط، مجموع، إنشاء أرقام متتالية </h2> <p class="text-xl text-gray-700 mb-4"> توفر NumPy الكثير من الدوال الجاهزة للتحليل السريع: </p> <div class="code-block"> <button class="copy-btn" onclick="copyCode('numpy-stats', this)">نسخ</button> <code id="numpy-stats"> <span class="py-import">import</span> numpy <span class="py-func">as</span> np arr = np.array([<span class="py-num">5</span>, <span class="py-num">10</span>, <span class="py-num">15</span>, <span class="py-num">20</span>]) <span class="py-comment"># المجموع والمتوسط وأكبر/أصغر قيمة</span> <span class="py-func">print</span>(np.sum(arr)) <span class="py-func">print</span>(np.mean(arr)) <span class="py-func">print</span>(np.max(arr)) <span class="py-func">print</span>(np.min(arr)) <span class="py-comment"># إنشاء أرقام متتالية</span> a = np.arange(<span class="py-num">0</span>, <span class="py-num">10</span>) <span class="py-comment"># من 0 إلى 9</span> b = np.arange(<span class="py-num">0</span>, <span class="py-num">10</span>, <span class="py-num">2</span>) <span class="py-comment"># خطوة 2: 0,2,4,6,8</span> <span class="py-func">print</span>(a) <span class="py-func">print</span>(b) </code> </div> <button class="try-btn" onclick="runCode('numpy-stats')">▶️ تجربة الكود</button> </section> <!-- Section 6: تمرين عملي --> <section class="section-card" style="border-right-color:#ec4899;"> <h2 class="text-3xl font-bold mb-6 flex items-center"> <span class="icon-box bg-pink-100 text-pink-700">🧪</span> تمرين عملي (مرقّم) </h2> <div class="bg-pink-50 p-6 rounded-lg border border-pink-200 text-right"> <h3 class="text-pink-900 font-bold mb-4 text-2xl">المطلوب منك:</h3> <ol class="space-y-4 text-gray-700 text-xl list-decimal pr-6"> <li> أنشئ مصفوفة NumPy من الأعداد: <code>[2, 4, 6, 8, 10]</code> ثم: <ul class="list-disc pr-6 mt-2"> <li>اطبع مجموع العناصر.</li> <li>اطبع المتوسط.</li> </ul> </li> <li> أنشئ مصفوفة ثنائية الأبعاد 2×3، ثم اطبع: <ul class="list-disc pr-6 mt-2"> <li>شكلها باستخدام <code>.shape</code></li> <li>نوع بياناتها باستخدام <code>.dtype</code></li> </ul> </li> <li> استخدم <code>np.arange</code> لإنشاء أرقام من 0 إلى 20 بخطوة 5، واطبع النتيجة. </li> <li> أنشئ مصفوفتين من نفس الطول، ثم: <ul class="list-disc pr-6 mt-2"> <li>احسب مجموعهما (arr1 + arr2).</li> <li>احسب الفرق بينهما (arr1 - arr2).</li> </ul> </li> <li> اشرح (كتابةً لنفسك) ما الفرق بين قائمة Python العادية و <strong>NumPy array</strong> من حيث: <ul class="list-disc pr-6 mt-2"> <li>السرعة.</li> <li>سهولة العمليات الرياضية.</li> <li>استخدامها في تحليل البيانات.</li> </ul> </li> </ol> </div> </section> <footer class="text-center text-gray-400 text-lg mt-8 pb-8"> الدرس 9.1 — مقدمة في NumPy </footer> </div> <script> function copyCode(elementId, btnElement=null) { const text = document.getElementById(elementId).innerText; const textarea = document.createElement('textarea'); textarea.value = text; document.body.appendChild(textarea); textarea.select(); document.execCommand('copy'); textarea.remove(); if (btnElement) { const original = btnElement.innerText; btnElement.innerText = "تم النسخ!"; btnElement.classList.add('copied'); setTimeout(() => { btnElement.innerText = original; btnElement.classList.remove('copied'); }, 1500); } } function runCode(elementId) { copyCode(elementId); window.open("/python/trypython", "_blank"); } </script> </body> </html> حفظ إلغاء حفظ وإضافة جديد