|
2 weeks ago | |
---|---|---|
.. | ||
solution | 2 weeks ago | |
README.md | 2 weeks ago | |
assignment.md | 2 weeks ago | |
notebook.ipynb | 3 weeks ago |
README.md
בניית מודל רגרסיה באמצעות Scikit-learn: הכנת ויזואליזציה של נתונים
אינפוגרפיקה מאת Dasani Madipalli
שאלון לפני השיעור
השיעור הזה זמין גם ב-R!
מבוא
עכשיו, כשיש לך את הכלים הדרושים כדי להתחיל לבנות מודלים של למידת מכונה באמצעות Scikit-learn, אתה מוכן להתחיל לשאול שאלות על הנתונים שלך. כשאתה עובד עם נתונים ומיישם פתרונות ML, חשוב מאוד להבין איך לשאול את השאלה הנכונה כדי למצות את הפוטנציאל של מערך הנתונים שלך.
בשיעור זה תלמד:
- איך להכין את הנתונים שלך לבניית מודלים.
- איך להשתמש ב-Matplotlib לויזואליזציה של נתונים.
לשאול את השאלה הנכונה על הנתונים שלך
השאלה שאתה רוצה לענות עליה תקבע איזה סוג של אלגוריתמים ML תשתמש. איכות התשובה שתקבל תהיה תלויה מאוד באופי הנתונים שלך.
תסתכל על הנתונים שסופקו לשיעור הזה. אתה יכול לפתוח את קובץ ה-.csv הזה ב-VS Code. מבט מהיר מראה מיד שיש בו ערכים חסרים ותערובת של נתונים טקסטואליים ומספריים. יש גם עמודה מוזרה בשם 'Package' שבה הנתונים הם תערובת של 'sacks', 'bins' וערכים אחרים. למעשה, הנתונים די מבולגנים.
🎥 לחץ על התמונה למעלה לצפייה בסרטון קצר שמסביר איך להכין את הנתונים לשיעור הזה.
למעשה, זה לא מאוד נפוץ לקבל מערך נתונים שמוכן לחלוטין לשימוש ליצירת מודל ML ישר מהקופסה. בשיעור הזה תלמד איך להכין מערך נתונים גולמי באמצעות ספריות Python סטנדרטיות. תלמד גם טכניקות שונות לויזואליזציה של הנתונים.
מחקר מקרה: 'שוק הדלעות'
בתיקייה זו תמצא קובץ .csv בתיקיית השורש data
בשם US-pumpkins.csv שמכיל 1757 שורות של נתונים על שוק הדלעות, מסודרות לפי ערים. אלו נתונים גולמיים שנלקחו מתוך דוחות שוקי היבולים המיוחדים שמופצים על ידי משרד החקלאות של ארצות הברית.
הכנת נתונים
הנתונים האלה הם נחלת הכלל. ניתן להוריד אותם בקבצים נפרדים רבים, לפי עיר, מאתר ה-USDA. כדי להימנע ממספר רב של קבצים נפרדים, איחדנו את כל נתוני הערים לגיליון אלקטרוני אחד, כך שכבר הכנו את הנתונים מעט. עכשיו, בואו נסתכל מקרוב על הנתונים.
נתוני הדלעות - מסקנות ראשוניות
מה אתה שם לב לגבי הנתונים האלה? כבר ראית שיש תערובת של טקסטים, מספרים, ערכים חסרים וערכים מוזרים שצריך להבין.
איזו שאלה אפשר לשאול על הנתונים האלה, באמצעות טכניקת רגרסיה? מה דעתך על "לחזות את המחיר של דלעת למכירה במהלך חודש נתון". מבט נוסף על הנתונים מראה שיש כמה שינויים שצריך לעשות כדי ליצור את מבנה הנתונים הדרוש למשימה.
תרגיל - ניתוח נתוני הדלעות
בואו נשתמש ב-Pandas (השם הוא קיצור של Python Data Analysis
), כלי מאוד שימושי לעיצוב נתונים, כדי לנתח ולהכין את נתוני הדלעות.
קודם כל, בדוק אם יש תאריכים חסרים
קודם כל תצטרך לנקוט צעדים כדי לבדוק אם יש תאריכים חסרים:
- המרה של התאריכים לפורמט חודשי (אלו תאריכים אמריקאים, כך שהפורמט הוא
MM/DD/YYYY
). - חילוץ החודש לעמודה חדשה.
פתח את הקובץ notebook.ipynb ב-Visual Studio Code וייבא את הגיליון האלקטרוני ל-DataFrame חדש של Pandas.
-
השתמש בפונקציה
head()
כדי לצפות בחמש השורות הראשונות.import pandas as pd pumpkins = pd.read_csv('../data/US-pumpkins.csv') pumpkins.head()
✅ באיזו פונקציה היית משתמש כדי לצפות בחמש השורות האחרונות?
-
בדוק אם יש נתונים חסרים ב-DataFrame הנוכחי:
pumpkins.isnull().sum()
יש נתונים חסרים, אבל אולי זה לא משנה למשימה הנוכחית.
-
כדי להפוך את ה-DataFrame שלך לקל יותר לעבודה, בחר רק את העמודות שאתה צריך, באמצעות פונקציית
loc
שמחלצת מה-DataFrame המקורי קבוצת שורות (שנמסרות כפרמטר ראשון) ועמודות (שנמסרות כפרמטר שני). הביטוי:
במקרה הזה אומר "כל השורות".columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] pumpkins = pumpkins.loc[:, columns_to_select]
שנית, קבע את המחיר הממוצע של דלעת
חשוב איך לקבוע את המחיר הממוצע של דלעת בחודש נתון. אילו עמודות היית בוחר למשימה הזו? רמז: תצטרך 3 עמודות.
פתרון: קח את הממוצע של העמודות Low Price
ו-High Price
כדי למלא את עמודת המחיר החדשה, והמר את עמודת התאריך כך שתציג רק את החודש. למרבה המזל, לפי הבדיקה לעיל, אין נתונים חסרים עבור תאריכים או מחירים.
-
כדי לחשב את הממוצע, הוסף את הקוד הבא:
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 month = pd.DatetimeIndex(pumpkins['Date']).month
✅ אתה מוזמן להדפיס כל נתון שתרצה לבדוק באמצעות
print(month)
. -
עכשיו, העתק את הנתונים שהומרו ל-DataFrame חדש של Pandas:
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
הדפסת ה-DataFrame שלך תראה לך מערך נתונים נקי ומסודר שעליו תוכל לבנות את מודל הרגרסיה החדש שלך.
אבל רגע! יש כאן משהו מוזר
אם תסתכל על עמודת Package
, דלעות נמכרות בהרבה תצורות שונות. חלקן נמכרות במידות של '1 1/9 bushel', חלקן ב-'1/2 bushel', חלקן לפי דלעת, חלקן לפי פאונד, וחלקן בקופסאות גדולות עם רוחבים משתנים.
נראה שדלעות מאוד קשה לשקול באופן עקבי
כשחוקרים את הנתונים המקוריים, מעניין שכל דבר עם Unit of Sale
השווה ל-'EACH' או 'PER BIN' גם יש לו סוג Package
לפי אינץ', לפי bin, או 'each'. נראה שדלעות מאוד קשה לשקול באופן עקבי, אז בואו נסנן אותן על ידי בחירת דלעות בלבד עם המחרוזת 'bushel' בעמודת Package
.
-
הוסף מסנן בראש הקובץ, מתחת לייבוא הראשוני של ה-.csv:
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
אם תדפיס את הנתונים עכשיו, תוכל לראות שאתה מקבל רק את 415 השורות בערך שמכילות דלעות לפי bushel.
אבל רגע! יש עוד משהו שצריך לעשות
שמת לב שהכמות של bushel משתנה לפי שורה? אתה צריך לנרמל את התמחור כך שתראה את התמחור לפי bushel, אז תעשה קצת חישובים כדי לסטנדרט אותו.
-
הוסף את השורות האלה אחרי הבלוק שיוצר את ה-DataFrame החדש של הדלעות:
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
✅ לפי The Spruce Eats, המשקל של bushel תלוי בסוג התוצרת, מכיוון שמדובר במדידת נפח. "bushel של עגבניות, למשל, אמור לשקול 56 פאונד... עלים וירוקים תופסים יותר מקום עם פחות משקל, כך ש-bushel של תרד שוקל רק 20 פאונד." זה די מסובך! בואו לא נטרח עם המרה של bushel לפאונד, ובמקום זאת נתמחר לפי bushel. כל המחקר הזה על bushels של דלעות, עם זאת, מראה כמה חשוב להבין את אופי הנתונים שלך!
עכשיו, אתה יכול לנתח את התמחור ליחידה בהתבסס על מדידת ה-bushel שלהם. אם תדפיס את הנתונים פעם נוספת, תוכל לראות איך הם סטנדרטיים.
✅ שמת לב שדלעות שנמכרות לפי חצי bushel הן מאוד יקרות? האם תוכל להבין למה? רמז: דלעות קטנות יקרות הרבה יותר מדלעות גדולות, כנראה בגלל שיש הרבה יותר מהן בכל bushel, בהתחשב במקום הלא מנוצל שנלקח על ידי דלעת פאי גדולה וחלולה אחת.
אסטרטגיות ויזואליזציה
חלק מתפקידו של מדען הנתונים הוא להציג את האיכות והאופי של הנתונים שהוא עובד איתם. לשם כך, הם לעיתים קרובות יוצרים ויזואליזציות מעניינות, כמו גרפים, תרשימים ומפות, שמציגים היבטים שונים של הנתונים. בדרך זו, הם יכולים להראות באופן חזותי קשרים ופערים שקשה לחשוף בדרך אחרת.
🎥 לחץ על התמונה למעלה לצפייה בסרטון קצר שמסביר איך לויזואליזציה של הנתונים לשיעור הזה.
ויזואליזציות יכולות גם לעזור לקבוע את טכניקת הלמידת מכונה המתאימה ביותר לנתונים. למשל, תרשים פיזור שנראה כמו קו יכול להצביע על כך שהנתונים מתאימים לתרגיל רגרסיה ליניארית.
אחת מספריות הויזואליזציה שעובדות היטב במחברות Jupyter היא Matplotlib (שגם ראית בשיעור הקודם).
קבל עוד ניסיון עם ויזואליזציה של נתונים ב-המדריכים האלה.
תרגיל - להתנסות עם Matplotlib
נסה ליצור כמה גרפים בסיסיים כדי להציג את ה-DataFrame החדש שיצרת. מה יראה גרף קו בסיסי?
-
ייבא את Matplotlib בראש הקובץ, מתחת לייבוא של Pandas:
import matplotlib.pyplot as plt
-
הרץ מחדש את כל המחברת כדי לרענן.
-
בתחתית המחברת, הוסף תא כדי לשרטט את הנתונים כקופסה:
price = new_pumpkins.Price month = new_pumpkins.Month plt.scatter(price, month) plt.show()
האם זה גרף שימושי? האם משהו בו מפתיע אותך?
זה לא מאוד שימושי מכיוון שכל מה שהוא עושה זה להציג את הנתונים שלך כפריסה של נקודות בחודש נתון.
להפוך את זה לשימושי
כדי לקבל גרפים שמציגים נתונים שימושיים, בדרך כלל צריך לקבץ את הנתונים בצורה כלשהי. בואו ננסה ליצור גרף שבו ציר ה-y מציג את החודשים והנתונים מדגימים את התפלגות הנתונים.
-
הוסף תא ליצירת תרשים עמודות מקובץ:
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') plt.ylabel("Pumpkin Price")
זהו ויזואליזציה נתונים שימושית יותר! נראה שהיא מצביעה על כך שהמחיר הגבוה ביותר לדלעות מתרחש בספטמבר ובאוקטובר. האם זה תואם את הציפיות שלך? למה או למה לא?
🚀אתגר
חקור את סוגי הויזואליזציה השונים ש-Matplotlib מציעה. אילו סוגים הם המתאימים ביותר לבעיות רגרסיה?
שאלון אחרי השיעור
סקירה ולימוד עצמי
תסתכל על הדרכים הרבות לויזואליזציה של נתונים. צור רשימה של הספריות השונות הזמינות וציין אילו מהן מתאימות לסוגי משימות מסוימים, למשל ויזואליזציות דו-ממדיות לעומת תלת-ממדיות. מה אתה מגלה?
משימה
כתב ויתור:
מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית Co-op Translator. למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.