Smart-World Surf

יחידה 10: ויזואליזציית נתונים

הצגת נתונים בצורה גרפית באמצעות Matplotlib ו-Seaborn.

ברוכים הבאים לשיעור המבוא לויזואליזציית נתונים, יחידה קריטית בקורס "תכנות וניתוח נתונים בשפת פייתון" (20606). ביחידה זו נלמד כיצד להציג נתונים בצורה גרפית אפקטיבית באמצעות ספריות Matplotlib ו-Seaborn. היכולת להמחיש נתונים היא מיומנות חיונית לכל מדען נתונים או מתכנת, והיא מאפשרת הבנה מעמיקה יותר של דפוסים, מגמות וחריגים בנתונים. הבחינות בקורס זה מדגישות הבנה מעשית ויכולת יישום, ולכן נתמקד לא רק ב"איך" אלא גם ב"מתי" ו"למה" להשתמש בכל כלי ובכל סוג גרף.

יסודות Matplotlib: הבסיס לויזואליזציה בפייתון

Matplotlib היא ספריית הליבה לשרטוט גרפים בפייתון, והיא משמשת בסיס לספריות רבות אחרות, כולל Seaborn. הבנה טובה של Matplotlib חיונית לשליטה מלאה בויזואליזציה.

Figure: האובייקט ברמה העליונה המכיל את כל רכיבי הגרף (צירים, כותרות, תווית, וכו'). ניתן לחשוב עליו כעל "קנבס" או "דף נייר" שעליו מציירים.
Axes (צירים): אזור השרטוט בפועל בתוך ה-Figure. כל Figure יכול להכיל Axes אחד או יותר. ה-Axes הוא המקום שבו הנתונים מוצגים (למשל, גרף פיזור, גרף קווי).
pyplot: מודול בתוך Matplotlib המספק ממשק פשוט בסגנון MATLAB ליצירת גרפים. הוא נוח לשימוש מהיר, אך לרוב מומלץ להשתמש בממשק מונחה-עצמים לשליטה טובה יותר.

ממשק מונחה-עצמים מול 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: ספריית ויזואליזציה בפייתון המתמחה בגרפים סטטיסטיים, המפשטת יצירת גרפים מורכבים ומעוצבים היטב, במיוחד עבור נתונים בפורמט DataFrame.

יתרונות 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').
הבנת הקשר בין Matplotlib ל-Seaborn: זוהי נקודה קריטית לבחינה. Seaborn בונה על Matplotlib. המשמעות היא שניתן להשתמש בפונקציות של Matplotlib כדי להתאים אישית גרפים שנוצרו באמצעות Seaborn. לדוגמה, לאחר יצירת גרף עם Seaborn (למשל, 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 נוח לשרטוטים מהירים וחד-פעמיים כאשר אין צורך בשליטה עמוקה.
מצאתם טעות או שחסר משהו?
→ הקודמת
טרנספורמציה ואיחוד נתונים ב-Pandas
הבאה ←
עבודה עם נתונים חיצוניים