ברוכים הבאים לשיעור המבוא לויזואליזציית נתונים, יחידה קריטית בקורס "תכנות וניתוח נתונים בשפת פייתון" (20606). ביחידה זו נלמד כיצד להציג נתונים בצורה גרפית אפקטיבית באמצעות ספריות Matplotlib ו-Seaborn. היכולת להמחיש נתונים היא מיומנות חיונית לכל מדען נתונים או מתכנת, והיא מאפשרת הבנה מעמיקה יותר של דפוסים, מגמות וחריגים בנתונים. הבחינות בקורס זה מדגישות הבנה מעשית ויכולת יישום, ולכן נתמקד לא רק ב"איך" אלא גם ב"מתי" ו"למה" להשתמש בכל כלי ובכל סוג גרף.
יסודות Matplotlib: הבסיס לויזואליזציה בפייתון
Matplotlib היא ספריית הליבה לשרטוט גרפים בפייתון, והיא משמשת בסיס לספריות רבות אחרות, כולל Seaborn. הבנה טובה של Matplotlib חיונית לשליטה מלאה בויזואליזציה.
ממשק מונחה-עצמים מול pyplot
בעוד ש-matplotlib.pyplot מאפשר יצירת גרפים מהירה, הממשק מונחה-העצמים (Object-Oriented, OO) מספק שליטה עמוקה יותר על כל רכיבי הגרף, ומועדף לפיתוח יישומים מורכבים או גרפים מרובים.
- pyplot:
plt.plot(x, y),plt.title('Title'). פועל על ה-Figure וה-Axes הנוכחיים באופן גלובלי. - ממשק OO:
fig, ax = plt.subplots(),ax.plot(x, y),ax.set_title('Title'). מאפשר עבודה מפורשת עם אובייקטי Figure ו-Axes ספציפיים.
Seaborn: ויזואליזציה סטטיסטית מתקדמת
Seaborn היא ספרייה הבנויה על Matplotlib ומספקת ממשק ברמה גבוהה יותר ליצירת גרפים סטטיסטיים אטרקטיביים ואינפורמטיביים. היא משתלבת היטב עם Pandas DataFrames ומפשטת את תהליך הויזואליזציה של נתונים מורכבים.
יתרונות Seaborn
- פשטות: קוד קצר יותר ליצירת גרפים סטטיסטיים מורכבים.
- אסתטיקה: עיצובים מוגדרים מראש ואסתטיים יותר, המשפרים את קריאות הגרף.
- אינטגרציה עם Pandas: עבודה חלקה עם DataFrames, כולל טיפול אוטומטי בנתונים חסרים וקיבוץ.
- גרפים סטטיסטיים: מגוון רחב של גרפים המיועדים במיוחד לניתוח סטטיסטי (למשל, box plots, violin plots, heatmaps).
Matplotlib
ספריית בסיס, שליטה עמוקה ופרטנית על כל אלמנט בגרף. מתאימה לכל סוגי הגרפים ולשליטה מלאה. דורשת יותר קוד לגרפים מורכבים.
Seaborn
בנויה על Matplotlib, ממשק ברמה גבוהה, מצוינת לגרפים סטטיסטיים, עיצובים אסתטיים וקוד קצר יותר. פחות גמישה לשליטה בפרטים הקטנים ללא ירידה לרמת Matplotlib.
בחירת הגרף הנכון והתאמה אישית
בחירת סוג הגרף המתאים היא קריטית להעברת המסר הנכון מהנתונים ולהצגתם באופן ברור ויעיל.
סוגי גרפים נפוצים
- גרף פיזור (Scatter Plot): מציג קשר בין שני משתנים רציפים. טוב לזיהוי מתאמים, קבוצות וחריגים.
- גרף קווי (Line Plot): מציג מגמות לאורך זמן או סדר. אידיאלי לסדרות עתיות או להצגת התפתחות.
- היסטוגרמה (Histogram): מציגה את התפלגות התדירויות של משתנה רציף יחיד. עוזרת להבין את צורת ההתפלגות.
- גרף עמודות (Bar Plot): משווה כמויות בין קטגוריות שונות או מציג ספירות.
- גרף קופסה (Box Plot): מציג סיכום של התפלגות נתונים (חציון, רביעונים, טווח, חריגים). מצוין להשוואת התפלגויות בין קבוצות.
- מפת חום (Heatmap): מציגה מטריצת נתונים שבה הערכים מיוצגים על ידי צבעים. שימושית למטריצות מתאם או נתונים טבלאיים גדולים.
התאמה אישית (Customization)
כדי שגרף יהיה ברור ואינפורמטיבי, יש להתאים אותו אישית. אלמנטים חשובים:
- כותרת (Title):
plt.title()אוax.set_title(). - תוויות צירים (Labels):
plt.xlabel(),plt.ylabel()אוax.set_xlabel(),ax.set_ylabel(). - מקרא (Legend):
plt.legend()אוax.legend(). - צבעים (Colors), סמנים (Markers), סגנונות קו (Linestyles).
- גודל Figure:
plt.figure(figsize=(width, height))אוfig.set_size_inches(width, height). - שמירת גרף:
plt.savefig('my_plot.png').
sns.scatterplot(...)), עדיין ניתן להוסיף כותרת או לשנות תוויות צירים באמצעות plt.title() או ax.set_xlabel(). הבנה זו מאפשרת גמישות אדירה ונדרשת לעיתים קרובות בשאלות בחינה המשלבות את שתי הספריות.טיפים לבחינה וטעויות נפוצות
- תרגול קוד: הבחינה תכלול ככל הנראה קטעי קוד. תרגלו כתיבה, השלמה וניפוי שגיאות בקוד ויזואליזציה. שימו לב לפרמטרים הנפוצים של פונקציות השרטוט.
- בחירת גרף: תהיו מוכנים להסביר מדוע בחרתם סוג גרף מסוים עבור נתונים נתונים (למשל, "מדוע גרף קופסה מתאים להשוואת התפלגות ציונים בין קבוצות סטודנטים?"). נמקו את בחירתכם.
- הבחנה בין Figure ל-Axes: זוהי נקודה חוזרת בבחינות. ודאו שאתם מבינים מתי להשתמש בפונקציות של
pltומתי בשיטות של אובייקטax. - טעויות נפוצות:
- שכחתם
plt.show()להצגת הגרף. - ניסיון להשתמש בפונקציות
plt.xlabel()לאחר יצירת גרף עם ממשק OO של Matplotlib ובמקום זאת הייתם צריכים להשתמש ב-ax.set_xlabel(). - שימוש בגרף לא מתאים לסוג הנתונים או לשאלה העסקית.
- אי מתן כותרות ותוויות ברורות לגרף.
- שכחתם
שאלות לדיון
- הסבירו את ההבדלים העיקריים בין Matplotlib ל-Seaborn, ומתי תבחרו להשתמש בכל אחת מהן.
- תיאורטית, כיצד הייתם מציגים את התפלגות הגילאים של אוכלוסייה מסוימת, ואת הקשר בין גיל להכנסה? אילו סוגי גרפים מתאימים לכל מטרה, ומדוע?
- תארו את השלבים ליצירת גרף פיזור באמצעות Seaborn, ולאחר מכן כיצד תוסיפו לו כותרת, תוויות צירים ומקרא באמצעות Matplotlib.
- מהם היתרונות של שימוש בממשק מונחה-העצמים של Matplotlib לעומת מודול
pyplot, במיוחד בעת יצירת מספר גרפים באותו Figure?
נקודות לתשובת מודל
- Matplotlib vs. Seaborn: Matplotlib היא ספריית בסיס, גמישה מאוד, שליטה עמוקה על כל פרט. Seaborn בנויה עליה, מספקת ממשק ברמה גבוהה, מתמחה בגרפים סטטיסטיים, קוד קצר יותר, אסתטיקה משופרת. נבחר Matplotlib לשליטה מלאה או גרפים לא סטטיסטיים מובהקים; נבחר Seaborn לניתוח סטטיסטי מהיר וגרפים יפים, במיוחד עם DataFrames.
- בחירת גרף: התפלגות גילאים – היסטוגרמה (
sns.histplotאוplt.hist) או גרף צפיפות (sns.kdeplot), המציגים את תדירות הופעת הגילאים. קשר בין גיל להכנסה – גרף פיזור (sns.scatterplotאוplt.scatter) כדי לזהות מתאם, קבוצות או דפוסים בין שני משתנים רציפים. - קוד משולב: יש ליצור Figure ו-Axes באמצעות
fig, ax = plt.subplots(). להשתמש ב-sns.scatterplot()עם הפרמטרax=axכדי לשרטט על ה-Axes הספציפי. לאחר מכן, להשתמש בשיטות של אובייקט ה-Axes (למשל,ax.set_title('כותרת הגרף'),ax.set_xlabel('תווית ציר X'),ax.set_ylabel('תווית ציר Y'),ax.legend()) להתאמה אישית של הגרף. לבסוף, להציג את הגרף עםplt.show(). - ממשק OO מול pyplot: ממשק OO (
fig, ax = plt.subplots()) מספק שליטה מפורשת על אובייקטי Figure ו-Axes, מאפשר עבודה עם מספר גרפים באותו Figure בקלות (למשל,fig, axes = plt.subplots(1, 2)), ומונע תלות במצב הגלובלי של pyplot. הוא מועדף לפיתוח קוד מורכב, מודולרי וניתן לתחזוקה. pyplot נוח לשרטוטים מהירים וחד-פעמיים כאשר אין צורך בשליטה עמוקה.