You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/he/2-Regression/2-Data/solution/R/lesson_2-R.ipynb

669 lines
26 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{
"nbformat": 4,
"nbformat_minor": 2,
"metadata": {
"colab": {
"name": "lesson_2-R.ipynb",
"provenance": [],
"collapsed_sections": [],
"toc_visible": true
},
"kernelspec": {
"name": "ir",
"display_name": "R"
},
"language_info": {
"name": "R"
},
"coopTranslator": {
"original_hash": "f3c335f9940cfd76528b3ef918b9b342",
"translation_date": "2025-09-04T07:20:19+00:00",
"source_file": "2-Regression/2-Data/solution/R/lesson_2-R.ipynb",
"language_code": "he"
}
},
"cells": [
{
"cell_type": "markdown",
"source": [
"# בניית מודל רגרסיה: הכנת ויזואליזציה של נתונים\n",
"\n",
"## **רגרסיה לינארית לדלעות - שיעור 2**\n",
"#### הקדמה\n",
"\n",
"עכשיו, כשיש לך את הכלים הדרושים להתחיל לבנות מודלים של למידת מכונה עם Tidymodels ו-Tidyverse, אתה מוכן להתחיל לשאול שאלות על הנתונים שלך. כשאתה עובד עם נתונים ומיישם פתרונות ML, חשוב מאוד להבין איך לשאול את השאלה הנכונה כדי למצות את הפוטנציאל של מערך הנתונים שלך.\n",
"\n",
"בשיעור זה תלמד:\n",
"\n",
"- איך להכין את הנתונים שלך לבניית מודלים.\n",
"\n",
"- איך להשתמש ב-`ggplot2` לויזואליזציה של נתונים.\n",
"\n",
"השאלה שאתה צריך תשובה עליה תקבע איזה סוג של אלגוריתמים ML תשתמש בהם. ואיכות התשובה שתקבל תהיה תלויה מאוד באופי הנתונים שלך.\n",
"\n",
"בואו נראה זאת דרך תרגיל מעשי.\n",
"\n",
"<p >\n",
" <img src=\"../../images/unruly_data.jpg\"\n",
" width=\"700\"/>\n",
" <figcaption>יצירה מאת @allison_horst</figcaption>\n"
],
"metadata": {
"id": "Pg5aexcOPqAZ"
}
},
{
"cell_type": "markdown",
"source": [
"## 1. ייבוא נתוני דלעות והפעלת Tidyverse\n",
"\n",
"נזדקק לחבילות הבאות כדי לפרק ולהרכיב את השיעור הזה:\n",
"\n",
"- `tidyverse`: ה-[tidyverse](https://www.tidyverse.org/) הוא [אוסף של חבילות R](https://www.tidyverse.org/packages) שנועד להפוך את מדע הנתונים למהיר, קל ומהנה יותר!\n",
"\n",
"ניתן להתקין אותן כך:\n",
"\n",
"`install.packages(c(\"tidyverse\"))`\n",
"\n",
"הסקריפט למטה בודק אם יש לך את החבילות הנדרשות להשלמת המודול הזה ומתקין אותן עבורך במקרה שחלקן חסרות.\n"
],
"metadata": {
"id": "dc5WhyVdXAjR"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n",
"pacman::p_load(tidyverse)"
],
"outputs": [],
"metadata": {
"id": "GqPYUZgfXOBt"
}
},
{
"cell_type": "markdown",
"source": [
"עכשיו, בואו נפעיל כמה חבילות ונטעין את [הנתונים](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) שסופקו לשיעור הזה!\n"
],
"metadata": {
"id": "kvjDTPDSXRr2"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Load the core Tidyverse packages\n",
"library(tidyverse)\n",
"\n",
"# Import the pumpkins data\n",
"pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\")\n",
"\n",
"\n",
"# Get a glimpse and dimensions of the data\n",
"glimpse(pumpkins)\n",
"\n",
"\n",
"# Print the first 50 rows of the data set\n",
"pumpkins %>% \n",
" slice_head(n =50)"
],
"outputs": [],
"metadata": {
"id": "VMri-t2zXqgD"
}
},
{
"cell_type": "markdown",
"source": [
"הצצה מהירה באמצעות `glimpse()` מראה מיד שישנם ערכים ריקים ותערובת של מחרוזות (`chr`) ונתונים מספריים (`dbl`). ה-`Date` הוא מסוג מחרוזת ויש גם עמודה מוזרה בשם `Package` שבה הנתונים הם תערובת של `sacks`, `bins` וערכים אחרים. למעשה, הנתונים קצת מבולגנים 😤.\n",
"\n",
"למעשה, זה לא מאוד נפוץ לקבל מערך נתונים שמוכן לחלוטין לשימוש ליצירת מודל ML ישר מהקופסה. אבל אל דאגה, בשיעור הזה תלמדו איך להכין מערך נתונים גולמי באמצעות ספריות R סטנדרטיות 🧑‍🔧. בנוסף, תלמדו טכניקות שונות להמחשת הנתונים.📈📊\n",
"<br>\n",
"\n",
"> תזכורת: אופרטור הצינור (`%>%`) מבצע פעולות ברצף לוגי על ידי העברת אובייקט קדימה לתוך פונקציה או ביטוי קריאה. אפשר לחשוב על אופרטור הצינור כמי שאומר \"ואז\" בקוד שלכם.\n"
],
"metadata": {
"id": "REWcIv9yX29v"
}
},
{
"cell_type": "markdown",
"source": [
"## 2. בדיקת נתונים חסרים\n",
"\n",
"אחת הבעיות הנפוצות ביותר שאנשי מדע הנתונים צריכים להתמודד איתן היא נתונים חסרים או לא שלמים. R מייצגת ערכים חסרים או לא ידועים באמצעות ערך מיוחד: `NA` (Not Available).\n",
"\n",
"אז איך נוכל לדעת אם מסגרת הנתונים מכילה ערכים חסרים?\n",
"<br>\n",
"- דרך פשוטה לבדוק זאת היא להשתמש בפונקציה הבסיסית של R בשם `anyNA`, שמחזירה אובייקטים לוגיים `TRUE` או `FALSE`.\n"
],
"metadata": {
"id": "Zxfb3AM5YbUe"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"pumpkins %>% \n",
" anyNA()"
],
"outputs": [],
"metadata": {
"id": "G--DQutAYltj"
}
},
{
"cell_type": "markdown",
"source": [
"מעולה, נראה שחסרים כמה נתונים! זה מקום טוב להתחיל בו.\n",
"\n",
"- דרך נוספת תהיה להשתמש בפונקציה `is.na()` שמציינת אילו אלמנטים בעמודות ספציפיות חסרים באמצעות ערך לוגי `TRUE`.\n"
],
"metadata": {
"id": "mU-7-SB6YokF"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"pumpkins %>% \n",
" is.na() %>% \n",
" head(n = 7)"
],
"outputs": [],
"metadata": {
"id": "W-DxDOR4YxSW"
}
},
{
"cell_type": "markdown",
"source": [
"אוקיי, סיימתי את העבודה, אבל עם מסגרת נתונים גדולה כמו זו, זה יהיה לא יעיל וכמעט בלתי אפשרי לעבור על כל השורות והעמודות באופן פרטני😴.\n",
"\n",
"- דרך אינטואיטיבית יותר תהיה לחשב את סכום הערכים החסרים עבור כל עמודה:\n"
],
"metadata": {
"id": "xUWxipKYY0o7"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"pumpkins %>% \n",
" is.na() %>% \n",
" colSums()"
],
"outputs": [],
"metadata": {
"id": "ZRBWV6P9ZArL"
}
},
{
"cell_type": "markdown",
"source": [
"הרבה יותר טוב! חסרים נתונים, אבל אולי זה לא ישפיע על המשימה הנוכחית. בואו נראה מה ניתוח נוסף יביא.\n",
"\n",
"> בנוסף למערכות החבילות והפונקציות המדהימות, ל-R יש תיעוד מאוד טוב. לדוגמה, השתמשו ב-`help(colSums)` או `?colSums` כדי ללמוד עוד על הפונקציה.\n"
],
"metadata": {
"id": "9gv-crB6ZD1Y"
}
},
{
"cell_type": "markdown",
"source": [
"## 3. Dplyr: דקדוק של מניפולציה על נתונים\n",
"\n",
"<p >\n",
" <img src=\"../../images/dplyr_wrangling.png\"\n",
" width=\"569\"/>\n",
" <figcaption>יצירה מאת @allison_horst</figcaption>\n",
"\n",
"\n",
"<!--![יצירה מאת \\@allison_horst](../../../../../../2-Regression/2-Data/images/dplyr_wrangling.png)<br/>יצירה מאת \\@allison_horst-->\n"
],
"metadata": {
"id": "o4jLY5-VZO2C"
}
},
{
"cell_type": "markdown",
"source": [
"[`dplyr`](https://dplyr.tidyverse.org/), חבילה מתוך Tidyverse, היא תחביר לעיבוד נתונים שמספק סט עקבי של פעלים שעוזרים לך לפתור את האתגרים הנפוצים ביותר בעיבוד נתונים. בחלק זה, נחקור כמה מהפעלים של dplyr! \n",
"<br>\n"
],
"metadata": {
"id": "i5o33MQBZWWw"
}
},
{
"cell_type": "markdown",
"source": [
"#### dplyr::select()\n",
"\n",
"`select()` היא פונקציה בחבילת `dplyr` שעוזרת לך לבחור עמודות לשמירה או להסרה.\n",
"\n",
"כדי להפוך את מסגרת הנתונים שלך לקלה יותר לעבודה, הסר כמה מהעמודות שלה באמצעות `select()`, והשאר רק את העמודות שאתה צריך.\n",
"\n",
"לדוגמה, בתרגיל הזה, הניתוח שלנו יכלול את העמודות `Package`, `Low Price`, `High Price` ו-`Date`. בואו נבחר את העמודות האלה.\n"
],
"metadata": {
"id": "x3VGMAGBZiUr"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Select desired columns\n",
"pumpkins <- pumpkins %>% \n",
" select(Package, `Low Price`, `High Price`, Date)\n",
"\n",
"\n",
"# Print data set\n",
"pumpkins %>% \n",
" slice_head(n = 5)"
],
"outputs": [],
"metadata": {
"id": "F_FgxQnVZnM0"
}
},
{
"cell_type": "markdown",
"source": [
"#### dplyr::mutate()\n",
"\n",
"`mutate()` היא פונקציה בחבילת `dplyr` שמאפשרת ליצור או לשנות עמודות, תוך שמירה על העמודות הקיימות.\n",
"\n",
"המבנה הכללי של `mutate` הוא:\n",
"\n",
"`data %>% mutate(new_column_name = what_it_contains)`\n",
"\n",
"בואו נשתמש ב-`mutate` על עמודת `Date` ונבצע את הפעולות הבאות:\n",
"\n",
"1. המרת התאריכים (שכרגע הם מסוג תווים) לפורמט של חודשים (אלו תאריכים אמריקאים, כך שהפורמט הוא `MM/DD/YYYY`).\n",
"\n",
"2. חילוץ החודש מתוך התאריכים לעמודה חדשה.\n",
"\n",
"ב-R, החבילה [lubridate](https://lubridate.tidyverse.org/) מקלה על עבודה עם נתוני תאריך-שעה. לכן, נשתמש ב-`dplyr::mutate()`, `lubridate::mdy()`, `lubridate::month()` ונראה איך להשיג את המטרות הללו. נוכל להסיר את עמודת `Date`, מכיוון שלא נזדקק לה יותר בפעולות הבאות.\n"
],
"metadata": {
"id": "2KKo0Ed9Z1VB"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Load lubridate\n",
"library(lubridate)\n",
"\n",
"pumpkins <- pumpkins %>% \n",
" # Convert the Date column to a date object\n",
" mutate(Date = mdy(Date)) %>% \n",
" # Extract month from Date\n",
" mutate(Month = month(Date)) %>% \n",
" # Drop Date column\n",
" select(-Date)\n",
"\n",
"# View the first few rows\n",
"pumpkins %>% \n",
" slice_head(n = 7)"
],
"outputs": [],
"metadata": {
"id": "5joszIVSZ6xe"
}
},
{
"cell_type": "markdown",
"source": [
"איזה כיף! 🤩\n",
"\n",
"עכשיו, בואו ניצור עמודה חדשה בשם `Price`, שמייצגת את המחיר הממוצע של דלעת. לאחר מכן, ניקח את הממוצע של העמודות `Low Price` ו-`High Price` כדי למלא את העמודה החדשה Price.\n",
"<br>\n"
],
"metadata": {
"id": "nIgLjNMCZ-6Y"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Create a new column Price\n",
"pumpkins <- pumpkins %>% \n",
" mutate(Price = (`Low Price` + `High Price`)/2)\n",
"\n",
"# View the first few rows of the data\n",
"pumpkins %>% \n",
" slice_head(n = 5)"
],
"outputs": [],
"metadata": {
"id": "Zo0BsqqtaJw2"
}
},
{
"cell_type": "markdown",
"source": [
"כן!💪\n",
"\n",
"\"אבל רגע!\", תגידו אחרי שתעיפו מבט על כל מערך הנתונים עם `View(pumpkins)`, \"יש כאן משהו מוזר!\"🤔\n",
"\n",
"אם תסתכלו על העמודה `Package`, תראו שהדלעות נמכרות בהרבה תצורות שונות. חלקן נמכרות במידות של `1 1/9 bushel`, חלקן במידות של `1/2 bushel`, חלקן לפי דלעת, חלקן לפי משקל, וחלקן בארגזים גדולים ברוחבים משתנים.\n",
"\n",
"בואו נאמת את זה:\n"
],
"metadata": {
"id": "p77WZr-9aQAR"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Verify the distinct observations in Package column\n",
"pumpkins %>% \n",
" distinct(Package)"
],
"outputs": [],
"metadata": {
"id": "XISGfh0IaUy6"
}
},
{
"cell_type": "markdown",
"source": [
"מדהים!👏\n",
"\n",
"דלעות נראות כקשות מאוד לשקילה עקבית, אז בואו נסנן אותן על ידי בחירת דלעות בלבד עם המחרוזת *bushel* בעמודת `Package` ונשים זאת במסגרת נתונים חדשה בשם `new_pumpkins`. \n"
],
"metadata": {
"id": "7sMjiVujaZxY"
}
},
{
"cell_type": "markdown",
"source": [
"#### dplyr::filter() ו-stringr::str_detect()\n",
"\n",
"[`dplyr::filter()`](https://dplyr.tidyverse.org/reference/filter.html): יוצר תת-קבוצה של הנתונים שמכילה רק **שורות** שעומדות בתנאים שלך, במקרה הזה, דלעות עם המחרוזת *bushel* בעמודת `Package`.\n",
"\n",
"[stringr::str_detect()](https://stringr.tidyverse.org/reference/str_detect.html): מזהה את הנוכחות או ההיעדרות של תבנית בתוך מחרוזת.\n",
"\n",
"חבילת [`stringr`](https://github.com/tidyverse/stringr) מספקת פונקציות פשוטות לפעולות נפוצות על מחרוזות.\n"
],
"metadata": {
"id": "L8Qfcs92ageF"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Retain only pumpkins with \"bushel\"\n",
"new_pumpkins <- pumpkins %>% \n",
" filter(str_detect(Package, \"bushel\"))\n",
"\n",
"# Get the dimensions of the new data\n",
"dim(new_pumpkins)\n",
"\n",
"# View a few rows of the new data\n",
"new_pumpkins %>% \n",
" slice_head(n = 5)"
],
"outputs": [],
"metadata": {
"id": "hy_SGYREampd"
}
},
{
"cell_type": "markdown",
"source": [
"אתם יכולים לראות שהצלחנו לצמצם לכ-415 שורות נתונים המכילות דלעות לפי יחידות. 🤩 \n",
"<br>\n"
],
"metadata": {
"id": "VrDwF031avlR"
}
},
{
"cell_type": "markdown",
"source": [
"#### dplyr::case_when()\n",
"\n",
"**אבל רגע! יש עוד דבר אחד לעשות**\n",
"\n",
"שמת לב שכמות הבושל משתנה בין השורות? צריך לנרמל את התמחור כך שתציג את המחיר לפי בושל, ולא לפי 1 1/9 או 1/2 בושל. הגיע הזמן לעשות קצת מתמטיקה כדי לסטנדרט את זה.\n",
"\n",
"נשתמש בפונקציה [`case_when()`](https://dplyr.tidyverse.org/reference/case_when.html) כדי *לשנות* את עמודת המחיר בהתאם לכמה תנאים. `case_when` מאפשרת לך לייעל מספר הצהרות `if_else()` בווקטור אחד.\n"
],
"metadata": {
"id": "mLpw2jH4a0tx"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Convert the price if the Package contains fractional bushel values\n",
"new_pumpkins <- new_pumpkins %>% \n",
" mutate(Price = case_when(\n",
" str_detect(Package, \"1 1/9\") ~ Price/(1 + 1/9),\n",
" str_detect(Package, \"1/2\") ~ Price/(1/2),\n",
" TRUE ~ Price))\n",
"\n",
"# View the first few rows of the data\n",
"new_pumpkins %>% \n",
" slice_head(n = 30)"
],
"outputs": [],
"metadata": {
"id": "P68kLVQmbM6I"
}
},
{
"cell_type": "markdown",
"source": [
"עכשיו, אנחנו יכולים לנתח את המחיר ליחידה בהתבסס על מדידת הבושל שלהם. כל המחקר הזה על בושלים של דלעות, עם זאת, מראה עד כמה `חשוב` זה `להבין את טבע הנתונים שלך`!\n",
"\n",
"> ✅ לפי [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), המשקל של בושל תלוי בסוג התוצרת, מכיוון שמדובר במדידת נפח. \"בושל של עגבניות, למשל, אמור לשקול 56 פאונד... עלים וירוקים תופסים יותר מקום עם פחות משקל, כך שבושל של תרד שוקל רק 20 פאונד.\" זה די מסובך! בואו לא נטרח לבצע המרה מבושל לפאונד, ובמקום זאת נתמחר לפי בושל. כל המחקר הזה על בושלים של דלעות, עם זאת, מראה עד כמה חשוב להבין את טבע הנתונים שלך!\n",
"\n",
"> ✅ שמתם לב שדלעות שנמכרות בחצי בושל הן מאוד יקרות? האם אתם יכולים להבין למה? רמז: דלעות קטנות יקרות בהרבה מדלעות גדולות, כנראה בגלל שיש הרבה יותר מהן בכל בושל, בהתחשב במקום הלא מנוצל שתופסת דלעת פאי גדולה וחלולה אחת.\n"
],
"metadata": {
"id": "pS2GNPagbSdb"
}
},
{
"cell_type": "markdown",
"source": [
"עכשיו לבסוף, רק בשביל הכיף 💁‍♀️, בואו גם נעביר את עמודת החודש למיקום הראשון, כלומר `לפני` עמודת `Package`.\n",
"\n",
"משתמשים ב-`dplyr::relocate()` כדי לשנות את מיקומי העמודות.\n"
],
"metadata": {
"id": "qql1SowfbdnP"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Create a new data frame new_pumpkins\n",
"new_pumpkins <- new_pumpkins %>% \n",
" relocate(Month, .before = Package)\n",
"\n",
"new_pumpkins %>% \n",
" slice_head(n = 7)"
],
"outputs": [],
"metadata": {
"id": "JJ1x6kw8bixF"
}
},
{
"cell_type": "markdown",
"source": [
"עבודה טובה!👌 עכשיו יש לך מערך נתונים נקי ומסודר שעליו תוכל לבנות את מודל הרגרסיה החדש שלך! \n",
"<br>\n"
],
"metadata": {
"id": "y8TJ0Za_bn5Y"
}
},
{
"cell_type": "markdown",
"source": [
"## 4. ויזואליזציה של נתונים עם ggplot2\n",
"\n",
"<p >\n",
" <img src=\"../../images/data-visualization.png\"\n",
" width=\"600\"/>\n",
" <figcaption>אינפוגרפיקה מאת דאסאני מדיפאלי</figcaption>\n",
"\n",
"\n",
"<!--![Infographic by Dasani Madipalli](../../../../../../2-Regression/2-Data/images/data-visualization.png){width=\"600\"}-->\n",
"\n",
"יש פתגם *חכם* שאומר כך:\n",
"\n",
"> \"הגרף הפשוט הביא יותר מידע למוחו של מנתח הנתונים מכל כלי אחר.\" --- ג'ון טוקי\n",
"\n",
"חלק מתפקידו של מדען הנתונים הוא להציג את האיכות והאופי של הנתונים שהוא עובד איתם. כדי לעשות זאת, הם לעיתים קרובות יוצרים ויזואליזציות מעניינות, או גרפים, תרשימים וטבלאות, שמציגים היבטים שונים של הנתונים. בדרך זו, הם יכולים להציג באופן חזותי קשרים ופערים שקשה לגלות בדרכים אחרות.\n",
"\n",
"ויזואליזציות יכולות גם לעזור לקבוע את טכניקת הלמידה החישובית המתאימה ביותר לנתונים. לדוגמה, תרשים פיזור שנראה כאילו הוא עוקב אחר קו, מצביע על כך שהנתונים מתאימים לתרגיל רגרסיה ליניארית.\n",
"\n",
"R מציעה מספר מערכות ליצירת גרפים, אבל [`ggplot2`](https://ggplot2.tidyverse.org/index.html) היא אחת מהמערכות האלגנטיות והגמישות ביותר. `ggplot2` מאפשרת להרכיב גרפים על ידי **שילוב רכיבים עצמאיים**.\n",
"\n",
"בואו נתחיל עם תרשים פיזור פשוט עבור העמודות Price ו-Month.\n",
"\n",
"במקרה הזה, נתחיל עם [`ggplot()`](https://ggplot2.tidyverse.org/reference/ggplot.html), נספק מערך נתונים ומיפוי אסתטי (עם [`aes()`](https://ggplot2.tidyverse.org/reference/aes.html)) ואז נוסיף שכבות (כמו [`geom_point()`](https://ggplot2.tidyverse.org/reference/geom_point.html)) עבור תרשימי פיזור.\n"
],
"metadata": {
"id": "mYSH6-EtbvNa"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Set a theme for the plots\n",
"theme_set(theme_light())\n",
"\n",
"# Create a scatter plot\n",
"p <- ggplot(data = new_pumpkins, aes(x = Price, y = Month))\n",
"p + geom_point()"
],
"outputs": [],
"metadata": {
"id": "g2YjnGeOcLo4"
}
},
{
"cell_type": "markdown",
"source": [
"האם זה עלילה שימושית 🤷? האם משהו בה מפתיע אותך?\n",
"\n",
"זה לא במיוחד שימושי, כי כל מה שזה עושה זה להציג את הנתונים שלך כפריסה של נקודות בחודש נתון. \n",
"<br>\n"
],
"metadata": {
"id": "Ml7SDCLQcPvE"
}
},
{
"cell_type": "markdown",
"source": [
"### **איך הופכים את זה לשימושי?**\n",
"\n",
"כדי להציג נתונים מועילים בתרשימים, בדרך כלל צריך לקבץ את הנתונים בצורה כלשהי. לדוגמה, במקרה שלנו, מציאת המחיר הממוצע של דלעות עבור כל חודש תספק תובנות נוספות לגבי הדפוסים הבסיסיים בנתונים שלנו. זה מוביל אותנו לעוד מבט מהיר על **dplyr**:\n",
"\n",
"#### `dplyr::group_by() %>% summarize()`\n",
"\n",
"ניתן לחשב בקלות אגרגציה מקובצת ב-R באמצעות\n",
"\n",
"`dplyr::group_by() %>% summarize()`\n",
"\n",
"- `dplyr::group_by()` משנה את יחידת הניתוח מהמאגר הנתונים המלא לקבוצות פרטניות, כמו לפי חודש.\n",
"\n",
"- `dplyr::summarize()` יוצר מסגרת נתונים חדשה עם עמודה אחת עבור כל משתנה קיבוץ ועמודה אחת עבור כל סטטיסטיקת סיכום שציינת.\n",
"\n",
"לדוגמה, ניתן להשתמש ב-`dplyr::group_by() %>% summarize()` כדי לקבץ את הדלעות לקבוצות על בסיס עמודת **Month** ואז למצוא את **המחיר הממוצע** עבור כל חודש.\n"
],
"metadata": {
"id": "jMakvJZIcVkh"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Find the average price of pumpkins per month\r\n",
"new_pumpkins %>%\r\n",
" group_by(Month) %>% \r\n",
" summarise(mean_price = mean(Price))"
],
"outputs": [],
"metadata": {
"id": "6kVSUa2Bcilf"
}
},
{
"cell_type": "markdown",
"source": [
"תמציתי!✨\n",
"\n",
"תכונות קטגוריות כמו חודשים מיוצגות בצורה טובה יותר באמצעות תרשים עמודות 📊. השכבות האחראיות על תרשימי עמודות הן `geom_bar()` ו-`geom_col()`. ניתן לעיין ב-`?geom_bar` כדי ללמוד עוד.\n",
"\n",
"בואו נכין אחד!\n"
],
"metadata": {
"id": "Kds48GUBcj3W"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Find the average price of pumpkins per month then plot a bar chart\r\n",
"new_pumpkins %>%\r\n",
" group_by(Month) %>% \r\n",
" summarise(mean_price = mean(Price)) %>% \r\n",
" ggplot(aes(x = Month, y = mean_price)) +\r\n",
" geom_col(fill = \"midnightblue\", alpha = 0.7) +\r\n",
" ylab(\"Pumpkin Price\")"
],
"outputs": [],
"metadata": {
"id": "VNbU1S3BcrxO"
}
},
{
"cell_type": "markdown",
"source": [
"🤩🤩 זו ויזואליזציה שימושית יותר של נתונים! נראה שהיא מצביעה על כך שהמחיר הגבוה ביותר לדלעות מתרחש בספטמבר ובאוקטובר. האם זה תואם את הציפיות שלך? למה כן או למה לא?\n",
"\n",
"מזל טוב על סיום השיעור השני 👏! הכנת את הנתונים שלך לבניית מודל, ואז גילית תובנות נוספות באמצעות ויזואליזציות!\n"
],
"metadata": {
"id": "zDm0VOzzcuzR"
}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**כתב ויתור**: \nמסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי-דיוקים. המסמך המקורי בשפתו המקורית נחשב למקור הסמכותי. למידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי בני אדם. איננו נושאים באחריות לכל אי-הבנה או פרשנות שגויה הנובעת משימוש בתרגום זה.\n"
]
}
]
}