
פרק 7 - tidyverse
tidyverse היא חבילה שמאגדת תחתיה מספר תתי חבילות שמשמשות כולן לניתוח נתונים. עיקר השימוש שלנו יהיה:
1. בחבילה dplyr שמסייעת לבצע מניפולציות על מידע
2. בחבילה ggplot2 שמסייעת להציג מידע בצורה גרפית
# install the library tidyverse if it is not already installed
if (!require("tidyverse")) install.packages("tidyverse")
# load the library tidyverse
library("tidyverse")
# install the library tidylog if it is not already installed
if (!require("tidylog")) install.packages("tidylog")
# load the library tidylog
library("tidylog")
Pipe
הספרייה dplyr, אשר נמצאת תחת tidyverse, מגדירה אופרטור חדש שנקרא - Pipe.
# ****** %>% ******
some_data %>% some_function()
# the code above is equivalent to this:
some_function(some_data)
המידע שנמצא משמאל לאופרטור מועבר כקלט לפונקציה שנמצאת מימינו. לכן הוא משמש כצינור.
בעבודה עם dataframes השימוש באופרטור נוח ומקל על ניתוח ועיבוד הנתונים.
אשתמש ב-Pipe כדי להדגים פונקציות נוספות תחת tidyverse ולכן חשוב להכיר אותו.
דוגמא פשוטה:
ניקח וקטור של המספרים מ1 עד 8, ונעביר אותו בעזרת Pipe לפונקציה sum.
library("dplyr")
1:8 %>% sum()
## [1] 36
# or:
# 1:8 %>% sum
# both valid
במילים פשוטות - הפונקציה sum קיבלה את הוקטור כקלט. כלומר, הכתיבה הבאה הייתה מחזירה תוצאה זהה:
sum(1:8)
## [1] 36
ניתן להשתמש באופרטור מספר פעמים כרצוננו
<- c(1.3,2.4,3.1,4,5)
vec1 <- vec1 %>%
rounded_sum sum() %>%
round()
# the same as:
<- round(sum(vec1)) rounded_sum_old_way
read.csv
הפונקציה read.csv מקבלת קובץ csv ומחזירה אובייקט מסוג data.frame
הערה: זאת פונקציה בסיסית שלא שייכת ל-Tidyverse
אך ניעזר בה כדי לקרוא את קובץ הנתונים איתו נעבוד.
בדוגמאות הבאות נעבוד עם קובץ הנתונים cereal.csv
<- read.csv(file = 'cereal.csv')
cereal_df head(cereal_df)
## name calories sodium potass rating
## 1 100% Bran 70 130 280 68.40297
## 2 100% Natural Bran 120 15 135 33.98368
## 3 All-Bran 70 260 320 59.42551
## 4 All-Bran with Extra Fiber 50 140 330 93.70491
## 5 Almond Delight 110 200 -1 34.38484
## 6 Apple Cinnamon Cheerios 110 180 70 29.50954
summary(cereal_df)
## name calories sodium potass
## Length:77 Length:77 Min. : 0.0 Min. : -1.00
## Class :character Class :character 1st Qu.:125.0 1st Qu.: 35.00
## Mode :character Mode :character Median :180.0 Median : 85.00
## Mean :154.6 Mean : 89.64
## 3rd Qu.:210.0 3rd Qu.:110.00
## Max. :320.0 Max. :330.00
## rating
## Min. : 1.00
## 1st Qu.:31.23
## Median :40.11
## Mean :41.25
## 3rd Qu.:50.83
## Max. :93.70
filter
הפונקציה filter מחזירה רק ערכים העומדים בתנאי מסוים.
בדוגמא הבאה הפונקציה filter מקבלת כקלט את cereal_df ותנאי.
מתוך cereal_df יחזרו רק השורות שבהן המשתנה rating גדול מ-70. את הפלט של הפונקציה נכניס לתוך משתנה חדש: cereal_df_filtered
<- cereal_df %>% filter(rating > 70) cereal_df_filtered
## filter: removed 74 rows (96%), 3 rows remaining
head(cereal_df_filtered)
## name calories sodium potass rating
## 1 All-Bran with Extra Fiber 50 140 330 93.70491
## 2 Shredded Wheat 'n'Bran 90 0 140 74.47295
## 3 Shredded Wheat spoon size 90 0 120 72.80179
mutate
הפונקציה mutate מאפשרת ליצור עמודות חדשות בdf או לערוך עמודות קיימות.
<- read.csv(file = 'cereal.csv')
cereal_df <- cereal_df %>% mutate(
cereal_df high_clorie = case_when(
as.numeric(calories) > 80 ~ TRUE,
as.numeric(calories) <= 80 ~ FALSE,
TRUE ~ NA
))
## mutate: new variable 'high_clorie' (logical) with 3 unique values and 4% NA
head(cereal_df)
## name calories sodium potass rating high_clorie
## 1 100% Bran 70 130 280 68.40297 FALSE
## 2 100% Natural Bran 120 15 135 33.98368 TRUE
## 3 All-Bran 70 260 320 59.42551 FALSE
## 4 All-Bran with Extra Fiber 50 140 330 93.70491 FALSE
## 5 Almond Delight 110 200 -1 34.38484 TRUE
## 6 Apple Cinnamon Cheerios 110 180 70 29.50954 TRUE
select
הפונקציה select מאפשרת לבחור עמודות מסוימות מתוך data.frame. הפונקציה מקבלת data.frame ורשימה של עמודות (או תנאי הנוגע אליהן) כקלט ומחזירה את אותו data.frame, רק עם אותן עמודות.
בדוגמא הבאה ניקח מתוך cereal_df את העמודות calories ו- sodium בלבד.
<- read.csv(file = 'cereal.csv')
cereal_df <- cereal_df %>% select(c(calories, sodium)) cereal_df
## select: dropped 3 variables (name, potass, rating)
colnames(cereal_df)
## [1] "calories" "sodium"
sample_frac
הפונקציה sample_frac מאפשר לדגום אחוז מסוים של ערכים מתוך data.frame.
בדוגמא הבאה נדגום 40% מהשורות מתוך cereal_df.
<- read.csv(file = 'cereal.csv')
cereal_df <- cereal_df %>% sample_frac(0.4) cereal_df
## sample_frac: removed 46 rows (60%), 31 rows remaining