12 דברים שאתה חייב לדעת כשאתה מייצר תרשימים באמצעות matplotlib של python

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

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

python matplotlib logo

לחצו להורדת הקוד שאותו נפתח במדריך

 

1. ייבוא הספריות שישמשו במדריך

%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
  • מלבד matplotlib כדאי לייבא את %matplotlib inline שמאפשרת לצייר את התרשימים בתוך ה-jupyter notebook ללא פקודה מיוחדת.
  • pandas ישמש לניהול מידע טבלאי (לקריאת המדריך על pandas).

 

2. תרשים פשוט

כדי לצייר תרשים פשוט עם ערכי x ו-y נספק את הרשימות של ערכי x ו-y, לדוגמה:

x = [1.5, 2.33, 3, 4]
y = [5, 6, 9, 13]

נעשה מזה תרשים באמצעות שורה אחת שאליה נעביר את ערכי x ו-y:

plt.plot(x, y)

תרשים פשוט matplotlib

כדאי להוסיף כותרת, שמות עמודות, ושמות הצירים באמצעות הפקודות הבאות:

plt.title("x vs y")
plt.legend(["y"])
plt.xlabel("x")
plt.ylabel("y")

 

3. תרשים פשוט שמשווה בין מספר עמודות

כדי להציג מספר עמודות באותו התרשים:

plt.plot(x, col_name1)
plt.plot(x, col_name2)
# Plot x vs multiple columns
z = [11, 8, 6, 2]
plt.plot(x, y)
plt.plot(x, z)
plt.title("x vs y and z")
plt.legend(["y","z"],  loc="lower left")
plt.xlabel("x")
plt.ylabel("y and z")

תרשים עם מספר עמודות matplotlib

הפרמטר loc שאותו העברנו ל-legend ממקם את המקרא.

כדי להדפיס את התרשים במידה ולא מקפידים על שימוש ב-

%matplotlib inline

צריך להשתמש בפקודה:

plt.show()

 

4. תרשים שמבוסס על סט נתונים מיובא באמצעות pandas

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

# Plot pandas dataframe 
df = pd.read_csv('../data/height_shoe.csv')

רוצים ללמוד על ספריית pandas? קראו את המדריך.

להורדת סט הנתונים.

נגדיר את עמודת הגובה בתור האינדקס ונציג את המידע:

df.set_index('Height')
df.head()

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

df.corr()['Height'].sort_values()
Shoe Size    0.897163
Height       1.000000
Name: Height, dtype: float64

 

5. תרשים פיזור

קורלציה נוח לשרטט באמצעות תרשים פיזור (scatter plot).

plt.plot(df['Height'], df['Shoe Size'], 'o')

תרשים עם מספר עמודות matplotlib

  • פרמטר ראשון הוא ציר ה-x
  • פרמטר שני ציר ה-y
  • 'o' הופך את התרשים לתרשים פיזור

 

6. הפרדת תרשים הפיזור לאוכלוסיות

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

male   = df[df.gender == 'm']
female = df[df.gender == 'f']

נשרטט את הנתונים אחרי ההפרדה:

plt.plot(male['Height'], male['Shoe Size'], 'bo')
plt.plot(female['Height'], female['Shoe Size'], 'r+')

תרשים פיזור עם הפרדה לקבוצות

את הסגנון השונה של הנקודות הגדרנו באופן הבא:

  • r+ פלוסים בצבע אדום
  • bo נקודות בצבע כחול

וכמו תמיד כדאי להוסיף את התגיות והמקרא:

plt.title("Height vs Shoe size by gender")
plt.legend(["male","female"], loc='lower right')
plt.xlabel("height")
plt.ylabel("shoe size")

 

7. הפרדת תרשימים לתתי תרשימים (subplots)

כדי להשתמש במספר תרשימים ביחד משתמשים בתתי תרשימים (subplots).

הפקודה המשמשת להצגת תתי-תרשימים:

fig, ax = plt.subplots(rows,cols)
  • פרמטר ראשון הוא מספר השורות בתרשים
  • הפרמטר השני הוא מספר העמודות בתרשים

במקרה שלנו אנחנו מעוניינים בשורה אחת עם 2 עמודות. כך עושים את זה:

fig, ax = plt.subplots(1,2)

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

אבל קודם כל אנחנו צריכים להפריד את 2 האובייקטים שמהם נייצר מיד את התרשימים:

ax1, ax2 = ax

אחרי שעשינו את ההפרדה אנחנו יכולים להגדיר לתרשים הראשון את התכונות שמעניינות אותנו:

ax1.plot(male['Height'], male['Shoe Size'], 'bo')

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

ax1.legend()

השורה לעיל הוסיפה את המקרא.

השורות הבאות מגדירות את הכותרות ואת הצירים:

ax1.set_title('Males')
ax1.set_ylabel('Shoe size')
ax1.set_xlabel('Height')
ax1.set_ylim(bottom=5,top=15)

נחזור על סט ההוראות לעיל עבור בנות המין היפה:

ax2.plot(male['Height'], male['Shoe Size'], 'r+')
ax2.legend()
ax2.set_title('Females')
ax2.set_ylabel('Shoe size')
ax2.set_xlabel('Height')
ax2.set_ylim(bottom=5,top=15)

וההוראה הבאה משפרת את המראה:

plt.tight_layout()

matplotlib subplots

 

8. דיאגרמת מקלות

:כדי לייצר דיאגרמת מקלות נשתמש בפקודה

plt.bar(x, y)
  • x - הוא ציר ה-x
  • y - הוא ציר ה-y

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

companies = ['Audi','Ferrari','BMW','Mazda','Tesla']
prices = [200000,500000,180000,145000,195000]
import numpy as np
xpos = np.arange(len(companies))
plt.title("Car prices")
plt.xlabel("Compnaies")
plt.ylabel("Prices")

plt.bar(xpos, prices)
plt.xticks(xpos, companies)
plt.legend()

bar chart with matplotlib

  • מיד נסביר את סיבת השימוש במערך numpy בשביל ציר ה-x.
  • הפקודה xticks ממפה לכל נקודה על ציר ה-x את שם החברה.

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

taxes = [100000,120000,60000,45000,69000]

נוסיף גם אותה לתרשים:

plt.title("Car prices and taxes")
plt.xlabel("Compnaies")
plt.ylabel("Prices")

plt.bar(xpos+0.2, prices, width=0.4, label="Prices")
plt.bar(xpos-0.2, taxes, width=0.4, label="Taxes")

plt.xticks(xpos, companies)
plt.legend()
  • הודות לשימוש במערך numpy הוספנו והפחתנו מהערכים על ציר ה-x וכך הפרדנו את הסדרות .
  • הרוחב הוא כפול ממידת ההזזה וכך קיבלנו את הקיבוץ של הנתונים לפי חברות.

bar chart with matplotlib and 2 data serieses

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

plt.title("Car prices and taxes")
plt.ylabel("Compnaies")
plt.xlabel("Prices")

plt.barh(xpos, prices, label="Prices")
plt.barh(xpos, taxes, label="Taxes")

plt.yticks(xpos, companies)
plt.legend()

horizontal bar chart with matplotlib

  • במקום בפקודה bar השתמשנו ב-barh.
  • הפכנו את התגיות על הצירים
  • במקום xticks השתמשנו ב-yticks.

 

9. הצגת שכיחויות באמצעות היסטוגרמה

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

male['Height'].plot(kind='hist', bins=4, alpha=.6, color='blue')
female['Height'].plot(kind='hist', bins=4, alpha=.6, color='red')

היסטוגרמה באמצעות matplotlib

  • bins - לכמה קבוצות משנה לחלק
  • alpha - נותן שקיפות מה שעוזר לנו כשאנחנו רוצים לראות את הנתונים החופפים בין הקבוצות

כדאי להוסיף תגיות:

plt.xlabel("height")
plt.legend(["male","female"])

 

10. הצגת התפלגויות ומדדי מרכז באמצעות boxplot

דרך מצוינת ללמוד על התפלגות ומדדי מרכז (ממוצע, חציון, רבעונים) היא באמצעות המתודה describe של pandas.

male.describe()

וכדי לשרטט את זה אפשר להשתמש ב-boxplot.

א. ניצור רשימה אחת שמקבצת את הגובה של גברים ונשים:

data_to_plot = [male['Height'], female['Height']]

ב. ניצור תת-תרשים עם צירי x, y משותפים:

fig, ax = plt.subplots(1, 1, sharex=True, sharey=True)

ג. נצייר את ה-boxplot:

bp = ax.boxplot(data_to_plot)

ד. נקבע את התגיות של הצירים

ax.set_xticklabels(["Male", "Female"])
plt.ylabel("height")

הצגת התפלגויות ומדדי מרכז באמצעות boxplot

 

11. הצגת פרופורציות באמצעות תרשים עוגה

כדי להציג את הפרופורציות בתוך האוכלוסיה נשתמש בתרשים עוגה (pie chart).

א. נמצא את השכיחות של זכרים ונקבות ונאסוף את השכיחויות לתוך רשימה:

counts = [male.shape[0], female.shape[0]]

ב. נגדיר את התגיות:

labels = ['males', 'females']

ג. נצייר את התרשים:

plt.pie(counts, labels=labels)

כדי לשפר את התרשים:

plt.pie(counts, labels=labels, 
          autopct="%0.2f%%", 
          explode=[0, 0.1], 
          startangle=90)
  • autopct - 2 ספרות משמעותיות אחרי הנקודה
  • explode - מרחיק את חתיכות העוגה. במקרה זה הרחקתי את החתיכה השנייה.
  • startangle - מסובב את התרשים.

תרשים עוגה באמצעות matplotlib

 

12. כיצד לייצא את התרשים לתמונה

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

plt.savefig('piechart.png', bbox_inches='tight')

bbox_inches - נפטר מהשוליים הלבנים סביב התמונה.

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

 

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

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

 

 

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

 

= 7 + 6