{"id":"l-pda-1-1","courseId":"python-data-analysis","lang":"ar","kind":"intro","summary":"افهم ما تضيفه Python و pandas إلى العمل على جداول البيانات، وتعرّف على بيانات Cartwheel التي ستحلّلها، وشغّل أول أسطر Python في المتصفّح.","html":"<p>في كل شركة، هناك شخص يصدّر كل شهر ملف جدول بيانات، ويصفّيه، ويصلح التواريخ المعطوبة نفسها، ويبني الجدول المحوري نفسه، ثم يلصق الأرقام في شريحة عرض. يستغرق ذلك فترة ما بعد الظهر كاملة، وإذا تغيّر شكل الملف المُصدَّر قليلًا، تصبح الأرقام خاطئة دون أن يلاحظ أحد. تحوّل Python تلك الساعات إلى script: تكتب الخطوات مرة واحدة، وإعادة تشغيلها على ملف الشهر القادم تستغرق ثوانيَ.</p>\n<p>تعلّمك هذه الدورة بالضبط ما يستخدمه محلل البيانات من Python، بدءًا من الصفر. لا انعطافات نحو علوم الحاسوب: كل مفهوم يظهر لأنك تحتاجه للإجابة عن سؤال عمل.</p>\n<h2 id=\"sec-1\" tabindex=\"-1\">الشركة التي ستعمل لديها</h2>\n<p>Cartwheel متجر إلكتروني يبيع مستلزمات المنزل والأنشطة الخارجية في ثماني دول: مصر والإمارات والسعودية والأردن والمملكة المتحدة وألمانيا والولايات المتحدة وكندا. تغطي بياناته الفترة من يناير 2024 إلى ديسمبر 2025، وتبدو مثل بيانات أي شركة حقيقية: جدول <code dir=\"ltr\">orders</code> للطلبات، و<code dir=\"ltr\">order_items</code> بالأسعار والخصومات، و<code dir=\"ltr\">products</code> و<code dir=\"ltr\">customers</code> و<code dir=\"ltr\">returns</code>، وتذاكر الدعم، وجلسات زيارة الموقع. وهناك أيضًا <code dir=\"ltr\">orders_messy.csv</code>، وهو ملف مُصدَّر فيه صيغ تواريخ مختلطة وعلامات دولار داخل المجاميع وصفوف مكرّرة، وستنظّفه في القسم 3.</p>\n<p>مهمتك الممتدة على طول الدورة تأتيك من رئيس النمو في Cartwheel: كان الإيراد في الربع الرابع من 2025 أعلى بكثير من أي ربع قبله. هل السبب الجمعة السوداء (Black Friday)، أم عملاء أكثر، أم سلال شراء أكبر، أم خطأ في البيانات؟ في القسم الأخير ستجيب عن هذا السؤال بالأدلة، وكل درس قبله يمنحك أداة تحتاجها لهذه المهمة.</p>\n<h2 id=\"sec-2\" tabindex=\"-1\">كيف يعمل الكود في هذه الدورة</h2>\n<p>كتل الكود التي فيها زر <strong>Run</strong> تشغّل Python 3.13 حقيقية، مع pandas 2.x، داخل متصفّحك. ملفات CSV الخاصة بـ Cartwheel موجودة في مجلد العمل، فتستطيع فتحها بأسمائها. لا يظهر أي ناتج إلا إذا طبعته بـ <code dir=\"ltr\">print()</code>. إليك أول تجربة؛ لا تحتاج إلى فهم كل سطر الآن:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"python\" data-run=\"python\" data-index=\"0\"><div class=\"code-head\"><span class=\"code-title\">Python</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn code-run\" data-action=\"run\" data-lang=\"python\" data-index=\"0\" aria-label=\"شغّل هذا المثال\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\"/></svg><span>تشغيل</span></button><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"نسخ الكود\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>نسخ</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">import</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> pandas </span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">as</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> pd</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">orders </span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">=</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> pd.read_csv(</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"orders.csv\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">print</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">(</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">len</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">(orders), </span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"orders\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">)</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">print</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">(orders[</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"status\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">].value_counts())</span></span></code></pre><div class=\"run-output\" data-run-output=\"0\" hidden></div></div>\n<p>أربعة أسطر، وعرفت أن لدى Cartwheel ‏2,066 طلبًا، وكم منها سُلِّم أو أُلغي أو أُرجِع. وبنهاية القسم 2 ستكتب أسطرًا مثل هذه بنفسك وتعرف بالضبط ما يفعله كل سطر.</p>\n<p>تنتهي معظم الدروس بتمرين. تكتب الكود في المحرّر، وتضغط <strong>Check</strong>، فتخبرك مجموعة من الفحوص الآلية بالأجزاء الصحيحة. التلميحات موجودة حين تتعثّر، والحل الكامل مع شرحه يظهر بعد أن تحلّ التمرين أو تطلبه.</p>\n<h2 id=\"sec-3\" tabindex=\"-1\">الحلقة التي يتبعها كل تحليل</h2>\n<p>بُنيت الدورة حول حلقة واحدة، وكل قسم يقوّي جزءًا منها.</p>\n<figure class=\"diagram\"><svg class=\"diagram-svg\" focusable=\"false\" viewBox=\"0 0 700 220\" role=\"img\" aria-labelledby=\"l-pda-1-1-t1\"><defs><marker id=\"arrow-l-pda-1-1-1\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" class=\"d-arrowhead\"/></marker></defs>\n  <title id=\"l-pda-1-1-t1\">ست مراحل متتالية: السؤال، التحميل، الفحص، التنظيف، التحليل، الإجابة، مع سهم يعود من الإجابة إلى السؤال. أساسيات Python تدعم كل المراحل؛ القسم 2 يغطي التحميل والفحص، والقسم 3 التنظيف، والقسم 4 التحليل، والقسم 5 الإجابة.</title>\n  <rect class=\"d-box-primary\" x=\"10\" y=\"40\" width=\"96\" height=\"52\" rx=\"10\"/>\n  <text class=\"d-label-strong\" x=\"58\" y=\"71\" text-anchor=\"middle\">السؤال</text>\n  <rect class=\"d-box\" x=\"128\" y=\"40\" width=\"96\" height=\"52\" rx=\"10\"/>\n  <text class=\"d-label\" x=\"176\" y=\"71\" text-anchor=\"middle\">التحميل</text>\n  <rect class=\"d-box\" x=\"246\" y=\"40\" width=\"96\" height=\"52\" rx=\"10\"/>\n  <text class=\"d-label\" x=\"294\" y=\"71\" text-anchor=\"middle\">الفحص</text>\n  <rect class=\"d-box-warn\" x=\"364\" y=\"40\" width=\"96\" height=\"52\" rx=\"10\"/>\n  <text class=\"d-label\" x=\"412\" y=\"71\" text-anchor=\"middle\">التنظيف</text>\n  <rect class=\"d-box-accent\" x=\"482\" y=\"40\" width=\"96\" height=\"52\" rx=\"10\"/>\n  <text class=\"d-label\" x=\"530\" y=\"71\" text-anchor=\"middle\">التحليل</text>\n  <rect class=\"d-box-success\" x=\"600\" y=\"40\" width=\"90\" height=\"52\" rx=\"10\"/>\n  <text class=\"d-label-strong\" x=\"645\" y=\"71\" text-anchor=\"middle\">الإجابة</text>\n  <path class=\"d-arrow\" d=\"M106 66 L126 66\" marker-end=\"url(#arrow-l-pda-1-1-1)\"/>\n  <path class=\"d-arrow\" d=\"M224 66 L244 66\" marker-end=\"url(#arrow-l-pda-1-1-1)\"/>\n  <path class=\"d-arrow\" d=\"M342 66 L362 66\" marker-end=\"url(#arrow-l-pda-1-1-1)\"/>\n  <path class=\"d-arrow\" d=\"M460 66 L480 66\" marker-end=\"url(#arrow-l-pda-1-1-1)\"/>\n  <path class=\"d-arrow\" d=\"M578 66 L598 66\" marker-end=\"url(#arrow-l-pda-1-1-1)\"/>\n  <path class=\"d-arrow d-dashed\" d=\"M645 92 L645 120 L58 120 L58 96\" marker-end=\"url(#arrow-l-pda-1-1-1)\"/>\n  <text class=\"d-label-muted\" x=\"350\" y=\"140\" text-anchor=\"middle\">الإجابة الجيدة تفتح السؤال التالي</text>\n  <text class=\"d-label-muted\" x=\"235\" y=\"186\" text-anchor=\"middle\">القسم 2</text>\n  <text class=\"d-label-muted\" x=\"412\" y=\"186\" text-anchor=\"middle\">القسم 3</text>\n  <text class=\"d-label-muted\" x=\"530\" y=\"186\" text-anchor=\"middle\">القسم 4</text>\n  <text class=\"d-label-muted\" x=\"645\" y=\"186\" text-anchor=\"middle\">القسم 5</text>\n  <path class=\"d-line\" d=\"M140 168 L330 168\"/>\n</svg><figcaption>حلقة التحليل التي تعلّمها هذه الدورة، قسم لكل مرحلة</figcaption></figure>\n<p>القسم 1، الذي تبدأه الآن، يعطيك Python الأساسية التي تُكتب بها كل المراحل اللاحقة: القيم، والقوائم، والقواميس، والحلقات، والدوال، وكيف تقرأ رسالة خطأ دون ذعر.</p>\n<aside class=\"callout callout-tip\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\"/><path d=\"M9 18h6\"/><path d=\"M10 22h4\"/></svg><span><span class=\"callout-kind\">نصيحة</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>اكتب الكود بنفسك</span></p>\n<p>قراءة الكود تعطيك شعورًا بأنك فهمته، حتى تحاول كتابته. حين يعرض الدرس مثالًا، غيّر رقمًا أو اسم عمود وشغّله مرة أخرى. التجارب الصغيرة تعلّمك أكثر من إعادة القراءة.</p>\n</aside>\n<p>في الدرس التالي تتعرّف على اللبنات الأساسية لأي برنامج Python: القيم، وأنواعها، والمتغيّرات التي تمنحها أسماء.</p>\n","toc":[{"id":"sec-1","text":"الشركة التي ستعمل لديها","level":2},{"id":"sec-2","text":"كيف يعمل الكود في هذه الدورة","level":2},{"id":"sec-3","text":"الحلقة التي يتبعها كل تحليل","level":2}],"takeaways":["التحليل بلغة Python هو script تعيد تشغيله، فيستغرق تقرير الشهر القادم ثوانيَ بدلًا من فترة ما بعد الظهر كاملة.","pandas هي مكتبة Python للجداول، والـ DataFrame هو نسختها من ورقة جدول البيانات.","كل تحليل في هذه الدورة يتبع الحلقة نفسها - السؤال، التحميل، الفحص، التنظيف، التحليل، الإجابة.","كتل الكود التي فيها زر Run تشغّل Python 3.13 حقيقية في متصفّحك، وملفات CSV الخاصة بـ Cartwheel متاحة لها."],"further":[{"title":"The Python Tutorial","url":"https://docs.python.org/3/tutorial/index.html"},{"title":"pandas - 10 minutes to pandas","url":"https://pandas.pydata.org/docs/user_guide/10min.html"}],"quiz":[{"q":"<p>يطلب منك مديرك تقسيم المبيعات نفسه في أول يوم اثنين من كل شهر. ما الميزة الأساسية لإنجازه بلغة Python بدلًا من العمل اليدوي في جدول بيانات؟</p>","options":[{"text":"تستطيع Python فتح ملفات أكبر من أن يفتحها أي جدول بيانات.","why":"هذا صحيح أحيانًا، لكن ملفات Cartwheel تُفتح في جدول البيانات بلا مشكلة. الحجم ليس المكسب الأساسي في تقرير يتكرّر."},{"text":"الخطوات مكتوبة على هيئة كود، فتعيد تشغيلها على البيانات الجديدة وتحصل على المعالجة نفسها في كل مرة.","why":"صحيح. الـ script وصفة مكتوبة؛ وإعادة تشغيلها سريعة وتزيل أخطاء النسخ واللصق التي تتسلّل إلى العمل اليدوي الشهري."},{"text":"تعطي Python حسابات أدق من جدول البيانات.","why":"كلاهما يستخدم حساب الأعداد العشرية نفسه (floating-point). المكسب هو قابلية التكرار، لا رياضيات أفضل."}],"answer":1},{"q":"<p>أيّ خطوة من حلقة التحليل يتخطّاها المبتدئون أكثر من غيرها، وتسبّب أكثر الإجابات الخاطئة؟</p>","options":[{"text":"تحميل الملف.","why":"لا يمكنك تخطّي التحميل؛ لا شيء يعمل بدونه، لذلك نادرًا ما يسبّب أخطاء صامتة."},{"text":"رسم المخطط النهائي.","why":"غياب الرسم البياني يُضعف التقرير، لكنه لا يجعل الأرقام خاطئة."},{"text":"فحص البيانات قبل تحليلها.","why":"صحيح. تخطّي الفحص هو الطريق الذي تتسلّل منه القيم الفارغة والصفوف المكرّرة والنصوص التي كان يجب أن تكون أرقامًا، فتشوّه المجاميع بصمت."}],"answer":2},{"q":"<p>ماذا تفعل <code dir=\"ltr\">print()</code> في كتل الكود في هذه الدورة؟</p>","options":[{"text":"تعرض قيمة في منطقة المخرجات أسفل الكود.","why":"صحيح. كتل Run لا تعرض إلا ما تطبعه، فضع أي شيء تريد رؤيته داخل <code dir=\"ltr\">print()</code>."},{"text":"ترسل النتيجة إلى الطابعة.","why":"الاسم تاريخي؛ في Python تكتب <code dir=\"ltr\">print()</code> النص في المخرجات، لا على الورق."},{"text":"تحفظ القيمة في ملف للدرس التالي.","why":"لا يُحفظ شيء بين كتل الكود؛ كتابة الملفات تحتاج دوال مثل <code dir=\"ltr\">to_csv</code>."}],"answer":0}],"exercise":null,"words":439,"readMinutes":3}