الوحدة 10 — دفاتر Jupyter: الممارسات الجيّدة والفخاخ
دفتر Jupyter هو البيئة التي يجري فيها معظم التحليل الاستكشافي: مزيج من الشيفرة والنتائج والرسوم والنصّ في وثيقة واحدة تفاعلية. قوّته في التفاعل الفوري، وأخطر فخاخه ينبع من القوّة نفسها. تعلّمك هذه الوحدة استعماله حيث يتألّق، وتجنّب ما يجعله مصدر أخطاء صامتة.
أين يتألّق الدفتر، وأين يفشل
الدفتر ممتاز لـالاستكشاف: تجرّب تحويلاً، ترى النتيجة فوراً، ترسم، تعلّق، تكرّر. حلقة التغذية الراجعة القصيرة هذه لا تُضاهى في التحليل الأوّلي وعرض النتائج.
لكنه سيّئ لما يجب أن يكون متيناً: الشيفرة المنتِجة، والمهامّ المؤتمتة، والمنطق المعاد استعماله في عدّة أماكن. السبب فخّ واحد جوهري — الحالة الخفيّة.
الفخّ الرئيس: الحالة الخفيّة وترتيب التنفيذ
في الدفتر، تُنفَّذ الخلايا بالترتيب الذي تختاره، لا بترتيب ظهورها. يمكن تشغيل الخلية 5 ثم 2 ثم 8، وتعديل خلية وإعادة تشغيلها وحدها. النتيجة: قد يعرض الدفتر حالةً مستحيلة إعادة إنتاجها من الأعلى إلى الأسفل.
مثال كلاسيكي: تعرّف df في الخلية 3، ثم تحذف تلك الخلية، لكن df يبقى في الذاكرة وتظلّ الخلايا التالية «تعمل» — حتى تعيد التشغيل من الصفر، فينهار كلّ شيء. المتغيّر الذي أُعيد استعماله بعد إعادة تعريف، والاستيراد المحذوف الباقي نشطاً في الذاكرة، كلّها أعراض الداء نفسه.
قبل الاعتماد على أيّ نتيجة أو مشاركة دفتر: Restart Kernel & Run All. هذا يمسح الذاكرة وينفّذ كلّ الخلايا من الأعلى بالترتيب. إن مرّ بلا خطأ، فالدفتر قابل لإعادة الإنتاج؛ وإن فشل، فقد كنت تعتمد على حالة خفيّة كانت ستختفي عند أوّل شخص آخر. اجعله عادة منتظمة، لا فحصاً نهائياً.
قواعد التنظيم
بضع عادات تحوّل دفتراً فوضوياً إلى وثيقة مقروءة:
- ترتيب خطّي: اكتب الخلايا لتُنفَّذ من الأعلى إلى الأسفل؛ قاوم إغراء القفز.
- خلايا Markdown: قسّم بعناوين (تحميل البيانات، التنظيف، التحليل، الخلاصات) واشرح النيّة، لا الشيفرة.
- خلايا قصيرة أحادية المسؤولية: أسهل في الفهم وإعادة التشغيل من كتلة عملاقة.
- تنظيف الاستكشاف الميّت: احذف خلايا التجريب التي لم تعد تخدم السرد النهائي.
الدفتر النهائي يجب أن يُقرأ كسرد: من السؤال إلى الجواب، تتبعه العين خطوة خطوة بلا التباس.
من الدفتر إلى الوحدة: الانتقال الطبيعي
الدفتر مكان للاكتشاف، لا للإسكان الدائم. ما إن يستقرّ منطقٌ ويُعاد استعماله، ينتقل إلى وحدة .py (الوحدة 3):
# في cleaning.py
def clean_orders(df):
df = df.dropna(subset=["amount"])
df["date"] = pd.to_datetime(df["date"], errors="coerce")
return df
# في الدفتر، يصير واضحاً وقابلاً للاختبار
from cleaning import clean_orders
df = clean_orders(raw_df)
هذا الفصل — الاستكشاف في الدفتر، والمنطق المستقرّ في وحدات — يجمع مزيّتين: مرونة Jupyter التفاعلية، ومتانة الشيفرة القابلة للاختبار والإصدار وإعادة الاستعمال. إنه بالضبط تطبيق مبدأ التنظيم من الوحدة 3.
أدوات النظام البيئي
يجدر ذكر ما يحيط بـJupyter في 2026: JupyterLab الواجهة الحديثة الكاملة؛ وVS Code يشغّل الدفاتر أصلاً مع مزايا المحرّر؛ وGoogle Colab يقدّم دفاتر سحابية مع GPU مجانية للتجريب. المبدأ واحد في الجميع؛ والفخاخ نفسها — خصوصاً الحالة الخفيّة — تنطبق حيثما كان.
الخلاصة
- الدفتر ممتاز للاستكشاف وعرض النتائج، سيّئ للشيفرة المنتِجة والمؤتمتة.
- الفخّ الجوهري هو الحالة الخفيّة: التنف يذ بترتيب حرّ يخلق حالات غير قابلة لإعادة الإنتاج.
- «Restart & Run All» قبل أيّ اعتماد أو مشاركة — الفحص الوحيد الذي يثبت قابلية إعادة الإنتاج.
- نظّم بترتيب خطّي وخلايا Markdown وخلايا قصيرة، ونظّف الاستكشاف الميّت.
- انقل المنطق المستقرّ إلى وحدات
.py: استكشاف في الدفتر، متانة في الوحدات.
الوحدة التالية: المراجعة العامّة والامتحان الذي يصدّق إتقانك أدوات بايثون للبيانات.