7 דרכים ליצירת תרשימים אטרקטיביים ומשוכללים באמצעות seaborn ופייתון

מחבר:
בתאריך:

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

 

ייבוא הספריות

Seaborn דורש את הספריות הבאות לפעולתו:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
  • Numpy - היא ספרייה לעבודה עם מערכים רב-מימדיים המכילה פונקציות מתמטיות מועילות במיוחד.
  • Pandas - מאפשרת לעבוד עם מידע טבלאי בדומה לאקסל.
  • Matplotlib היא הספרייה האם של seaborn המשמשת להצגת גרפים ותרשימים.

 

מסדי הנתונים

Seaborn מאפשרת גישה למסדי נתונים רבים. הפקודה הבאה תציג אותם:

sns.get_dataset_names()
['anagrams',
 'anscombe',
 'attention',
 'brain_networks',
 'car_crashes',
 'diamonds',
 'dots',
 'exercise',
 'flights',
 'fmri',
 'gammas',
 'geyser',
 'iris',
 'mpg',
 'penguins',
 'planets',
 'tips',
 'titanic']

במדריך נעבוד עם כמה מסדי נתונים. נטען את הראשון:

tdf = sns.load_dataset('tips')

מה במסד הנתונים?

print(tdf.shape)
tdf.head()
(244, 7)

224 שורות ו-7 עמודות.

table representing the tips seaborn dataset

מסד הנתונים מכיל נתונים אודות מספר הסועדים, סכום החשבון, היום בשבוע, והטיפ (תשר) ששילמו בסוף הארוחה. מעניין אילו נתונים משפיעים במיוחד על גובה התשלום ועל התשר?

 

1. תרשימי פיזור

כדי לראות כיצד החשבון הכולל משפיע על גודל הטיפ נשתמש בפונקציה- relplot (relational plot). הדורשת 3 פרמטרים:

sns.relplot(x='total_bill', y='tip', data=tdf)
  • x - הוא הפרמטר העצמאי.
  • y - הוא הפרמטר התלוי.
  • data - הוא מסד הנתונים.

התוצאה:

demonstrating the basic function of relplot by seaborn

  • ניתן להסיק מהגרף שהטיפ גדל עם החשבון וגם שקיימת שונות רבה בנתונים.

מעניין לראות כיצד משפיעות הקטגוריות השונות על גובה הטיפ. לדוגמה, כיצד הטיפ מושפע ממינו של האדם. נשתמש בפרמטר 'hue' כדי לצבוע את האפשרויות השונות בקטגוריה sex בגוון שונה:

sns.relplot(x='total_bill', y='tip', data=tdf, hue='sex')

seaborn plot with relplot and the hue parameter to recolor the options of a category

  • זכרים קיבלו את הצבע הכחול ונקבות את הירוק.

אנו יכולים להדגיש עוד יותר את ההבדל בין האפשרויות בכל קטגוריה באמצעות הפרמטר 'style':

sns.relplot(x='total_bill', y='tip', data=tdf, hue='sex', style='sex')

seaborn plot with relplot and the style parameter to give the markers a different shape depending on the option that they represent. Females were assigned the x marker while males got the dot.

  • לנקבות הוקצה הסמן x והזכרים קיבלו נקודה.
  • מגוון הסמנים יכול לעזור להדגיש עוד יותר את ההבדלים בין האפשרויות השונות בכל עמודה.

ניתן להשתמש בפרמטרים 'hue' ו-'style' בשביל האפשרויות בתוך עמודה קטגורית וגם כדי לראות יותר ממשתנה קטגורי אחד בתוך אותו תרשים.

לדוגמה, נשתמש בפרמטר 'hue' בשביל המשתנה sex וב-'style' בשביל smoker:

sns.relplot(x='total_bill', y='tip', data=tdf, hue='sex', style='smoker')

The hue and style parameter may represent different columns. Eg, color for sex and style for smoker.

הפרמטר 'size' יכול להיות שימושי במיוחד עבור עמודות המבטאות גדלים (דוגמת גודל אוכלוסייה או מספר סועדים). נסגנן את העמודה size (מספר הסועדים) ממסד הנתונים באמצעות הפרמטר 'size' של הפונקציה:

sns.relplot(x='total_bill', y='tip', data=tdf, hue='sex', size='size')

Using the size parameter of the relplot to represent the different values of a numeric column

הגדלים נראים דומים מדי. נגדיל את טווח השונות ביניהם על ידי שימוש בפרמטר 'sizes':

sns.relplot(x='total_bill', y='tip', data=tdf, hue='sex', size='size', sizes=(5, 150))

The sizes might be too similar, here I change the range of sizes that seaborn uses by using the 'sizes' parameter

  • הגדלים נראים מגוונים יותר הודות לשימוש בפרמטר 'sizes'.
  •  עכשיו ברור יותר שהחשבון והטיפ בסוף הארוחה גדלים ככל שמספר הסועדים גדל.

 

2. תרשים קווי line plot

נייבא את מסד הנתונים penguins של seaborn ע"מ להשתמש בו בחלק זה של המדריך.

pdf = sns.load_dataset('penguins')

מה במסד הנתונים?

print(pdf.shape)
pdf.head()
(344, 7)

מסד הנתונים מכיל 344 שורות ו-7 עמודות. נציץ בהם:

The 5 first rows in the penguins seaborn dataset

מסד הנתונים מציג נתונים עבור זנים של פינגווינים באיים שונים. כולל תיאור תכונות גופניות דוגמת אורך הסנפיר והמקור ומשקל הגוף.

משתמשים בפונקציה lineplot כדי לשרטט גרף קווי.

נשתמש בפונקציה lineplot כדי לתאר את השתנות אורך הסנפיר כפונקציה של משקל הגוף. הפונקציה דורשת את ערכי x ו-y ואת ציון מקור הנתונים.

sns.lineplot(x='body_mass_g', y='flipper_length_mm',  data=pdf)

seaborn lineplot function - to plot the flipper length against the body mass, specify the x and y axes and the data source.

  • מגמת העלייה מצביעה על מתאם חיובי בין אורך הסנפיר למסת הגוף.
  • מכיוון שהנתונים חוזרים על עצמם הקו מייצג את הממוצע והשוליים האפורים את סטיית התקן עבור רווח בר סמך של 95%.

ייתכן שהתרשים שתקבלו בשיטה המתוארת לעיל יהיה קטן יותר. נשנה את גודל התרשים:

from matplotlib import rcParams
 
# figure size in inches
rcParams['figure.figsize'] = 12,7.4

מעניין לראות כיצד הקורלציה משתנה בהתאם למין הפינגווין. נשתמש בפרמטר hue כדי לצבוע את המינים בגוון שונה:

sns.lineplot(x='body_mass_g', y='flipper_length_mm', data=pdf, hue='species')

Use the hue parameter with the seaborn lineplot function to show the influence of the different species on the correlation

  • הפינגווינים המשתייכים לזנים הירוק והכחול הם בעלי גדלים זהים. שניהם קטנים יותר מהזן האדום.

כדי לחדד את ההבדלים בין המינים נשתמש בפרמטר style כדי לתת לכל זן סגנון קו שונה.

sns.lineplot(x='body_mass_g', y='flipper_length_mm', data=pdf, hue='species', style='species')

Here I used the style parameter to give the different species a different line style when using seaborn library

כדי להוסיף ולשנות את המרקרים נשתמש בפרמטר markers:

sns.lineplot(x='body_mass_g', y='flipper_length_mm', data=pdf, hue='species', style='species', markers=True)

To change the markers we use the markers parameter with the lineplot function of seaborn

כדי לשלב בתרשים יותר מקטגוריה אחת אנחנו יכולים להשתמש ב-hue עבור פרמטר אחד וב-style עבור פרמטר שני.

לדוגמה, נשתמש ב-hue עבור הזנים וב-style עבור האיים השונים.

sns.lineplot(x='body_mass_g', y='flipper_length_mm', data=pdf, hue='species', style='island', markers=True)

By using the hue and style parameters for different categories we can show 2 categories in the same plot

במבט אחד אנחנו יכולים לתפוס את השתנות הקורלציות בהתאם לאיים ולזנים.

כדי להסתיר את גבולות הרווח בר סמך מהאיור נשתמש בפרמטר ci:

sns.lineplot(x='body_mass_g', y='flipper_length_mm', data=pdf, hue='species', style='species', ci=False)

To remove the confidence intervals from the seaborn plot use the ci parameter.

נשפר את מראה התרשים:

  • נתאים את גודל התמונה
  • נשנה את הקונטקסט
  • נשנה את יחס ממדי הכיתוב
plt.figure(figsize=(12,7.4))
sns.set_context('paper', font_scale=1.6)
 
sns.lineplot(x='body_mass_g', y='flipper_length_mm', data=pdf, hue='species', style='species', ci=False)

Use the set_context method of seaborn to change the style and figure method of matplotlib to set the plot dimensions

  • המתודה set_context() יכולה לקבל את הערכים: 'notebook', 'paper', 'talk', 'poster' תלוי בהקשר.
  • עד סוף המדריך אתמיד עם הערך ברירת המחדל 'notebook'.

הפונקציה set_style() מאפשרת לנו להגדיר את הסגנון.

sns.set_style('whitegrid', {'figure.figize':(12,7), 'font_scale':1.6})
 
sns.lineplot(x='body_mass_g', y='flipper_length_mm', data=pdf,
            hue='species', style='species', ci=False)

Use the set_theme method of seaborn to change the plot theme

האפשרויות של המתודה set_style() הם: 'white', 'dark', 'whitegrid', 'darkgrid' או 'ticks'.

 

3. תרשימים לתיאור רגרסיה

תרשים מסוג 'lmplot' מוסיף קו רגרסיה לתרשים פיזור.

בחלק זה של המדריך נחזור לעבוד עם מסד הנתונים של טיפים שבו השתמשנו בחלקו הראשון של המדריך.

tdf = sns.load_dataset('tips')

נשתמש בתרשים 'lmplot' כדי ללמוד את השפעת גודל החשבון בסוף הארוחה על גודל התשר.

sns.lmplot(x='total_bill', y='tip', hue='sex', data=tcf)

Use seaborn lmplot function for regression. Here I learn the impact of the total bill on the tip size

נשתמש בפרמטרים הבאים כדי לשפר את מראה התרשים:

sns.lmplot(x='total_bill', y='tip', hue='sex',
          data=tcf,
          markers=['+', 'o'],
          palette='Set1',
          scatter_kws={'s':70, 'alpha': 0.4},
          height=7,
          aspect=1.61)

To improve seaborn lmplot plot I used the parameters: markers, palette, scatter_kws, height, aspect

  • הפרמטר markers משמש לקביעת הצורה
  • הפרמטר palette כדי שנוכל להשתמש בסגנון קיים
  • scatter_kws משמש להגדרת גודל הנקודות (s) והשקיפות (alpha).
  • הפרמטרים height ו-aspect משמשים לקביעת ממדי התרשים.

Matplotlib כולל מגוון של סכימות צבעים שאותם ניתן להזין לפרמטר palette. אפשר לקרוא אודות האפשרויות השונות בתיעוד הרשמי.

נוסיף את הפרמטרים row ו-col כדי להציג תתי תרשימים עבור הקטגוריות.

sns.lmplot(x='total_bill', y='tip', data=tcf,
           row='sex', col='time',
           hue='sex',
           palette='Set1',
           height=3, aspect=1.61)

We use the 'row' and 'col' parameters with seaborn lmplot to create subplots to represent the different categories.

  • בתרשים השורות מתחלקות לפי המינים (זכר ונקבה) והעמודות על פי זמני הארוחות.

 

4. תרשימי התפלגות

4א. היסטוגרמה

אחת הדרכים המקובלות ביותר להציג את התפלגות המידע היא באמצעות היסטוגרמות.

לדוגמה, התפלגות ממדי עלי הכותרת והגבעולים במסד הנתונים של זני פרחים מסוג איריס (Iris dataset).

idf = sns.load_dataset('iris')
print(idf.shape)
idf.head()
(150, 5)

The first 5 rows of the iris dataset.

נשתמש בפונקציה displot כדי ליצור היסטוגרמה. המידע ההכרחי הוא ציר ה-x ומקור המידע.

sns.displot(x='sepal_width', data=idf)

Creating an histogram with seaborn displot

  • עכשיו קל לראות שרוחב עלי הכותרת מציג התפלגות נורמלית.

bin (תרגום חופשי: מיכל אחסון) מאפשר לנו לחלק את המידע במרווחים שווים.

לדוגמה, נחלק את המידע ל-6 חלקים שווים באמצעות הפרמטר bin:

sns.displot(x='sepal_width', data=idf, bins=6)

When drawing histograms with seaborn displot we set the bins number with the 'bins' parameter

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

mean = idf.sepal_width.mean()
med = idf.sepal_width.median()
 
sns.displot(x='sepal_width', data=idf, palette='Set1')
 
plt.axvline(mean, 0, 1, color='red')
plt.axvline(med, 0, 1, color='green')

It can be helpful if we could draw the mean and median on the histogram to learn about the skewness of the distribution. I don't know of a way of doing this with Seaborn so I'm going to use matplotlib.

  • העקומה אינה מוטה.

דרך מצוינת אחרת לתאר את הטיית הנתונים היא באמצעות הוספת עקומת KDE על גבי ההיסטוגרמה. לצורך זה נשתמש בפונקציה distplot עם t במקום ב- displot:

sns.distplot(idf.sepal_width)

One valuable way of estimating the skewness of the distribution when working with seaborn is by adding a kde plot on top of the histogram. For this, we'll use the 'distplot' function instead of 'displot'

 

4ב. תרשים KDE

באופן דומה להצגת התפלגות המידע באמצעות היסטוגרמות ניתן להציג את אותו המידע באמצעות עקומת KDE הממחישה את התפלגות המידע באמצעות עקומת צפיפות רציפה.

נעביר לפונקציה kdeplot את שמה של העמודה שאנו רוצים לתאר:

sns.kdeplot(idf.sepal_width)

kdeplot to show the distribution of sepal width with a probability density curve

  • לא הייתי יכול לקבל עקומה נורמלית מזו אפילו אם הייתי בוחר את הדוגמאות בעצמי.

 

4ג. Pair plots

תרשים pair plot מאפשר לתאר את היחסים בין העמודות המספריות של מסד הנתונים.

נזין לפונקציה pairplot את מסד הנתונים שמעניין אותנו.

sns.pairplot(idf)

Seaborn pairplot function allows us to show the relationships between every two numeric columns in the dataset

  • במסד הנתונים קיימות 4 קטגוריות המודדות את אורך ורוחב עלי הכותרת.
  • שני סוגים התרשימים הם: היסטוגרמה ותרשים פיזור. תרשימי הפיזור מראים את הקשר בין שני משתנים (לדוגמה, הקשר בין אורך ורוחב עלי כותרת). ההיסטוגרמות מוצגות בתאי האלכסון שחוצה את התרשים ומאפשרות לנו לראות את ההתפלגות עבור משתנה יחיד (למשל, התפלגות אורך עלי הכותרת בחלק השמאלי העליון).
  • אנו יכולים לראות קשר חזק בין אורך הגבעול ועלי הכותרת, וכי לממדים של הגבעול יש התפלגות נורמלית בעוד שמימדי הכותרות מוטים שמאלה.

נשתמש בפרמטר 'hue' כדי להוסיף מידע על הקטגוריות בתוך התרשים. לדוגמה, כדי לצבוע את נקודות המידע בהתאם לזן.

sns.pairplot(idf, hue='species')

Here I add the 'hue' parameter to Seaborn pairplot to give different colors to the data points according to the species they belong to in the Iris dataset

  • כשהכנסתי את הפרמטר 'hue' השתנה סוג התרשים שבו משתמשת הפונקציה לתכונות בודדות (מופיעות על האלכסון). תרשים 'KDE' במקום היסטוגרמה.

אנחנו יכולים להוסיף קווי רגרסיה לתרשימי הפיזור על ידי שימוש בפרמטר kind='reg'.

sns.pairplot(idf, hue='species', kind='reg')

By passing the kind='reg' parameter to seaborn pairplot function I was able to overlay regression lines over the scatter plots

תרשים מסוג 'pair plot' עלול לבלבל את הצופה. כדי להפחית את עומס המידע אנחנו יכולים להשתמש בפרמטרים 'x_vars' ו-'y_vars' כדי להגדיר ל-seaborn באילו עמודות להשתמש.

sns.pairplot(idf,
   x_vars=["petal_length", "petal_width"],
   y_vars=["petal_length", "petal_width"],
   hue='species')

Seaborn Pair plots might be too confusing to watch so we can use the parameters x_vars and yvars to determine which numeric columns to plot.

 

5. תרשימים לתיאור קטגוריות

עד כה הסברנו בעיקר כיצד להציג תרשימים עבור נתונים מספריים אולם גם משתנים קטגוריים זוכים לטיפול מסור מצד seaborn.

 

5א. תרשים עמודות

תרשים עמודות מתאר את היחסים הכמותיים בין האפשרויות השונות בקטגוריה.

בחלק זה של המדריך נעבוד עם מסד הנתונים tips. :נטען את מסד הנתונים

tcf = sns.load_dataset('tips')

הפונקציה barplot משמשת להצגת תרשימי עמודות. הפונקציה דורשת שלושה פרמטרים: העמודות על הצירים (x,y) ומסד הנתונים.

sns.barplot(x='day', y='total_bill', data=tcf)

Here I use Seaborn barplot to visualize the tips dataset categories

  • גובה העמודות מתאר את הממוצע.
  • קווי השגיאה הם הקווים האופקיים בראשי העמודות.

נשתמש בפרמטר ci = 0 כדי להסתיר את קווי השגיאה.

sns.barplot(x='day', y='total_bill', data=tcf, ci=0)

To remove the error bars from the seaborn bar plot use the 'ci' parameter with the value of zero.

נוסיף את הקטגוריה 'hue' כדי להבחין בין זכרים לנקבות.

sns.barplot(x='day', y='total_bill', data=tcf, hue='sex')

By adding 'hue' we can see the difference between males and females

  • גברים נוטים לתת טיפים גבוהים יותר.

כדי לשרטט תרשים עמודות אופקי נהפוך את הצירים ונשתמש בפרמטר orient = 'h'.

sns.barplot(x='total_bill', y='day', data=tcf, hue='sex', orient='h')

To generate an horizontal bar plot we use the 'orient' parameter and flip the x and y axes

המדד ברירת המחדל בו משתמש seabron עבור תרשים עמודות הוא הממוצע mean. אנו יכולים להשתמש במדדים אחרים של numpy באמצעות הפרמטר estimator.

sns.barplot(x='day', y='total_bill', data=tcf, estimator=np.median)

shows the median as the estimator of seaborn bar plot

מדדים נוספים בהם ניתן להשתמש הם np.stdev, np.var, np.cov.

 

5ב. תרשים ספירה count plot

תרשים ספירה count plot מציג את מספר הדוגמאות מכל סוג בקטגוריה. לדוגמה, מספר הזכרים והנקבות במסד הנתונים:

# e.g. how many males and females
sns.countplot(x='sex', data=tcf)

use seaborn countplot to visualize the number of males and females

  • במסד הנתונים יש יותר זכרים מנקבות.

 

5ג. box plot

אחת הפונקיות המועילות ביותר של seaborn היא הפונקציה המאפשרת לייצר box plot - המתאר מדדי מרכז והתפלגות - ללא כאבים.

לדוגמה, כיצד משתנה גובה הטיפ ע"פ ימי השבוע?

sns.boxplot(x='day', y='tip', data=tcf)

use seaborn boxplot to demonstrate the tips amount change in the days of the week

השורה החוצה באמצע מסמלת את החציון. התיבה תוחמת את הרביעים השני והשלישי. הזיפים מתארכים כדי להראות את הרביעים הראשון והרביעי. החריגים מוצגים באמצעות יהלומים.

כדי לראות את נקודות המידע עצמם נשתמש ב-swarplot אותו נציג על גבי ה -box plot.

sns.boxplot(x='day', y='tip', data=tcf)
sns.swarmplot(x='day', y='tip', data=tcf, color='black', alpha=0.4)

swarm plot on top of boxplot when using boxplot

הפרמטר 'hue' מאפשר לנו לחלק את התרשים לפי יותר מקטגוריה אחת. לדוגמה, כדי לראות את השפעת המין על הטיפ בימי השבוע השונים:

sns.boxplot(x='day', y='tip', data=tcf, hue='sex')

The hue allows us to further subdivide our data (exp. how the tip amount changes by sex and day of week)

כדי לשנות את סכמת הצבעים נשתמש בפרמטר 'scheme'.

sns.boxplot(x='day', y='tip', data=tcf, hue='sex', color='grey')

To change the color scheme we can use the 'color' parameter.

נשתמש בפונקציה legend של matplotlib כדי למקם את המקרא בתרשים.

sns.boxplot(x='day', y='tip', data=tcf, hue='sex')
plt.legend(loc='upper left')

Use matplotlib legend function to set the legend location

כדי להפוך את ה-box plot לאופקי כל מה שצריך הוא להחליף את הצירים כדי שהקטגוריות יהיו על ציר ה-Y.

sns.boxplot(x='tip', y='day', data=tcf, hue='sex')

To make a horizontal boxplot we need to switch the axes and move the categorical variable to the y axis.

 

5ד. תרשים כינורות violin plot

violin plot משלב בין box plot לתרשים KDE.

sns.violinplot(x='day', y='tip', data=tcf, hue='sex')

Seaborn violin plot is a mix between a box plot and a kde plot

כמו עבור box plot נוסיף swarm plot ע"ג התרשים כדי לראות את נקודות המידע.

sns.violinplot(x='day', y='tip', data=tcf, hue='sex', palette='Set1')
sns.swarmplot(x='day', y='tip', data=tcf, alpha=0.4,hue='sex', palette='Set1')

To see the data points we stack a swarm plot on top of the violin plot

 

6. מפת חום heat map

מפות חום heat maps מאפשרות לנו לייצג בקלות רבה מטריצות של נתונים. דוגמת: confusion matrix, טבלאות ציר ומטריצות של קורלציות.

ניצור מטריצה של קורלציות עבור העמודות המספריות של מסד נתונים iris ונציג בטבלה.

imx = idf[['sepal_width','sepal_length','petal_width','petal_length']].corr()
print(imx)

correlation matrix for the iris dataset with pandas corr function

  • הערכים נעים בין 1 למינוס 1. ככל שהערך קיצוני יותר כך הקורלציה חזקה יותר. קורלציה קרובה ל-0 מצביעה על העדר קשר בין הגדלים.

נצייר את מטריצת הקורלציות באמצעות הפונקציה heatmap. הפרמטר 'annot' קובע האם להציג מספרים בתוך התאים. את סכימת הצבעים נגדיר באמצעות 'cmap'.

sns.heatmap(imx, annot=True, cmap='Blues')

plot the correlations with the 'heatmap' seaborn function. We use the 'annot' parameter to show the values inside each cell. The 'cmap' parameter determines the palette.

דוגמת שימוש נוספת היא טבלת ציר pivot table.

לצורך הדוגמה, נשתמש במסד נתונים המתאר את השינוי במספר הטסים במטוסים במשך שנים וחודשים.

flights = sns.load_dataset('flights')

נשתמש בפונקציה pivot_table() של pandas כדי ליצור את טבלת הציר כשהחודשים מהווים את השורות, השנים את העמודות ומספרי הנוסעים את הערכים.

flights = flights.pivot_table(index='month', columns='year',
                             values='passengers')

נשתמש בפונקציה heatmap לצורך יצירת התרשים.

sns.heatmap(flights, cmap='Blues', linecolor='white', linewidth=1)

Here we see how the year and month influences the number of air travelers with seaborn heatmap function.

  • כמות הנוסעים עלתה מדי שנה.
  • בכל שנה נרשם שיא במספר הנוסעים בחודשי הקיץ. יולי ואוגוסט.

 

כיצד להשתמש ב- facetgrid להצגת תרשימים בתוך מטריצה

הפונקציה facetgrid של seaborn לוקחת את המידע הקטגורי ומייצרת מטריצה של תתי תרשימים המבוססת על האפשרויות השונות של כל קטגוריה.

נשתמש בפרמטר 'col' כדי לקבוע את המשתנה עליו יתבססו עמודות המטריצה, ובפרמטר 'row' עבור השורות.

לדוגמה, עמודות ע"פ הימים ושורות ע"פ מין הסועד עבור מסד הנתונים של הטיפים.

sns.FacetGrid(tdf, col='day', row='sex')

Facetgrid takes the categorical data and creates miniplots depicting each category option.

נוסיף את התרשימים על גבי המטריצה.

לדוגמה, מטריצה המתארת את התפלגות גובה החשבון על פני ימי השבוע וע"פ מין הסועד.

fg = sns.FacetGrid(tdf, col='day', row='sex')
fg.map(sns.distplot, 'total_bill')

I use seaborn facetgrid to show data about total bill and how it changes with the days of the week and sex

 

7. הזוג המנצח matplotlib עם seaborn להצגת תרשימים בתוך מטריצה בגמישות מירבית

facetgrid לא תמיד מספיק גמיש כדי לספק לנו את כל האפשרויות להם אנו זקוקים כשאנו רוצים לייצר מטריצות של תרשימים. הדרך הטובה ביותר להשיג חופש מירבי כשמייצרים מטריצות הוא לשלב את יכולת ייצור המטריצות של matplotlib עם קלות ייצור התרשימים של seaborn.

לצורך הדוגמה, אני משתמש במסד נתונים אודות אוניית הנוסעים טיטאניק הכולל מידע כדוגמת מין הנוסעים, המחלקה, היכן עלו לסיפון, והאם שרדו את הטביעה. המטרה שלנו בתרגיל שמיד נבצע היא להמחיש אילו נתונים השפיעו במיוחד על סיכויי ההישרדות.

ndf = sns.load_dataset('titanic')
print(ndf.shape)
ndf.head()
(891, 15)

The first 5 rows of the titanic dataset

ניצור את המטריצה באמצעות הפונקציה subplots של matplotlib. לדוגמה, מטריצה של 2X2.

n_rows = 2
n_cols = 2
 
fig, axs = plt.subplots(n_rows, n_cols, squeeze=False, figsize=(12,7.4))

The grid with a matix of 2x2 that the subplots function of matplotlib generated

נציב כל אחד מהתרשימים באחד מתאי המטריצה תוך שנשתמש בפרמר 'ax' שמגדיר את המיקום של תתי התרשימים בתוך המטריצה.

fig, axs = plt.subplots(n_rows, n_cols, squeeze=False, figsize=(12,7.4))
 
# plot 1 - cell (0,0)
sns.countplot(x='who', hue='survived', data=ndf,
              ax=axs[0,0],
              palette='Set1')
 
# plot 2 - cell (0,1)
sns.countplot(x='class', hue='survived', data=ndf,
              ax=axs[0,1],
              palette='Set1')
 
# plot 3 - cell (1,0)
sns.countplot(x='embark_town', hue='survived', data=ndf,
              ax=axs[1,0],
              palette='Set1')
 
# plot 4 - cell (1,1)
sns.regplot(x='fare', y='survived', data=ndf,
            ax=axs[1,1],
            color='r')

The grid with a matix of 2x2 that the subplots function of matplotlib generated

סיכויי ההישרדות באסון טביעת הטיטאניק היו גדולים יותר עבור נקבות, נוסעי המחלקה הראשונה, נוסעים שעלו לסיפון מנמל שאינו סאות'המפטון וככל שעלה המחיר ששולם עבור כרטיס ההפלגה.

 

סיכום

ספריית seabron של פייתון מאפשרת לנו לצייר תרשימים ברמה גבוהה באמצעות ממשק אינטואיטיבי ופשוט יחסית. למרות היכולות המגוונות שמציעה הספרייה יש דברים שלא ניתן או שלא כדאי לבצע בעזרתה ואז כדאי להעזר בשירותיה של הספרייה האם matplotlib.

לכל המדריכים בנושא של למידת מכונה

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

הוסף תגובה חדשה

 

= 8 + 2