12 דברים שאתה חייב לדעת כשאתה מייצר תרשימים באמצעות matplotlib של python
הצגת נתונים באמצעות תרשימים היא מאוד חשובה כשמנתחים מידע. הספרייה שבה משתמשים הכי הרבה להצגת מידע באמצעות Python היא Matplotlib. במדריך זה תקבלו הצצה לכמה מהמיומנויות היותר חשובות כאשר משתמשים בספרייה.
לחצו להורדת הקוד שאותו נפתח במדריך
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)
כדאי להוסיף כותרת, שמות עמודות, ושמות הצירים באמצעות הפקודות הבאות:
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")
הפרמטר loc שאותו העברנו ל-legend ממקם את המקרא.
כדי להדפיס את התרשים במידה ולא מקפידים על שימוש ב-
%matplotlib inline
צריך להשתמש בפקודה:
plt.show()
4. סגנון התרשים
הספרייה matplotlib מציעה מגוון של עיצובים מוכנים מראש שכדאי להשתמש בהם כדי להקנות לתרשימים שלנו מראה מקצועי.
כדי לברר את שמות הסגנונות שעומדים לרשותנו:
plt.style.available
['Solarize_Light2', '_classic_test_patch', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10']
נשתמש בסגנון seaborn:
plt.style.use('seaborn')
כך נראה התרשים מסעיף קודם בסגנון seaborn:
5. תרשים שמבוסס על סט נתונים מיובא באמצעות 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')
- פרמטר ראשון הוא ציר ה-x
- פרמטר שני ציר ה-y
- 'o' הופך את התרשים לתרשים פיזור
המתודה scatter מאפשרת גם היא להציג תרשים פיזור:
plt.scatter(df['Height'], df['Shoe Size'])
התכונות הבאות מאפשרות שליטה גבוהה יותר במראה:
plt.scatter(df['Height'], df['Shoe Size'], color='red', alpha=.7, marker='+')
- color - שליטה בצבע
- alpha - שקיפות בערכים שנעים בין 0 ל-1
- marker - זו הצורה
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, sharex=True, sharey=True)
- הקוד מייצר שני תרשימים שלכל אחד מהם ניתן להגדיר תכונות בנפרד.
- sharex, sharey - מגדיר שלשני התרשימים יהיו אותם צירים.
אבל קודם כל אנחנו צריכים להפריד את 2 האובייקטים שמהם נייצר מיד את התרשימים:
ax1, ax2 = ax
אחרי שעשינו את ההפרדה אנחנו יכולים להגדיר לתרשים הראשון את התכונות שמעניינות אותנו:
ax1.scatter(males.Height, males['Shoe Size'], color='blue', label='Males')
עבור התרשים של הזכרים הגדרנו את סט הנתונים, צירים וצורת הסימונים שיצטרפו ביחד כדי ליצור את הגרף
השורות הבאות מגדירות את הכותרות ואת הצירים:
ax1.set_ylabel('Shoe size')
ax1.set_xlabel('Height')
ax1.legend()
- השורה ax1.legend() הוסיפה את המקרא.
נחזור על סט ההוראות עבור בנות המין היפה:
ax2.scatter(female.Height, female['Shoe Size'], color='red', marker='+', label='Females')
ax2.set_xlabel('Height')
ax2.legend()
האובייקט fig כולל מתודות המתייחסות לכל הדיאגרמה:
נוסיף כותרת ראשית יפה וגדולה:
fig.suptitle('Height VS Shoe size', fontsize=20, y=1.05)
וההוראה הבאה משפרת את המראה:
fig.tight_layout()
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()
- מיד נסביר את סיבת השימוש במערך 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 וכך הפרדנו את הסדרות .
- הרוחב הוא כפול ממידת ההזזה וכך קיבלנו את הקיבוץ של הנתונים לפי חברות.
אפשר להציג את התרשים כשהעמודות ממוקמות אופקית.
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()
- במקום בפקודה 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')
- 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")
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 - מסובב את התרשים.
12. כיצד לייצא את התרשים לתמונה
כדי לייצא את התרשים לתמונה:
plt.savefig('piechart.png', bbox_inches='tight')
bbox_inches - נפטר מהשוליים הלבנים סביב התמונה.
מומלץ לך לקרוא גם את המדריך: 7 דרכים ליצירת תרשימים אטרקטיביים ומשוכללים באמצעות seaborn ופייתון שמלמד כיצד לייצר תרשימים משוכללים ביתר קלות.
לכל המדריכים בנושא של למידת מכונה
אהבתם? לא אהבתם? דרגו!
0 הצבעות, ממוצע 0 מתוך 5 כוכבים
לומדת בתאריך: 06.05.2020
תודה על המדריך המעניין והברור!
עזר לי מאד
סעיף לא עובד אצלי, מציג 2 תרשימים בזה אחר זה במקום תרשים
אחד המאחד את האוכלוסיות. מה יכול להיות שקרה?