مبتدئ → تطبيقي · 10 دروس

البيانات من الصفر — جداول، رسوم، وتحليل بسيط

تبني جداول مرتبة في Excel وGoogle Sheets، وتكتب معادلات صحيحة، وتنظّف البيانات وتكشف القيم الشاذة، وتختار الرسم المناسب، وتكتب استعلامات SQL بالربط والتجميع، ثم تسلّم تحليلاً صغيراً بخلاصة عربية واضحة.

كيف تدرس هذا المسار؟

  1. ابدأ بسؤال واضح تريد الإجابة عنه.
  2. استخدم Sheets أو Excel للجداول والرسوم.
  3. جرّب SQL في محرر أونلاين.
  4. وثّق خطواتك في المشروع النهائي.

مناسب من سن 13 فما فوق، وفي آخر كل درس روابط لمراجعه الرسمية.

1. ما هي البيانات؟ — من الأرقام إلى القرارات

الهدف: تحوّل فكرة غامضة إلى سؤال قابل للقياس، وتميّز أنواع البيانات، وتصمم جدولاً مرتباً يسهل تحليله.

البيانات (Data) تسجيل منظم لملاحظات عن الواقع: عدد الطلاب الحاضرين في حصة، أو سعر كيس دقيق، أو المدينة التي يسكنها عميل، أو مدة مكالمة دعم. الرقم المنفرد قليل الفائدة؛ قيمته تظهر حين تقارنه برقم آخر أو تتابعه عبر الزمن. لذلك يبدأ أي عمل جاد بالبيانات بسؤال محدد، ثم يُجمع ما يجيب عنه فقط، ثم يُنظَّف ويُحلَّل ويُعرض، وفي النهاية يُتخذ قرار جديد أو يُعدَّل قرار قائم.

خذ مثالاً خيالياً: مركز «نور» للدروس في مدينة الزقازيق، تديره السيدة هالة، ويضم مجموعات للرياضيات والعلوم. تشعر هالة أن الحضور يقل في أسابيع الاختبارات المدرسية، وتفكر في تقليل عدد الحصص خلالها. الشعور وحده لا يكفي لقرار يمس دخل المركز، فتحوّله إلى سؤال قابل للقياس: «ما نسبة الحاضرين من المسجّلين في كل حصة، وهل تختلف بين أسابيع الاختبارات وبقية الأسابيع؟». صار واضحاً الآن ما يجب تسجيله: الطالب، والمجموعة، والأسبوع، وهل هو أسبوع اختبارات، وهل حضر الطالب أم لا.

أنواع القيم التي ستقابلها. البيانات الكمية (Quantitative) تُقاس بالأرقام، وتنقسم إلى منفصلة تُعدّ عدّاً مثل عدد الحاضرين، ومتصلة تقبل الكسور مثل مدة الحصة بالدقائق أو وزن طرد. والبيانات الفئوية (Categorical) تصنّف ولا تقيس، وتنقسم إلى اسمية لا ترتيب بين قيمها مثل اسم المادة، وترتيبية لقيمها ترتيب طبيعي مثل المستوى: مبتدئ ثم متوسط ثم متقدم. هذا التمييز عملي جداً: متوسط مدة الحصص له معنى، أما «متوسط المادة» فلا معنى له، والمستوى الترتيبي يُرتَّب لكن المسافة بين «مبتدئ» و«متوسط» لا تُقاس برقم.

سجّلت هالة الحضور أول الأمر بالطريقة التي تبدو طبيعية لمعظم الناس: صف لكل طالب، وعمود لكل أسبوع.

الطالب | المجموعة | أسبوع 1 | أسبوع 2 | أسبوع 3
ط01    | رياضيات  | حاضر    | غائب    | حاضر
ط02    | علوم     | حاضر    | حاضر    | غائب

هذا الشكل العريض مريح للعين لكنه متعب للتحليل. كل أسبوع جديد يعني عموداً جديداً يجب أن تمتد إليه كل المعادلات، ولا يوجد عمود واحد اسمه «الأسبوع» يمكن التصفية عليه أو ربطه بمعلومة «أسبوع اختبارات». وإذا أرادت حساب نسبة الحضور لكل أسبوع احتاجت معادلة منفصلة لكل عمود، وأي خطأ في نسخ إحداها يمر دون أن يلاحظه أحد.

الحل هو ما سماه Hadley Wickham في ورقته المنشورة عام 2014 «البيانات المرتبة» (Tidy data)، وتقوم على ثلاث قواعد: كل متغير في عمود، وكل ملاحظة في صف، وكل نوع من الوحدات في جدول مستقل. الملاحظة هنا «حضور طالب واحد في أسبوع واحد»، فيصبح الجدول طويلاً:

الطالب | المجموعة | الأسبوع | أسبوع_اختبارات | حضر
ط01    | رياضيات  | 1       | لا             | 1
ط01    | رياضيات  | 2       | نعم            | 0
ط02    | علوم     | 1       | لا             | 1

لاحظ تفصيلين صغيرين لهما أثر كبير. أولاً، الحضور مسجَّل بالرقمين 1 و0 بدل كلمتي «حاضر» و«غائب»، فمتوسط العمود هو نسبة الحضور مباشرة. ثانياً، عمود «أسبوع_اختبارات» يجعل المقارنة معادلتين فقط: =AVERAGEIFS(E:E, D:D, "نعم") مقابل =AVERAGEIFS(E:E, D:D, "لا"). لو أعطت الأولى 0.78 والثانية 0.91 فهذا فرق يستحق الانتباه، والأرقام هنا خيالية للتوضيح.

ومع ذلك لا يثبت الفرق أن الاختبارات هي السبب. قد تتزامن تلك الأسابيع مع طقس سيئ أو مناسبات عائلية أو تغيير في مواعيد المواصلات. الصياغة الأمينة هي «الحضور أقل في أسابيع الاختبارات بنحو 13 نقطة مئوية»، ثم قرار صغير قابل للمراجعة، مثل تحويل حصة أسبوعية واحدة إلى مراجعة اختيارية في تلك الفترة، ومتابعة الأرقام في الفصل الدراسي التالي.

قائمة قبل أن تجمع أي بيانات:
• ما السؤال بصيغة يمكن الإجابة عنها برقم أو مقارنة؟
• ما الذي يمثله الصف الواحد بالضبط؟
• ما الأعمدة المطلوبة، وما نوع كل عمود؟
• من أين تأتي القيم، ومن يسجلها، ومتى؟
• هل لديك إذن بجمعها، وهل يمكن الاكتفاء بأقل منها؟

  • يبدأ العمل بالبيانات بسؤال قابل للقياس، ثم يُجمع ما يجيب عنه فقط.
  • البيانات كمية (منفصلة أو متصلة) أو فئوية (اسمية أو ترتيبية)، والنوع يحدد ما يجوز حسابه.
  • في الجدول المرتب كل متغير في عمود وكل ملاحظة في صف، فتصبح المقارنات معادلة واحدة.
  • الفرق بين رقمين لا يثبت السبب وحده؛ اكتب النتيجة بصياغة أمينة وقرار قابل للمراجعة.

مخطط

فكرة غامضة
سؤال قابل للقياس
ماذا يمثل الصف؟أعمدة وأنواعها
جمعتنظيفتحليلعرض
قرار قابل للمراجعة

مختبر: من جدول عريض إلى جدول مرتب

أنشئ جدول حضور عريضاً لخمسة طلاب وأربعة أسابيع، ثم أعد كتابته طويلاً بأعمدة: الطالب، الأسبوع، أسبوع_اختبارات، حضر (1 أو 0). يجب أن تحصل على 20 صفاً.

مهمة عملية

اكتب بطاقة سؤال بيانات لموضوع من حياتك، ثم صمم رؤوس جدوله المرتب وصنّف كل عمود (كمي منفصل، كمي متصل، اسمي، ترتيبي). النتيجة المقبولة: سؤال يُجاب برقم، وجملة تحدد ما يمثله الصف، وأربعة أعمدة على الأقل مصنفة.

اختبر فهمك (1/3)

في جدول حضور مرتب (Tidy)، ماذا يمثل الصف الواحد؟

اختبر فهمك (2/3)

أي عمود يحمل بيانات فئوية ترتيبية (Ordinal)؟

اختبر فهمك (3/3)

لاحظت المديرة أن الحضور أقل في أسابيع الاختبارات. ما الصياغة الأدق للنتيجة؟

للاستزادة: Wickham (2014): Tidy Data — Journal of Statistical Software · R for Data Science: فصل ترتيب البيانات · Khan Academy: الإحصاء والاحتمالات

2. جداول البيانات — Excel و Google Sheets

الهدف: تبني ورقة منظمة وتكتب معادلات بالمراجع النسبية والمطلقة، وتلخص البيانات بـ SUMIFS وCOUNTIF، وتقرأ رسائل الخطأ.

جدول البيانات (Spreadsheet) مثل Google Sheets أو Microsoft Excel شبكة من الخلايا، لكل خلية عنوان من حرف العمود ورقم الصف، فالخلية D3 تقع في العمود الرابع والصف الثالث. قوته الحقيقية في المعادلات: تكتب العلاقة مرة واحدة، ويعيد البرنامج الحساب تلقائياً كلما تغيّرت قيمة. يتتبع هذا الدرس بناء ورقة طلبات لمكتبة خيالية اسمها «الأمل» خطوة بخطوة، مع الناتج المتوقع لكل معادلة حتى تقارن نتيجتك به.

الخطوة الأولى: أدخل البيانات بحيث يكون الصف الأول رؤوساً قصيرة، وكل صف بعده طلباً واحداً. لا تكتب العملة داخل الخلية؛ ضعها في رأس العمود حتى تبقى القيمة رقماً.

     A           | B         | C       | D              | E
1    التاريخ      | المنتج    | الكمية  | سعر الوحدة (ج) | الإجمالي
2    2026-09-20  | دفتر      | 4       | 15             | =C2*D2  → 60
3    2026-09-20  | قلم       | 10      | 5              | =C3*D3  → 50
4    2026-09-21  | دفتر      | 2       | 15             | =C4*D4  → 30
5    2026-09-21  | آلة حاسبة | 1       | 120            | =C5*D5  → 120

الخطوة الثانية: اكتب =C2*D2 في الخلية E2 وحدها، ثم اسحب مقبض الزاوية الصغير حتى E5. ستجد المعادلة صارت =C3*D3 في الصف الثالث، و=C4*D4 في الرابع. هذا هو المرجع النسبي (Relative reference): يحفظ البرنامج موقع الخلايا بالنسبة إلى خلية المعادلة، ويطبّق العلاقة نفسها على كل صف بحسب موقعه.

الخطوة الثالثة: ملخصات أسفل الجدول. هذه المعادلات ونتائجها على الصفوف الأربعة:

=SUM(E2:E5)                     → 260
=AVERAGE(E2:E5)                 → 65
=COUNTIF(B2:B5, "دفتر")         → 2
=SUMIFS(E2:E5, B2:B5, "دفتر")   → 90
=MAX(E2:E5)                     → 120

دالة COUNTIF تعدّ الخلايا التي تحقق شرطاً، ودالة SUMIFS تجمع عموداً بشرط أو أكثر. انتبه لترتيب وسائط SUMIFS: عمود الجمع أولاً، ثم أزواج متتالية من «نطاق الشرط» و«قيمة الشرط». لإضافة شرط ثانٍ على التاريخ مثلاً أضف زوجاً جديداً في آخر المعادلة، مع مراعاة أن تتساوى كل النطاقات في عدد الصفوف، وإلا أعاد البرنامج خطأ.

الخطوة الرابعة: المرجع المطلق. ضع نسبة خصم موحدة 10% في الخلية H1، واكتب في F2 المعادلة =E2*(1-$H$1) ثم اسحبها لأسفل. علامتا الدولار تجعلان المرجع مطلقاً (Absolute)، فيبقى H1 ثابتاً في كل الصفوف بينما يتحرك E2 إلى E3 ثم E4. الناتج في F2 هو 54. لو نسيت علامتي الدولار لصار المرجع في الصف التالي H2، وهي خلية فارغة يعاملها البرنامج صفراً، فيظهر الإجمالي كاملاً بلا خصم دون أي رسالة خطأ. وفي Excel يبدّل مفتاح F4 بين أشكال المرجع أثناء تحرير المعادلة.

الخطوة الخامسة: قرار داخل الخلية. المعادلة =IF(C2>=5, "جملة", "قطاعي") تصنّف كل طلب حسب كميته، فتظهر «جملة» في الصف الثالث وحده. ولجلب السعر من ورقة أسعار منفصلة بدل كتابته يدوياً استخدم =XLOOKUP(B2, prices!A:A, prices!B:B, "غير موجود")، وهي متاحة في Google Sheets وفي Excel ضمن Microsoft 365 وExcel 2021 وما بعده. الوسيط الأخير يحدد ما يظهر إذا لم يُعثر على المنتج.

قراءة رسائل الخطأ بدل الخوف منها:
• #DIV/0! قسمة على صفر أو على خلية فارغة؛ احمِ المعادلة بـ IFERROR أو بشرط IF.
• #N/A قيمة البحث غير موجودة، والسبب غالباً مسافة زائدة أو اختلاف في الكتابة.
• #VALUE! عملية حسابية على نص، مثل خلية كُتب فيها «15 ج».
• #REF! المعادلة تشير إلى خلية أو عمود حُذف من الورقة.

ملاحظة إقليمية: في بعض إعدادات اللغة والمنطقة يكون فاصل الوسائط فاصلة منقوطة، فتُكتب المعادلة =SUMIFS(E2:E5; B2:B5; "دفتر"). إن رفض البرنامج معادلة منسوخة من شرح ما، فجرّب استبدال الفواصل قبل البحث عن خطأ آخر.

قبل أن تنتقل إلى الدرس التالي: جمّد الصف الأول من قائمة View ليبقى ظاهراً عند التمرير، واستخدم التصفية (Filter) لعرض منتج واحد دون حذف بقية الصفوف، وتجنّب دمج الخلايا داخل منطقة البيانات لأنه يعطّل الفرز والتصفية. واحفظ نسخة قبل أي تعديل جماعي، فالتراجع لا ينقذك دائماً بعد إغلاق الملف.

  • الصف الأول رؤوس، وكل صف بعده سجل واحد، والقيم الرقمية تُكتب بلا وحدات.
  • المرجع النسبي يتحرك عند السحب، والمرجع المطلق مثل $H$1 يبقى ثابتاً.
  • في SUMIFS يأتي عمود الجمع أولاً ثم أزواج من نطاق الشرط وقيمته.
  • رسائل مثل #N/A و#VALUE! تدل على سبب محدد يمكن تتبعه.

مخطط

إدخال بيانات نظيفة
معادلة في صف واحدسحب لأسفل
ملخصات: SUM · COUNTIF · SUMIFS
مرجع مطلق للثوابت ($H$1)

مختبر: ورقة طلبات المكتبة

ابنِ الجدول ذا الصفوف الأربعة كما في الدرس، ثم تحقق: SUM يعطي 260، وSUMIFS للدفتر يعطي 90، وF2 بعد الخصم يعطي 54. احذف علامتي الدولار وراقب ما يحدث في F3.

مهمة عملية

أنشئ ورقة لعشرة طلبات من ثلاثة منتجات، وأضف: عمود إجمالي بمرجع نسبي، وعمود بعد الخصم بمرجع مطلق، وإيراد كل منتج بـ SUMIFS، وعدد طلبات كل منتج بـ COUNTIF. النتيجة المقبولة: مجموع إيرادات المنتجات الثلاثة يساوي SUM لعمود الإجمالي.

اختبر فهمك (1/3)

نسخت المعادلة =C2*D2 من الخلية E2 إلى E3. ماذا تصبح؟

اختبر فهمك (2/3)

نسبة الخصم في H1. أي معادلة في F2 تبقى صحيحة عند سحبها لأسفل؟

اختبر فهمك (3/3)

ظهر #N/A في عمود XLOOKUP لبعض الصفوف. ما أول ما تفحصه؟

للاستزادة: Microsoft: نظرة عامة على المعادلات في Excel · Microsoft: المراجع النسبية والمطلقة والمختلطة · Microsoft: دالة SUMIFS · Google Sheets: دالة XLOOKUP

3. أنواع البيانات — رقم، نص، تاريخ، فئة

الهدف: تضبط نوع كل عمود وتصلح الأرقام المخزنة نصاً، وتختار الملخص المناسب لكل نوع: المتوسط أو الوسيط أو المنوال.

كل عمود في جدول جيد يحمل نوعاً واحداً من القيم، لأن النوع يحدد ما يجوز حسابه. جمع أرقام الهواتف بلا معنى، ومتوسط أسماء المدن مستحيل، وطرح تاريخين يعطي عدد الأيام بينهما. معرفة النوع تمنعك من حساب أرقام تبدو صحيحة وهي خالية من المعنى، وتساعدك على اختيار الملخص الإحصائي المناسب لكل عمود.

الأنواع التي ستقابلها في أي جدول:
• رقم: يقبل الجمع والطرح والمتوسط، مثل الكمية أو السعر.
• نص: للتسمية والوصف، مثل اسم المنتج أو ملاحظة العميل.
• تاريخ ووقت: يُرتَّب زمنياً ويُطرح لحساب المدد.
• فئة: نص من قائمة محدودة، مثل صغير ومتوسط وكبير.
• منطقي: قيمتان فقط، TRUE وFALSE.

أخطر الحالات أعمدة تتكوّن من أرقام وهي في الحقيقة نصوص: رقم الهاتف، والرقم القومي، والرمز البريدي، وكود المنتج. لن تجمع هاتفين أبداً، وإن خزّنتها أرقاماً حذف البرنامج الصفر في بدايتها فيصبح 01012345678 هو 1012345678، وقد تتحول الأرقام الطويلة جداً إلى صيغة علمية. الحل أن تنسّق العمود نصاً قبل الإدخال: في Google Sheets من Format ثم Number ثم Plain text، وفي Excel من تنسيق الخلايا ثم Text.

للتواريخ منطق خاص: تخزّنها برامج الجداول رقماً تسلسلياً يمثل عدد الأيام منذ تاريخ مرجعي، ثم تعرضه بالتنسيق الذي تختاره، ولهذا تعطي =B3-B2 عدد الأيام بين تاريخين. المشكلة تبدأ حين يُكتب التاريخ نصاً بصيغ مختلفة، فيُفهم 03/04/2026 مرة على أنه الثالث من أبريل ومرة على أنه الرابع من مارس حسب إعداد المنطقة. اختر صيغة ISO مثل 2026-04-03، واضبط إعداد المنطقة (Locale) في الملف قبل الإدخال.

لكشف الخلايا الدخيلة استخدم =ISNUMBER(C2) في عمود مساعد؛ أي FALSE في عمود أرقام يستحق المراجعة. وإن وجدت أعماراً مكتوبة «14 سنة» فحوّلها هكذا:

=VALUE(TRIM(SUBSTITUTE(C2, "سنة", "")))

تحذف SUBSTITUTE الكلمة، وتزيل TRIM المسافات الزائدة، وتحوّل VALUE النص الباقي إلى رقم يمكن حسابه.

من النوع إلى الملخص. أشهر الملخصات ثلاثة: المتوسط الحسابي (Mean) وهو المجموع مقسوماً على العدد، والوسيط (Median) وهو القيمة التي تقع في المنتصف بعد الترتيب، والمنوال (Mode) وهو القيمة الأكثر تكراراً. خذ أزمنة توصيل سبعة طلبات من مطعم شطائر خيالي، بالدقائق:

القيم:  12, 15, 14, 13, 16, 15, 70
=AVERAGE(B2:B8)   → 22.1   (155 ÷ 7)
=MEDIAN(B2:B8)    → 15     (بعد الترتيب: 12, 13, 14, 15, 15, 16, 70)
=MODE(B2:B8)      → 15

طلب واحد تأخر سبعين دقيقة رفع المتوسط إلى 22 دقيقة، مع أن ستة طلبات من سبعة وصلت في 16 دقيقة أو أقل، بينما لم يتأثر الوسيط تقريباً. القاعدة العملية: إذا سُئلت «كم ينتظر العميل عادة؟» فالوسيط أصدق، وإذا سُئلت «كم دقيقة قضاها السائقون في التوصيل إجمالاً؟» فالمتوسط هو الصحيح لأنه مرتبط بالمجموع مباشرة. وحين يبتعد المتوسط عن الوسيط كثيراً، فهذه إشارة إلى قيم متطرفة أو توزيع غير متماثل تستحق الفحص قبل أي استنتاج.

أما الأعمدة الفئوية فملخصها التكرار والنسبة: =COUNTIF(D:D, "متوسط") ثم القسمة على العدد الكلي، والمنوال فيها هو الفئة الأكثر ظهوراً. وللمقاييس الترتيبية مثل تقييم الرضا من 1 إلى 5 يفضّل كثير من المحللين الوسيط ونسبة من اختاروا 4 أو 5، لأن المسافة بين «راضٍ» و«راضٍ جداً» لا تساوي بالضرورة المسافة بين «محايد» و«راضٍ».

خطأ شائع: كتابة «لا يوجد» أو شَرطة في عمود أرقام بدل ترك الخلية فارغة. دالة AVERAGE تتجاهل النصوص داخل النطاق، فيتغير عدد القيم الداخلة في الحساب بصمت، وقد تفشل أداة أخرى مثل pandas في قراءة العمود رقماً من الأساس. اترك الخلية فارغة، وضع السبب في عمود ملاحظات مستقل.

  • الهاتف والرقم القومي والرمز البريدي نصوص وإن تكوّنت من أرقام.
  • التاريخ رقم تسلسلي في الخلفية، وصيغة ISO مثل 2026-04-03 تمنع الالتباس.
  • المتوسط يتأثر بالقيم المتطرفة والوسيط يصف القيمة المعتادة بثبات أكبر.
  • الأعمدة الفئوية تُلخَّص بالتكرار والنسبة والمنوال، لا بالمتوسط.

مخطط

رقممتوسط · وسيط · مجموع
ترتيبيوسيط · نسب الفئات
فئة اسميةتكرار · منوال
تاريخترتيب · فرق بالأيام
نصعدّ · تصفية

مختبر: إصلاح الأنواع وحساب الملخصات

أدخل القيم 12، 15، 14، 13، 16، 15، 70 وتحقق أن AVERAGE يعطي 22.1 وMEDIAN يعطي 15. ثم غيّر 70 إلى 17 ولاحظ كم تغيّر كل منهما.

مهمة عملية

خذ جدولاً من الدرس السابق وأضف أعمدة: تاريخ بصيغة ISO، وهاتف وهمي منسّق نصاً، وتقييم من 1 إلى 5. احسب للتقييم الوسيط ونسبة من اختاروا 4 أو 5. النتيجة المقبولة: ISNUMBER يعطي FALSE لعمود الهاتف وTRUE لعمود الكمية، ونسبة صحيحة بين 0 و100%.

اختبر فهمك (1/3)

أزمنة التوصيل بالدقائق: 12، 13، 14، 15، 15، 16، 70. ما الوسيط؟

اختبر فهمك (2/3)

عمود «رضا العميل» بقيم من 1 إلى 5 (ترتيبية). أي ملخص أنسب للتقرير؟

اختبر فهمك (3/3)

رقم الهاتف 01012345678 خُزّن رقماً فظهر 1012345678. ما الإصلاح؟

للاستزادة: Microsoft: دالة MEDIAN · Khan Academy: تلخيص البيانات الكمية · Microsoft: دالة VALUE

4. تنظيف البيانات — الفوضى قبل التحليل

الهدف: تنظّف جدولاً حقيقياً بسجل موثّق: التكرار، والكتابات المختلفة، والمسافات، والفراغات، والقيم الشاذة بقاعدة المدى الربيعي.

البيانات الحقيقية تصل متسخة: نماذج بلا قيود، وإدخال يدوي متعجل، وملفات من أكثر من نظام. التحليل على بيانات متسخة يعطي أرقاماً دقيقة الشكل خاطئة المضمون. يعرض هذا الدرس سجل تنظيف لمتجر خيالي يبيع إكسسوارات الهواتف عبر إنستغرام في الإسكندرية، صدّر طلبات شهر واحد في 212 صفاً. كل إدخال في السجل يذكر العَرَض الذي لفت الانتباه، والفحص، والإجراء، وعدد الصفوف بعده.

قبل أي تعديل: انسخ الورقة الأصلية وسمّها «خام» ولا تلمسها، واعمل على نسخة باسم «نظيف»، وأضف ورقة ثالثة باسم «سجل التنظيف». هذه العادة وحدها تنقذك حين تكتشف بعد أسبوع أن خطوة ما حذفت صفوفاً لم يكن يجب حذفها.

الإدخال 1 — صفوف مكررة.
العَرَض: مجموع المبيعات في الجدول أعلى من المبلغ الذي وصل فعلاً إلى حساب المتجر.
الفحص: عمود مساعد فيه =COUNTIFS(A:A, A2, B:B, B2, E:E, E2) يعدّ الصفوف المتطابقة في رقم الطلب والعميل والمبلغ؛ أي ناتج أكبر من 1 يعني تكراراً.
الإجراء: في Google Sheets من Data ثم Data cleanup ثم Remove duplicates، وفي Excel من Data ثم Remove Duplicates. حُذفت 6 صفوف، فبقي 206.

الإدخال 2 — كتابات متعددة للقيمة نفسها.
العَرَض: الجدول المحوري يعرض «الإسكندرية» و«الاسكندرية» و«اسكندرية» و«Alex» صفوفاً منفصلة.
الفحص: الدالة =UNIQUE(D2:D207) تسرد كل الأشكال المختلفة في عمود المدينة دفعة واحدة.
الإجراء: Find and replace لتوحيدها إلى «الإسكندرية»، ثم Data validation بقائمة منسدلة للمدن حتى لا تتكرر المشكلة في نموذج الطلب القادم.

الإدخال 3 — مسافات غير مرئية.
العَرَض: XLOOKUP يعيد «غير موجود» لمنتج اسمه يبدو صحيحاً تماماً.
الفحص: =LEN(B2) يعطي 6 لكلمة «جراب» المكوّنة من أربعة أحرف، أي أن هناك مسافتين زائدتين.
الإجراء: =TRIM(B2) تحذف المسافات في الطرفين والمكررة في الوسط. وإن نُسخ النص من صفحة ويب فقد يحمل مسافة غير منكسرة (CHAR 160) لا تحذفها TRIM في Excel كما توضح وثائق Microsoft، فاستخدم =TRIM(SUBSTITUTE(B2, CHAR(160), " ")).

الإدخال 4 — خلايا فارغة.
الفحص: =COUNTBLANK(F2:F207) أظهر 19 طلباً بلا قيمة في عمود الخصم.
الإجراء: لا ملء بالصفر؛ الصفر يعني «لا خصم» والفراغ يعني «غير مسجَّل»، والخلط بينهما يغيّر متوسط الخصم. تُركت الخلايا فارغة ووُثّق عددها، وسُئل صاحب المتجر عن سببها.

الإدخال 5 — قيمة شاذة (Outlier). لفحص عمود الكمية في عينة من عشرة طلبات قيمها 2 و3 و3 و4 و4 و5 و5 و6 و7 و40، تُستخدم قاعدة جون توكي (Tukey) المعروفة من مخطط الصندوق: احسب الربع الأول Q1 والربع الثالث Q3، ثم المدى الربيعي IQR وهو الفرق بينهما، وكل قيمة تقل عن Q1 − 1.5×IQR أو تزيد على Q3 + 1.5×IQR تُعلَّم للفحص.

=QUARTILE.INC(C2:C11, 1)   → 3.25
=QUARTILE.INC(C2:C11, 3)   → 5.75
IQR = 5.75 − 3.25          → 2.5
الحد الأدنى = 3.25 − 3.75  → −0.5
الحد الأعلى = 5.75 + 3.75  → 9.5

تختلف الأدوات أحياناً في طريقة حساب الأرباع فتظهر فروق صغيرة في الكسور، وهذا لا يغيّر الحكم على قيمة بعيدة مثل 40.

الإجراء الأهم هنا هو السؤال قبل الحذف. اتضح أن الطلب لمحل صغير اشترى بالجملة، فالقيمة صحيحة ومهمة. بقيت في الجدول مع عمود جديد «نوع العميل» قيمته «جملة»، وصار حساب متوسط الكمية يُجرى على طلبات الأفراد وحدها. لو كانت القيمة 400 بسبب صفر زائد لكان التصحيح أو الحذف مع التوثيق هو الصواب. قاعدة توكي تحدد ما يستحق النظر، والقرار بعدها يحتاج معرفة بمصدر القيمة.

في نهاية الجلسة يحتوي السجل خمسة إدخالات وعدد الصفوف قبل كل خطوة وبعدها: 212 ثم 206 حتى النهاية. أي شخص يستلم الملف يستطيع إعادة الخطوات نفسها والوصول إلى النتيجة نفسها، وهذا هو معيار التنظيف الجيد. وإن تكررت المشكلات نفسها كل شهر، فالحل الأفضل إصلاح نموذج الإدخال بقوائم منسدلة وحقول إلزامية بدل التنظيف اليدوي المتكرر.

  • اعمل دائماً على نسخة، واحتفظ بالورقة الخام كما وصلت.
  • وثّق كل خطوة: العَرَض، والفحص، والإجراء، وعدد الصفوف بعدها.
  • الفراغ يعني «غير معروف» والصفر قيمة حقيقية؛ لا تخلط بينهما.
  • قاعدة 1.5 × IQR تعلّم القيم للفحص، ولا تقرر حذفها وحدها.

مخطط

ورقة خام (لا تُلمس)
نسخة للتنظيف + سجل
تكراركتاباتمسافاتفراغاتشواذ
بيانات نظيفة + عدد الصفوف موثّق

مختبر: جدول فوضوي بخمسة أخطاء

أنشئ 20 صفاً وضع فيها عمداً: صفين مكررين، وثلاث كتابات لمدينة، ومسافة زائدة، وخلية فارغة، وكمية 40 بين كميات صغيرة. نظّفها ووثّق كل خطوة في سجل.

مهمة عملية

نظّف جدولاً من 20 صفاً على الأقل، واحسب Q1 وQ3 والحدين لعمود رقمي واحد. النتيجة المقبولة: سجل تنظيف فيه أربعة إدخالات على الأقل، وعدد الصفوف بعد كل خطوة، وقرار مكتوب لكل قيمة شاذة: إبقاء أو تصحيح أو حذف مع السبب.

اختبر فهمك (1/3)

بيانات الكميات: الربع الأول 3.25 والربع الثالث 5.75. ما الحد الأعلى للقيم الشاذة بقاعدة 1.5 × IQR؟

اختبر فهمك (2/3)

عمود «الخصم» فيه خلايا فارغة لطلبات لم يُسجَّل خصمها. ما التصرف الأسلم؟

اختبر فهمك (3/3)

لم تجعل TRIM كلمة «دفتر » المنسوخة من موقع ويب تطابق «دفتر». ما السبب الأرجح في Excel؟

للاستزادة: Microsoft: دالة TRIM · Microsoft: إزالة القيم المكررة · Microsoft: دالة QUARTILE.INC · NIST e-Handbook: ما القيم الشاذة؟

5. الرسوم البيانية — قصة بصرية

الهدف: تختار نوع الرسم حسب السؤال، وتعيد تصميم رسم مضلل أو مزدحم، وتتجنب أخطاء المحاور والألوان.

الرسم البياني أداة للإجابة عن سؤال بنظرة واحدة، ولذلك يبدأ اختياره من السؤال، وتأتي قائمة الأشكال المتاحة في البرنامج بعد ذلك. يقسّم دليل From Data to Viz الرسوم حسب نوع البيانات التي لديك، ويقسّمها دليل Datawrapper حسب ما تريد أن يلاحظه القارئ. يلتقي الدليلان في خمسة أسئلة تغطي معظم الحالات اليومية.

• تقارن قيماً بين فئات منفصلة؟ رسم أعمدة (Bar)، ويُفضَّل أفقياً إذا كانت التسميات العربية طويلة، مع ترتيب الأعمدة من الأكبر إلى الأصغر.
• تتابع تغيّراً عبر الزمن؟ رسم خطي (Line) محوره الأفقي التاريخ بفواصل زمنية منتظمة.
• تعرض أجزاء من كل؟ رسم دائري (Pie) بفئتين أو ثلاث فقط، وفيما زاد على ذلك تكون الأعمدة بالنسب أوضح.
• تفحص توزيع قيم عمود واحد؟ مدرج تكراري (Histogram) أو مخطط صندوق (Box plot).
• تبحث عن علاقة بين متغيرين رقميين؟ رسم مبعثر (Scatter) بنقطة لكل ملاحظة.

مثال قبل وبعد: أعدّ مركز تدريب خيالي تقريراً عن عدد المسجلين في تسعة برامج، واختار رسماً دائرياً ثلاثي الأبعاد بتسع شرائح ومفتاح ألوان جانبي. القارئ يقفز بعينه بين الشرائح والمفتاح، والشرائح المتقاربة في الحجم لا تُميَّز، والمنظور ثلاثي الأبعاد يكبّر الشرائح الأمامية على حساب الخلفية. أما سؤال الإدارة فكان بسيطاً: أي برنامج يجذب أكثر، وأيها يحتاج مراجعة؟

النسخة المعدّلة رسم أعمدة أفقي مرتب تنازلياً، اسم كل برنامج بجوار عموده مباشرة فلا حاجة إلى مفتاح ألوان، وكل الأعمدة رمادية ما عدا البرنامجين الأقل تسجيلاً بلون برتقالي. العنوان يذكر الخلاصة: «برنامجان من تسعة يجذبان أقل من عشرة متدربين»، وتحته سطر صغير بمصدر البيانات وفترتها. صار الرسم نفسه يحمل الرسالة، والنص المرافق يشرح ما يجب فعله.

قاعدة المحور. في رسم الأعمدة يبدأ المحور الرأسي من الصفر دائماً، لأن العين تقارن أطوال الأعمدة؛ إن بدأ من 45 فسيبدو الفرق بين 48 و50 كأنه أضعاف. أما الرسم الخطي فيُقرأ من ميل الخط واتجاهه، ويجوز أن يبدأ محوره من قيمة أقرب إلى البيانات بشرط أن تكون أرقام المحور ظاهرة وواضحة للقارئ.

المدرج التكراري يشبه رسم الأعمدة شكلاً ويختلف عنه معنى: محوره الأفقي نطاقات متصلة من قيم رقمية، مثل الدرجات من 0 إلى 10 ثم من 10 إلى 20، والأعمدة فيه متلاصقة. عرض النطاق يغيّر الشكل كثيراً؛ النطاقات الواسعة جداً تخفي التفاصيل، والضيقة جداً تصنع ضجيجاً. جرّب عرضين أو ثلاثة قبل أن تختار، وتذكّر أن ترتيب النطاقات ثابت ولا يُعاد ترتيبها حسب الطول كما في رسم الأعمدة.

في Google Sheets حدد البيانات مع الرؤوس ثم Insert ثم Chart، وغيّر النوع والعنوان والمحاور من محرر الرسم في تبويبي Setup وCustomize. وفي Excel استخدم Insert ثم Recommended Charts لترى اقتراحات مبنية على شكل بياناتك، ثم عدّل منها. وإن رسمت بمكتبة matplotlib في Python فستظهر الحروف العربية منفصلة ومعكوسة ما لم تعالجها بحزمتي arabic-reshaper وpython-bidi.

الألوان: لون محايد للكل ولون واحد مميز لما تريد لفت النظر إليه. وتجنّب الاعتماد على الأحمر والأخضر وحدهما للتمييز، لأن عمى الألوان الأحمر والأخضر شائع ويجعل التفريق بينهما صعباً على بعض القراء؛ أضف تسمية أو اختلافاً في درجة اللون. وقبل النشر راجع: عنوان يقول الخلاصة، ووحدات على المحاور، ومصدر وتاريخ، ولا ظلال ولا أبعاد ثالثة.

  • اكتب السؤال أولاً: مقارنة، أو زمن، أو جزء من كل، أو توزيع، أو علاقة.
  • أعمدة المقارنة تبدأ من الصفر وتُرتَّب من الأكبر إلى الأصغر.
  • المدرج التكراري لتوزيع قيمة رقمية، ونطاقاته ثابتة الترتيب.
  • العنوان الجيد يذكر الاستنتاج، واللون المميز يُستخدم لعنصر واحد.

مخطط

مقارنة فئاتأعمدة مرتبة
تغيّر بالزمنخطي
جزء من كلدائري (2–3 فئات)
توزيعمدرج تكراري / صندوق
علاقةمبعثر

مختبر: رسمان للبيانات نفسها

ارسم البيانات نفسها رسماً دائرياً ثم أعمدة مرتبة. اعرض كلاً منهما خمس ثوانٍ على صديق واسأله: أي منتج الثاني؟ سجّل أي رسم أجاب منه أسرع.

معاينة مباشرة

مهمة عملية

اختر جدولاً من دروسك السابقة وارسم منه رسماً واحداً يجيب عن سؤال محدد. النتيجة المقبولة: نوع رسم مبرر بجملة، ومحور يبدأ من الصفر إن كان أعمدة، وعنوان يذكر الاستنتاج، وسطر بالمصدر والفترة.

اختبر فهمك (1/3)

تريد عرض عدد الزيارات اليومية لموقع خلال 60 يوماً. أي رسم أنسب؟

اختبر فهمك (2/3)

رسم أعمدة لمبيعات فرعين يبدأ محوره الرأسي من 45 بدل الصفر. ما المشكلة؟

اختبر فهمك (3/3)

أي رسم يُظهر توزيع درجات 120 طالباً على نطاقات (0–10، 10–20، ...)؟

للاستزادة: From Data to Viz: اختيار الرسم حسب البيانات · Datawrapper: دليل اختيار نوع الرسم · From Data to Viz: أخطاء الرسوم الشائعة · Google Sheets: أنواع الرسوم البيانية

6. SQL مقدمة — SELECT وWHERE وGROUP BY وJOIN

الهدف: تكتب استعلامات تصفية وتجميع وربط بين جدولين، وتتوقع جدول النتيجة قبل التنفيذ.

حين تكبر البيانات إلى عشرات الآلاف من الصفوف، أو تحتاج عدة تطبيقات إلى قراءتها وتحديثها معاً، تنتقل إلى قاعدة بيانات علائقية (Relational database) وتسألها بلغة SQL. يستخدم هذا الدرس SQLite، وهي قاعدة بيانات كاملة في ملف واحد بلا خادم، ويمكنك تجربة الأمثلة في أداة sqlite3 الرسمية أو في برنامج DB Browser for SQLite. الصياغة هنا قياسية وتعمل في PostgreSQL أيضاً، مع فروق بسيطة ننبّه إليها في آخر الدرس.

لدينا جدولان لمتجر أدوات مكتبية خيالي على الإنترنت: العملاء customers والطلبات orders. العمود customer_id في الطلبات يشير إلى id في العملاء، وهذه الإشارة هي ما يسمح بالربط لاحقاً.

customers:  id | name | city
            1  | منى  | القاهرة
            2  | كريم | الإسكندرية
            3  | ليلى | القاهرة
            4  | سامي | أسيوط
orders:     id  | customer_id | product | qty | price
            101 | 1           | دفتر    | 3   | 25
            102 | 2           | قلم     | 10  | 5
            103 | 1           | حقيبة   | 1   | 300
            104 | 3           | دفتر    | 2   | 25
            105 | 2           | دفتر    | 4   | 25

أول استعلام يختار أعمدة محددة ويصفّي الصفوف بشرط:

SELECT product, qty, price
FROM orders
WHERE qty >= 3;
-- النتيجة: دفتر | 3 | 25
--          قلم  | 10 | 5
--          دفتر | 4 | 25

تقبل جملة WHERE المقارنات = و<> و> و>=، وتجمع الشروط بـ AND وOR، وتختصر قائمة القيم بـ IN، وتبحث عن نمط نصي بـ LIKE، فالشرط product LIKE 'د%' يطابق كل منتج يبدأ بحرف الدال. النصوص توضع بين علامتي اقتباس مفردتين؛ بدونهما تظن قاعدة البيانات أن الكلمة اسم عمود. والقيمة المفقودة NULL لا تساوي شيئاً، ولا تساوي نفسها حتى، لذلك يُكتب WHERE city IS NULL، أما = NULL فلا يطابق أي صف.

التجميع يحوّل الصفوف الكثيرة إلى صف لكل مجموعة. هذا الاستعلام يحسب الإيراد لكل منتج ويرتبه تنازلياً:

SELECT product, SUM(qty * price) AS revenue
FROM orders
GROUP BY product
ORDER BY revenue DESC;
-- حقيبة | 300
-- دفتر  | 225   (75 + 50 + 100)
-- قلم   | 50

لاحظ أن الدفتر أكثر المنتجات طلباً لكنه يأتي ثانياً في الإيراد. ولتصفية المجموعات نفسها تُستخدم HAVING بعد GROUP BY، لأن WHERE تعمل على الصفوف قبل أن تتكوّن المجموعات. الاستعلام SELECT product, COUNT(*) FROM orders GROUP BY product HAVING COUNT(*) >= 2; يعيد صفاً واحداً: الدفتر بثلاثة طلبات.

الربط بين جدولين. لمعرفة الإيراد حسب المدينة نحتاج المدينة من جدول العملاء والمبالغ من جدول الطلبات:

SELECT c.city, SUM(o.qty * o.price) AS revenue
FROM orders AS o
JOIN customers AS c ON o.customer_id = c.id
GROUP BY c.city
ORDER BY revenue DESC;
-- القاهرة    | 425   (منى 375 + ليلى 50)
-- الإسكندرية | 150

غابت أسيوط عن النتيجة لأن JOIN العادي (INNER JOIN) يحتفظ فقط بالصفوف التي لها مقابل في الجدولين، وسامي لم يطلب شيئاً. إن أردت كل العملاء حتى من لا طلبات له فاستخدم LEFT JOIN مع عدّ عمود من جدول الطلبات:

SELECT c.name, COUNT(o.id) AS orders_count
FROM customers AS c
LEFT JOIN orders AS o ON o.customer_id = c.id
GROUP BY c.id, c.name;
-- منى 2 | كريم 2 | ليلى 1 | سامي 0

لو كتبت COUNT(*) لظهر سامي بطلب واحد، لأن LEFT JOIN يضيف له صفاً أعمدة الطلب فيه NULL، وCOUNT(*) يعدّ الصفوف بينما COUNT(o.id) يتجاهل قيم NULL.

ترتيب كتابة الجمل ثابت: SELECT ثم FROM ثم JOIN ثم WHERE ثم GROUP BY ثم HAVING ثم ORDER BY ثم LIMIT. أما ترتيب التنفيذ المنطقي فيبدأ بـ FROM والربط، ثم WHERE، ثم التجميع وHAVING، ثم SELECT، ثم الترتيب. لهذا ترفض PostgreSQL استخدام اسم مستعار من SELECT داخل WHERE، مثل WHERE total > 50 بعد qty * price AS total، بينما تتساهل SQLite معه. اكتب الشرط بالتعبير الكامل ليعمل استعلامك في المحركين. وفرق آخر: تشترط PostgreSQL أن يظهر كل عمود غير مجمَّع في SELECT ضمن GROUP BY، وتسمح SQLite بتجاوز ذلك وتعيد قيمة من صف ما في المجموعة دون تحذير.

عادة تحفظ وقتك: قبل أي تجميع نفّذ SELECT * FROM orders LIMIT 5; لترى شكل البيانات الفعلي وأسماء الأعمدة، وبعد كتابة استعلام تجميع راجع ناتجه يدوياً لمجموعة صغيرة واحدة كما فعلنا مع الدفتر: 75 و50 و100 مجموعها 225. هذا الفحص اليدوي يكشف شرط ربط خاطئاً يضاعف الصفوف قبل أن تصل الأرقام إلى تقرير.

  • WHERE تصفّي الصفوف قبل التجميع، وHAVING تصفّي المجموعات بعده.
  • النصوص بين علامتي اقتباس مفردتين، والقيم المفقودة تُفحص بـ IS NULL.
  • INNER JOIN يحتفظ بالمتطابق فقط، وLEFT JOIN يُبقي كل صفوف الجدول الأيسر.
  • مع LEFT JOIN استخدم COUNT(عمود من الجدول الأيمن) حتى يظهر الصفر صحيحاً.
  • راجع ناتج مجموعة واحدة يدوياً بعد كل استعلام تجميع.

مخطط

FROM + JOIN (أي جداول؟)
WHERE
(أي صفوف؟)
GROUP BY + HAVING (أي مجموعات؟)
SELECT
(أي أعمدة؟)
ORDER BY + LIMIT

مختبر: خمسة استعلامات بنتائج متوقعة

نفّذ الاستعلامات الخمسة في الدرس على الجدولين، وقبل كل تنفيذ اكتب النتيجة التي تتوقعها على ورقة. أي اختلاف بين توقعك والنتيجة هو أهم ما تتعلمه.

مهمة عملية

أضف إلى الجدولين عميلاً خامساً وطلبين جديدين، ثم اكتب: استعلام إيراد كل مدينة، واستعلام عدد طلبات كل عميل بـ LEFT JOIN، واستعلام المنتجات التي يزيد إيرادها على 100 بـ HAVING. النتيجة المقبولة: نتائج تطابق حسابك اليدوي لمجموعة واحدة على الأقل في كل استعلام.

اختبر فهمك (1/3)

نفّذت SELECT product, SUM(qty * price) ... GROUP BY product على جدول الدرس. ما إيراد «دفتر»؟

اختبر فهمك (2/3)

تريد المنتجات التي طُلبت مرتين على الأقل. أين تضع الشرط COUNT(*) >= 2؟

اختبر فهمك (3/3)

استعلام LEFT JOIN مع COUNT(*) أعطى سامي طلباً واحداً مع أنه لم يطلب شيئاً. ما الإصلاح؟

للاستزادة: SQLite: جملة SELECT · PostgreSQL: الربط بين الجداول · PostgreSQL: دوال التجميع وGROUP BY وHAVING · SQLite: دوال التجميع المدمجة

7. CSV — تبادل البيانات بين الأنظمة

الهدف: تصدّر وتستورد ملفات CSV دون فقدان العربية أو الأصفار أو الصفوف، وتحمّلها إلى SQLite وpandas.

ملف CSV (القيم المفصولة بفواصل) نص عادي يمثل جدولاً: كل سطر صف، والقيم مفصولة بفاصلة، والسطر الأول عادة رؤوس الأعمدة. بساطته جعلته لغة التبادل المشتركة بين Google Sheets وExcel وقواعد البيانات وPython. يصف المعيار RFC 4180 قواعده الأساسية: إذا احتوت القيمة على فاصلة أو علامة تنصيص مزدوجة أو سطر جديد وُضعت كلها بين علامتي تنصيص مزدوجتين، وعلامة التنصيص داخل القيمة تُكتب مرتين.

date,product,qty,note
2026-09-20,دفتر,4,
2026-09-21,"قلم, أزرق",10,"قال العميل ""عاجل"""

التصدير من Google Sheets يتم من File ثم Download ثم Comma-separated values، ويصدّر الورقة الحالية فقط. وفي Excel اختر Save As ثم النوع CSV UTF-8 (Comma delimited). والاستيراد في Sheets من File ثم Import، حيث تختار إنشاء ورقة جديدة أو استبدال الحالية ونوع الفاصل. أغلب مشكلات CSV تتكرر بأعراض معروفة، وهذا سجل بأشهرها مع أسبابها وحلولها.

العَرَض الأول: العربية تظهر رموزاً مثل الق.
السبب: الملف محفوظ بترميز UTF-8 وقُرئ بترميز آخر، وهذا يحدث كثيراً عند فتح الملف بالنقر المزدوج في Excel.
الحل: افتحه من Data ثم From Text/CSV، واختر File Origin بقيمة 65001: Unicode (UTF-8). ويساعد وجود علامة ترتيب البايت (BOM) في أول الملف بعض البرامج على تعرّف الترميز، وهي ما يضيفه Excel عند الحفظ بصيغة CSV UTF-8.

العَرَض الثاني: كل صف يظهر في عمود واحد طويل.
السبب: الفاصل في الملف لا يطابق ما يتوقعه البرنامج. في إعدادات المناطق التي تستخدم الفاصلة للكسور العشرية يصبح الفاصل الافتراضي فاصلة منقوطة.
الحل: حدد الفاصل يدوياً في نافذة الاستيراد، وافتح الملف في محرر نصوص مثل Notepad لترى الفاصل الحقيقي بعينك.

العَرَض الثالث: أرقام الهواتف فقدت الصفر البادئ أو صارت بصيغة مثل 1.01E+10.
السبب: البرنامج خمّن أن العمود رقمي وحوّله دون أن يسألك.
الحل: في نافذة الاستيراد غيّر نوع العمود إلى نص قبل التحميل، ولا تحفظ فوق الملف الأصلي بعد فتحه بالنقر المزدوج.

العَرَض الرابع: عدد الصفوف بعد الاستيراد أكبر من المتوقع، وبعضها مقطوع.
السبب: ملاحظة تحتوي سطراً جديداً أو علامة تنصيص غير مضاعفة، فانقسم السجل الواحد إلى سطرين.
الحل: صحّح التصدير من المصدر ليحيط هذه القيم بعلامات التنصيص، ثم قارن العدد مرة أخرى.

للتحليل بـ SQL يمكن تحميل الملف إلى SQLite مباشرة من أداة sqlite3. إذا لم يكن الجدول موجوداً أنشأه أمر الاستيراد وأخذ أسماء الأعمدة من الصف الأول، لكن الأفضل أن تنشئ الجدول بنفسك بأنواع صحيحة ثم تتخطى سطر الرؤوس بالخيار --skip 1، لأن الجدول الموجود مسبقاً يُعامَل فيه كل سطر على أنه بيانات:

CREATE TABLE sales (date TEXT, product TEXT, qty INTEGER, note TEXT);
.import --csv --skip 1 sales.csv sales
SELECT COUNT(*) FROM sales;

بعدها نفّذ SELECT SUM(qty) FROM sales; وقارن الناتج بمجموع العمود نفسه في الجدول الأصلي، فإن اختلف الرقمان فهناك صف لم يُقرأ كما ينبغي.

وفي Python تقرأ مكتبة pandas الملف بالأمر pd.read_csv('sales.csv', encoding='utf-8-sig', dtype={'phone': str}). الترميز utf-8-sig يقرأ UTF-8 ويتجاهل علامة BOM إن وُجدت، والوسيط dtype يجبر عمود الهاتف على البقاء نصاً فلا يضيع صفره. وعند الحفظ استخدم index=False حتى لا يُضاف عمود ترقيم لم يكن في الأصل.

بعد كل استيراد ثلاث مراجعات لا تتجاوزها: عدد الصفوف مطابق للمصدر، وأول خمسة صفوف وآخر خمسة تبدو سليمة، وعمود رقمي واحد على الأقل مجموعه يطابق مجموعه في المصدر. هذه دقيقة واحدة تحميك من تحليل كامل على ملف ناقص أو مزاح.

  • القيمة التي فيها فاصلة أو تنصيص أو سطر جديد تُحاط بعلامتي تنصيص مزدوجتين.
  • استخدم UTF-8 دائماً، واستورد في Excel من From Text/CSV بدل النقر المزدوج.
  • اضبط نوع أعمدة الهواتف والأكواد نصاً قبل التحميل.
  • تحقق بعد كل استيراد من عدد الصفوف ومجموع عمود رقمي.

مخطط

Sheets / Excel
ملف نصي (تحقق في Notepad)
> SQLite (.import --csv --skip 1)
> pandas (read_csv utf-8-sig)
عدد الصفوف + مجموع عمود = المصدر؟

مختبر: رحلة CSV كاملة

احفظ الأسطر الثلاثة في ملف sales.csv بترميز UTF-8، واستورده في Sheets أو Excel مع ضبط عمود phone نصاً، ثم حمّله إلى SQLite. يجب أن تحصل على 3 صفوف، ومجموع qty يساوي 15، وأرقام هواتف تبدأ بصفر.

مهمة عملية

صدّر جدولاً من دروسك السابقة بصيغة CSV UTF-8، ثم استورده في أداة أخرى (Sheets أو SQLite أو pandas). النتيجة المقبولة: عدد صفوف مطابق، وعربية سليمة، ومجموع عمود رقمي مطابق، وسطر يذكر أي مشكلة ظهرت وكيف حللتها.

اختبر فهمك (1/3)

قيمة تحتوي فاصلة مثل قلم, أزرق داخل ملف CSV. كيف تُكتب وفق RFC 4180؟

اختبر فهمك (2/3)

ظهرت العربية رموزاً مثل ال بعد فتح CSV بالنقر المزدوج في Excel. ما السبب الأرجح؟

اختبر فهمك (3/3)

في pandas، أي وسيط يحافظ على الصفر البادئ في عمود phone عند القراءة؟

للاستزادة: RFC 4180: صيغة ملفات CSV · Microsoft: استيراد وتصدير ملفات النص وCSV · SQLite: أداة سطر الأوامر والأمر .import · pandas: الدالة read_csv

8. أخلاقيات البيانات والخصوصية

الهدف: تراجع مشروع جمع بيانات قبل بدئه: الغرض، والموافقة، والحد الأدنى، وإخفاء الهوية، والمشاركة الآمنة.

كل صف في جدول عن أشخاص يمثل إنساناً له حق في الخصوصية، وقرارات حماية هذا الحق تُتخذ قبل جمع أول إجابة. تتفق قوانين حماية البيانات الحديثة على مبادئ متقاربة: غرض محدد ومعلن، وأساس مشروع للمعالجة مثل الموافقة، وجمع الحد الأدنى، وحفظ آمن لمدة محدودة، وحق الشخص في معرفة بياناته وتصحيحها. من أمثلتها اللائحة الأوروبية العامة لحماية البيانات (GDPR)، وقانون حماية البيانات الشخصية المصري رقم 151 لسنة 2020، ونظام حماية البيانات الشخصية في السعودية الذي تختص به الهيئة السعودية للبيانات والذكاء الاصطناعي (سدايا).

حالة خيالية: طالبة في الصف الثاني الثانوي اسمها ريم تريد دراسة عادات النوم والمذاكرة لدى زميلاتها في مدرسة بالمنصورة لمشروع مادة الإحصاء. مسودتها الأولى للاستبيان تطلب الاسم الكامل، ورقم الهاتف، وتاريخ الميلاد، والفصل، وساعات النوم، وساعات المذاكرة، ومعدل الدرجات في الفصل الدراسي السابق.

مراجعة المسودة بأربعة أسئلة:
• الغرض: هل يخدم كل سؤال سؤال البحث؟ الاسم ورقم الهاتف لا يضيفان شيئاً لتحليل العلاقة بين النوم والمذاكرة، فيُحذفان.
• الموافقة: هل تعرف المشاركة ما سيُجمع ولماذا؟ تُضاف فقرة قصيرة في أول النموذج، ولأن المشاركات دون الثامنة عشرة تُطلب موافقة المدرسة وأولياء الأمور وفق قواعد المدرسة.
• الدقة اللازمة: هل تحتاج تاريخ الميلاد كاملاً؟ العمر بالسنوات يكفي، وكثيراً ما يكفي الصف الدراسي وحده.
• المدة: متى تُحذف الإجابات؟ بعد تسليم المشروع وتصحيحه، ويُكتب ذلك صراحة في فقرة الموافقة.

حذف الاسم لا يجعل البيانات مجهولة الهوية تلقائياً. في فصل من ثلاثين طالبة قد يكفي الجمع بين تاريخ الميلاد والفصل ومعدل الدرجات لمعرفة صاحبة الإجابة بدقة، وتسمى هذه الأعمدة معرّفات غير مباشرة (Quasi-identifiers). العلاج أن تخفّض دقتها: الفئة العمرية بدل التاريخ، ونطاق المعدل مثل «80–89» بدل الرقم الدقيق، والمحافظة بدل العنوان.

وإن احتجت متابعة الشخص نفسه عبر أكثر من استبيان فاستخدم الترميز المستعار (Pseudonymization): رمز مثل P01 بدل الاسم، يمكن توليده في الجدول بالمعادلة ="P"&TEXT(ROW()-1,"00")، وجدول مطابقة بين الرموز والأسماء في ملف منفصل لا يصل إليه إلا صاحب المشروع. وتنبّه إلى أن البيانات المرمّزة بهذه الطريقة ما زالت تُعد بيانات شخصية في اللائحة الأوروبية، لأن إعادة التعرف ممكنة لمن يملك جدول المطابقة.

عند النشر: تحجب كثير من الجهات الإحصائية الرسمية الخلايا ذات الأعداد الصغيرة في الجداول المنشورة، ويختلف الحد الأدنى من جهة لأخرى. في مشروع مدرسي قاعدة آمنة ألا تعرض نتيجة مجموعة فيها أقل من خمسة أشخاص؛ جملة مثل «الطالبة الوحيدة من الفصل الثالث التي تنام أقل من خمس ساعات» تكشف صاحبتها دون ذكر اسمها.

خطأ شائع في المشاركة: إرسال ملف Google Sheets بخيار الوصول العام «Anyone with the link» وفيه بيانات شخصية. الرابط يُعاد إرساله وينتقل خارج سيطرتك. شارك مع حسابات محددة، وامنح صلاحية العرض فقط لمن لا يحتاج التعديل، وأنشئ نسخة منفصلة للعرض العام بعد حذف الأعمدة الحساسة. وراجع قائمة من لديهم وصول بعد انتهاء المشروع وأزل من لم يعد يحتاجه.

النسخة النهائية من استبيان ريم صارت خمسة أسئلة: الفصل، والفئة العمرية، وساعات النوم، وساعات المذاكرة، ونطاق المعدل، مع فقرة موافقة من ثلاث جمل تذكر الغرض ومدة الاحتفاظ ومن يطّلع على الإجابات. البيانات الأقل جعلت التحليل أبسط والمخاطر أقل، ولم تفقد الدراسة أي عمود تحتاجه للإجابة عن سؤالها.

  • اجمع ما يخدم سؤال البحث فقط، فما لم يُجمع لا يمكن أن يتسرب.
  • حذف الاسم لا يكفي؛ خفّض دقة المعرّفات غير المباشرة مثل تاريخ الميلاد.
  • البيانات المرمّزة برموز مستعارة ما زالت بيانات شخصية لمن يملك جدول المطابقة.
  • لا تنشر نتائج مجموعات صغيرة جداً، ولا تشارك ملفات حساسة برابط عام.

شجرة القرار

سؤال البحث
لكل عمود: هل يخدم السؤال؟لااحذفه
نعمأقل دقة كافية؟ (فئة بدل تاريخ)
موافقة + مدة حفظ + وصول محدد
نشر بلا مجموعات صغيرة

مختبر: تقليص استبيان

خذ استبياناً من سبعة أسئلة يطلب الاسم والهاتف وتاريخ الميلاد، وأعد كتابته بأقل عدد من الأسئلة يجيب عن سؤال البحث نفسه، مع فقرة موافقة.

مهمة عملية

صمّم استبياناً من خمسة أسئلة لموضوع يهمك، واملأ بطاقة المراجعة الأخلاقية له. النتيجة المقبولة: لا اسم ولا هاتف ولا تاريخ ميلاد كامل، وفقرة موافقة تذكر الغرض ومدة الحفظ، وطريقة مشاركة بحسابات محددة.

اختبر فهمك (1/3)

استبيان عن النوم لطالبات المدرسة. أي مجموعة أسئلة تتبع مبدأ الحد الأدنى؟

اختبر فهمك (2/3)

حذفت الأسماء وأبقيت تاريخ الميلاد والفصل والمعدل الدقيق في فصل من 30 طالبة. ما التقييم الأدق؟

اختبر فهمك (3/3)

ما وضع البيانات بعد استبدال الأسماء برموز مثل P01 مع الاحتفاظ بجدول المطابقة؟

للاستزادة: EUR-Lex: نص اللائحة الأوروبية GDPR · سدايا: الأنظمة واللوائح · ICO: إرشادات إخفاء الهوية · ONS: ضبط الإفصاح في الإحصاءات المنشورة · Google Drive: مشاركة الملفات وصلاحيات الوصول

9. دراسة حالة — متجر صغير

الهدف: تحلل بيانات متجر خيالي بجدول محوري وSUMIFS والمتوسط والوسيط، وتكتب خلاصة عربية بتوصية وقيود.

تجمع هذه الدراسة ما سبق في تحليل واحد على بيانات خيالية لمكتبة صغيرة اسمها «السنابل» في المنصورة. تبيع المكتبة الدفاتر والأقلام والحقائب في المحل وعبر طلبات واتساب، وصاحبها يسأل سؤالين: أي منتج يستحق المساحة الأكبر في الواجهة؟ وهل يستحق واتساب أن يُخصَّص له موظف بنصف دوام؟ هذه عينة من 12 طلباً؛ في الواقع تكون الطلبات بالمئات، والخطوات هي نفسها.

A: الطلب | B: المنتج | C: القناة | D: المبلغ (ج)
1        | دفاتر     | محل       | 120
2        | أقلام     | واتساب    | 45
3        | أقلام     | محل       | 30
4        | دفاتر     | محل       | 90
5        | حقائب     | واتساب    | 650
6        | دفاتر     | محل       | 150
7        | دفاتر     | واتساب    | 110
8        | أقلام     | محل       | 60
9        | دفاتر     | واتساب    | 130
10       | حقائب     | محل       | 400
11       | أقلام     | واتساب    | 35
12       | دفاتر     | محل       | 100

الجدول المحوري (Pivot table) يلخص هذه الصفوف دون كتابة معادلة واحدة. في Google Sheets حدد البيانات ثم Insert ثم Pivot table، وفي Excel من Insert ثم PivotTable. ضع المنتج في Rows، والقناة في Columns، والمبلغ في Values بعملية SUM. الناتج المتوقع:

المنتج   | محل | واتساب | الإجمالي
دفاتر    | 460 | 240    | 700
أقلام    | 90  | 80     | 170
حقائب    | 400 | 650    | 1050
الإجمالي | 950 | 970    | 1920

تحقق من خلية واحدة يدوياً قبل أن تثق بالجدول كله. دفاتر المحل هي الطلبات 1 و4 و6 و12، بمبالغ 120 و90 و150 و100، ومجموعها 460. والمعادلة المقابلة =SUMIFS(D2:D13, B2:B13, "دفاتر", C2:C13, "محل") يجب أن تعطي الرقم نفسه. تطابق الطريقتين دليل على أن القيم مكتوبة بالشكل نفسه في كل الصفوف، فلو كانت إحدى الخلايا «دفاتر » بمسافة زائدة لظهر الفرق فوراً.

السؤال الأول: لو اعتمد صاحب المكتبة على عدد الطلبات لاختار الدفاتر، فهي نصف الطلبات (6 من 12). أما بالإيراد فتتصدر الحقائب بـ 1050 جنيهاً، أي نحو 55% من الإجمالي، من طلبين فقط، وتأتي الدفاتر ثانية بـ 700 جنيه (نحو 36%). المقياسان صحيحان ويجيبان عن سؤالين مختلفين: الدفاتر تجلب الزبائن بانتظام، والحقائب تصنع معظم الدخل. لذلك يضيف المحلل إلى الجدول المحوري قيمة ثانية بعملية العدّ (COUNTA في Sheets أو Count في Excel) بجوار SUM، فيرى البعدين معاً.

ثم متوسط قيمة الطلب: =AVERAGE(D2:D13) يعطي 160 جنيهاً، و=MEDIAN(D2:D13) يعطي 105. الفرق كبير لأن طلبي الحقائب (400 و650) يسحبان المتوسط إلى أعلى، بينما عشرة طلبات من اثني عشر قيمتها 150 جنيهاً أو أقل. لو قيل لموظف جديد «الطلب المعتاد 160 جنيهاً» لأخذ صورة مضللة؛ الوسيط يصف الطلب المعتاد، والمتوسط مفيد لتقدير الإيراد المتوقع من عدد معين من الطلبات.

السؤال الثاني عن واتساب. إجمالي القناتين متقارب: 950 للمحل و970 لواتساب، لكن 650 من إيراد واتساب جاءت من طلب حقيبة واحد. بدون هذا الطلب يصبح إيراد واتساب 320 جنيهاً من أربعة طلبات. استنتاج «واتساب يعادل المحل» إذن هش ويعتمد على طلب واحد كبير، وفي عينة صغيرة كهذه يجب أن تُقال هذه الحقيقة صراحة في الخلاصة.

الرسم المناسب للسؤال الأول رسم أعمدة أفقي للإيراد حسب المنتج مرتب تنازلياً، ومكتوب على كل عمود عدد طلباته، بعنوان «الحقائب: طلبان فقط و55% من الإيراد». ويمكن إنشاؤه مباشرة من الجدول المحوري في البرنامجين.

الخلاصة المكتوبة لصاحب المكتبة:
• النتيجة: الحقائب تحقق نحو 55% من الإيراد من طلبين، والدفاتر نصف الطلبات ونحو 36% من الإيراد.
• الطلب المعتاد: وسيط قيمة الطلب 105 جنيهات، والمتوسط 160 بسبب طلبات الحقائب.
• التوصية: إبراز الحقائب في الواجهة، مع إبقاء الدفاتر قرب المدخل لأنها تجلب الزيارات المتكررة.
• واتساب: لا قرار بالتوظيف الآن؛ إيراده يعتمد على طلب واحد كبير، وتُراجع الأرقام بعد شهرين من البيانات.
• القيود: 12 طلباً فقط، وبيانات فترة قصيرة، ولا معلومات عن تكلفة المنتجات أو هامش الربح.

  • الجدول المحوري يلخص بلا معادلات، وSUMIFS تتحقق من خلاياه.
  • عدد الطلبات والإيراد مقياسان مختلفان، فاعرضهما معاً.
  • حين يبتعد المتوسط عن الوسيط، ابحث عن الطلبات الكبيرة التي تسحبه.
  • النتيجة التي يصنعها صف واحد تُذكر صراحة في القيود.

مخطط

12 طلباً خاماً
جدول محوري (منتج × قناة)
تحقق: SUMIFS = خلية المحور
عدد + إيراد + متوسط + وسيط
رسم + خلاصة بتوصية وقيود

مختبر: الجدول المحوري للمكتبة

أدخل الطلبات الاثني عشر وأنشئ الجدول المحوري. تحقق أن الإجمالي 1920، ودفاتر المحل 460، وAVERAGE يعطي 160 وMEDIAN يعطي 105. ثم احذف طلب الحقيبة 650 ولاحظ كيف يتغير ترتيب القناتين.

مهمة عملية

أنشئ بيانات خيالية لمتجر من 30 طلباً بأعمدة المنتج والقناة والمبلغ، وأجب عن سؤالين بجدول محوري وSUMIFS. النتيجة المقبولة: خلية واحدة متطابقة بالطريقتين، ومتوسط ووسيط مع تفسير الفرق، وخلاصة من خمسة أسطر فيها توصية وقيود.

اختبر فهمك (1/3)

في عينة المكتبة، أي منتج حقق أعلى إيراد؟

اختبر فهمك (2/3)

متوسط قيمة الطلب 160 والوسيط 105. ماذا يعني ذلك غالباً؟

اختبر فهمك (3/3)

خلية «دفاتر/محل» في الجدول المحوري تعرض 460. ما أفضل طريقة للتحقق منها؟

للاستزادة: Google Sheets: إنشاء الجداول المحورية واستخدامها · Microsoft: إنشاء PivotTable · Microsoft: دالة SUMIFS · Google Sheets: دالة MEDIAN

10. المشروع النهائي — تحليل بياناتك

الهدف: تسلّم تحليلاً كاملاً: سؤال، وجدول نظيف بسجل، وملخصات، ورسمان، واستعلام SQL بالربط، وخلاصة عربية بقيود.

المشروع النهائي تحليل كامل تسلّمه لشخص لم يشارك فيه، فيفهم السؤال والنتيجة وحدودها من صفحة واحدة ورسمين. يجمع المشروع مهارات المسار كلها: سؤال قابل للقياس، وجدول مرتب ونظيف مع سجل تنظيف، وملخصات إحصائية مناسبة لنوع كل عمود، ورسم يجيب عن السؤال، واستعلام SQL واحد على الأقل فيه ربط بين جدولين، وخلاصة عربية مكتوبة.

اختر سؤالاً من محيطك تملك بياناته أو تستطيع جمعها بإذن أصحابها: مصروف البيت الشهري حسب البند، أو استهلاك الكهرباء من فواتير سنة كاملة، أو مبيعات مشروع صغير لأحد أفراد العائلة، أو استبيان مجهول الهوية بين زملائك. الشرط أن يكون السؤال مقارنة أو اتجاهاً يُقاس، مثل «في أي أيام الأسبوع تزيد المبيعات؟»، وألا يقل الجدول عن 30 صفاً حتى يكون للأرقام معنى أولي.

قائمة التسليم:
• ورقة خام محفوظة كما جُمعت، وورقة نظيفة، وسجل تنظيف بعدد الصفوف قبل كل خطوة وبعدها.
• عمود محسوب واحد على الأقل، وجدول محوري أو SUMIFS للتجميع.
• متوسط ووسيط للعمود الرقمي الرئيسي، مع تعليق إن اختلفا كثيراً.
• رسمان من نوعين مختلفين، عنوان كل منهما يذكر استنتاجاً.
• استعلام SQL فيه JOIN وGROUP BY، مع جدول نتيجته.
• خلاصة من نصف صفحة: السؤال، والبيانات، والنتيجة، والتوصية، والقيود.

مثال محلول بأرقام خيالية: مخبز صغير في طنطا سجّل عدد الأرغفة المباعة يومياً لمدة 28 يوماً في جدول daily_sales بعمودين day وloaves، وأنشأ جدولاً ثانياً calendar فيه التاريخ واسم اليوم في الأسبوع. فصل الجدولين يسمح بإضافة معلومات أخرى عن الأيام لاحقاً، مثل الإجازات، دون تعديل جدول المبيعات:

SELECT c.weekday, COUNT(*) AS days, ROUND(AVG(s.loaves), 1) AS avg_loaves
FROM daily_sales AS s
JOIN calendar AS c ON s.day = c.day
GROUP BY c.weekday
ORDER BY avg_loaves DESC;
-- الجمعة | 4 | 410.0
-- الخميس | 4 | 335.0
-- السبت  | 4 | 305.0
-- ... وأربعة أيام أخرى بمتوسط 290 لكل منها تقريباً

قبل كتابة الخلاصة يتحقق صاحب المشروع من ثلاثة أشياء: أن عدد الأيام في كل مجموعة أربعة فعلاً فلم يضِع يوم في الربط بسبب تاريخ مكتوب بصيغة مختلفة، وأن الوسيط قريب من المتوسط في كل يوم فلا توجد قيمة شاذة تصنع الفرق وحدها، وأن أيام الجمعة الأربعة لم تتزامن مع حدث استثنائي مثل عيد أو مناسبة في الحي.

الخلاصة كما تُسلَّم:
السؤال: هل تختلف مبيعات الخبز حسب يوم الأسبوع؟
البيانات: 28 يوماً متتالياً، وعدد الأرغفة المباعة يومياً من دفتر المخبز.
النتيجة: متوسط يوم الجمعة 410 أرغفة مقابل 300 في المتوسط لبقية الأيام، أي أعلى بنحو 37%.
التوصية: زيادة عجين الجمعة تدريجياً، بنحو 50 رغيفاً في البداية، مع تسجيل الأرغفة غير المباعة.
القيود: أربعة أيام جمعة فقط، ولا بيانات عن الطقس أو المناسبات، والأرقام لمخبز واحد.

قسم القيود يرفع ثقة القارئ بالتحليل: حين يرى أنك تعرف ما لا تثبته بياناتك، يصدّق ما تقول إنها تثبته. أربعة أيام جمعة عينة صغيرة، والفرق قد يتغير في شهر فيه امتحانات أو إجازة طويلة. لذلك جاءت التوصية تدريجية وقابلة للتراجع، ومعها مقياس واضح للحكم عليها بعد أسابيع.

اختبار أخير قبل التسليم: أعطِ الخلاصة والرسمين لشخص لم يشارك في العمل دون أي شرح، واطلب منه أن يعيد النتيجة والتوصية بكلماته. إن أخطأ، فراجع العرض أولاً: عنوان الرسم، أو ترتيب الفقرات، أو رقماً بلا وحدة. وتجنب إغراق التقرير بعشرة رسوم؛ ضع الدليل الأقوى في المتن والباقي في ملحق.

التسليم: رابط الجدول بصلاحية عرض فقط بعد حذف أي بيانات شخصية، وملف الاستعلامات بامتداد sql، وملف PDF للخلاصة. أعد تشغيل استعلاماتك على نسخة نظيفة من البيانات قبل التسليم، وتأكد أن كل رقم مكتوب في الخلاصة هو ما تنتجه الاستعلامات والمعادلات فعلاً.

  • المشروع الجيد يبدأ بسؤال مقارنة قابل للقياس وجدول لا يقل عن 30 صفاً.
  • تحقق من أعداد المجموعات بعد كل ربط حتى لا تضيع صفوف بصمت.
  • الخلاصة: سؤال، وبيانات، ونتيجة برقم، وتوصية واحدة، وقيود صريحة.
  • اختبر الخلاصة على قارئ لم يشارك، وأصلح العرض إن أساء فهمها.

مخطط

سؤالجمع بإذنخام + نظيف + سجل
ملخصات (متوسط/وسيط) + محوري
SQL: JOIN + GROUP BY
رسمان بعناوين استنتاجية
خلاصة: نتيجة · توصية · قيود

مختبر: اختبار القارئ الغريب

أعطِ خلاصتك ورسميك لشخص لم يشارك، وامنحه دقيقتين، ثم اطلب منه أن يكتب النتيجة والتوصية في جملتين. قارن ما كتبه بما قصدته وعدّل العرض.

مهمة عملية

سلّم مشروعاً كاملاً وفق قائمة التسليم. النتيجة المقبولة: 30 صفاً على الأقل، وسجل تنظيف، ومتوسط ووسيط، ورسمان بعنوانين استنتاجيين، واستعلام بـ JOIN وGROUP BY مع نتيجته، وخلاصة نصف صفحة فيها قسم قيود.

اختبر فهمك (1/3)

أي عنصر في خلاصة المشروع النهائي يرفع ثقة القارئ بالنتيجة؟

اختبر فهمك (2/3)

استعلام الربط أعطى 3 أيام للجمعة بدل 4. ما أول ما تفحصه؟

اختبر فهمك (3/3)

أعطيت الخلاصة لشخص لم يشارك فأعاد النتيجة خطأ. ما الخطوة الأنسب؟

للاستزادة: SQLite: جملة SELECT والربط · PostgreSQL: الاستعلام من جدول · Datawrapper: اختيار نوع الرسم · Google Drive: مشاركة الملفات بصلاحيات محددة

مراجع رسمية لهذا المسار

أنت محلل بيانات مبتدئ

اعرض تحليلك في المحفظة — التالي: السحابة أو التجارة الرقمية.