# מערך שיעור: Transform — merge, groupby, agg, apply📋 מערך מרצה

משך: 2.5 שעות אקדמיות (113 דקות).

מטרת השיעור: הסטודנטים ישלבו DataFrames עם merge ויחשבו סטטיסטיקה לפי קבוצה עם groupby+agg.

בסוף השיעור הסטודנטים צריכים: לשלב שני DataFrames עם merge, לחשב סטטיסטיקה מצטברת עם groupby+agg, ולהשתמש ב-apply כשאין פונקציה מובנית מתאימה.

דגש קריטי: קשרו כל כלי לתחביר מקביל שכבר נלמד (merge↔$lookup/JOIN, groupby+agg↔GroupBy+Sum/Count) — זה הרעיון הפדגוגי המרכזי של השיעור.

---

## מהלך השיעור

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 5 דקות | הזכירו $lookup ממונגו, GroupBy מ-LINQ |
| הרעיון: merge | 25 דקות | JOIN בין שני DataFrames, on= |
| הרעיון: groupby (לבד) | 10 דקות | הראו שזה "לא עושה כלום" בלי agg |
| agg | 25 דקות | חישובים מצטברים, כמה חישובים יחד |
| apply | 20 דקות | פונקציה מותאמת, מתי כדאי ומתי לא |
| תרגול מודרך | 28 דקות | תרגיל 1+2 + התחלת פרויקט מסכם |

---

## דגשים להעברת השיעור

- זהו השיעור שבו "כל הפאזל" (JOIN, GroupBy מכל הטכנולוגיות שנלמדו) מתחבר סופית — הדגישו את זה במפורש: "זו הפעם השלישית שאתם לומדים את אותו רעיון, בשפה שלישית".
- הראו במפורש ש-`groupby` לבד לא "עושה" כלום — `df.groupby("X")` מודפס נראה כמו Object מוזר, לא טבלה — זה מבלבל מתחילים.
- `apply` שווה אזהרת ביצועים מפורשת — לא "הכלי הראשון לנסות", אלא הפתרון כשאין ברירה.

---

## מושגים

**`merge`** — JOIN בין DataFrames לפי מפתח משותף.
**`groupby`** — הכנת קיבוץ, לא מחשב לבד.
**`agg`** — חישוב מצטבר על קבוצות.
**`apply`** — פונקציה מותאמת-אישית על כל שורה/עמודה.

---

## תרגיל חשיבה

**שאלת פתיחה:** "עד עכשיו למדתם JOIN וקיבוץ ב-3 טכנולוגיות שונות — LINQ (C#), MongoDB Aggregation, ועכשיו Pandas. מה זהה בין כולן, ומה שונה?"

**מהלך:** תנו לסטודנטים לבנות טבלת השוואה קצרה בעצמם (LINQ: Where/GroupBy; Mongo: $match/$group/$lookup; Pandas: filter/groupby+agg/merge). הובילו לתובנה המרכזית של כל הקורס עד כאן: הבעיות העסקיות (סינון, קיבוץ, שילוב מקורות) חוזרות על עצמן בכל טכנולוגיה — רק התחביר משתנה.

**מה המרצה מראה בסוף:** הריצו את **אותה** שאילתה בדיוק (למשל "סכום הזמנות לפי לקוח") בשלוש הטכנולוגיות זו אחרי זו (אם יש זמן והכנה מראש) — LINQ, Mongo Aggregation, Pandas groupby+agg — והראו שהתוצאה הסופית זהה, רק הדרך שונה.
