slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב...

13
ב מתקדם תכנות- R חלק5 סמסטר ב' תשע" ו, 2015/16 1 ב מתקדם תכנות- R חלק5 ב גרפיקה- ggplot ב מתקדם תכנות- R חלק5 סמסטר ב' תשע" ו, 2015/16 2 ב גרפיקה- R בסיסי ב והשתמשנו ראינו- plot hist boxplot barplot היום לגמרי אחרת גישה תכנות מתקדם ב- R חלק5 סמסטר ב' תשע" ו, 2015/16 ggplot 3 ב מתקדם תכנות- R חלק5 סמסטר ב' תשע" ו, 2015/16 ggplot בחבילה נשתמשggplot2 ע נוצרה" יHadley Wickham ב- 2005 על מתבססת" דקדוק" שהמציא לגרפיקהLeland Wilkinson ggplot = Grammar of Graphics Plot של ביותר הפופולריות החבילות אחתR 4

Transcript of slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב...

Page 1: slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב םדקתמ תונכת 1 5 קלח • R-ב םדקתמ תונכת ggplot-ב הקיפרג

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב 1

5חלק • R-תכנות מתקדם ב

ggplot-גרפיקה ב

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב 2

בסיסי R-גרפיקה ב

-ראינו והשתמשנו ב••plot•hist•boxplot•barplot

גישה אחרת לגמרי–היום •

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

ggplot

3 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

ggplot

ggplot2נשתמש בחבילה •

2005-ב Hadley Wickhamי "נוצרה ע•

Lelandלגרפיקה שהמציא " דקדוק"מתבססת על •Wilkinson

•ggplot = Grammar of Graphics Plot

Rאחת החבילות הפופולריות ביותר של •

4

Page 2: slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב םדקתמ תונכת 1 5 קלח • R-ב םדקתמ תונכת ggplot-ב הקיפרג

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

ggplot

5

איכות

התוצאה

זמן

base R

ggplot

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

אלמנטים של גרפיקה

•data–הנתונים שרוצים להציג בתרשים

•aes– המיפוי האסתטי)aesthetic ( של המשתנים

בנתונים לתכונות אסתטיות

)x(מיקום אופקי •

)y(מיקום אנכי •

צבע•

גודל•

6

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

אלמנטים של גרפיקה

•geoms– האובייקטים הגאומטריים שמייצגים את

הנתונים בתרשים

)points(נקודות •

)lines(קווים •

)bars(עמודות •

)polygons(מצולעים •

7 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

אלמנטים של גרפיקה

•stats–טרנספורמציות סטטיסטיות על הנתונים

היסטוגרמהחלוקה לקבוצות וספירת תצפיות בשביל •

סיכום מגמה באמצעות הוספת קו רגרסיה•

שכבה אחר , מוסיפים לתרשים את האלמנטים השונים•

שכבה

8

Page 3: slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב םדקתמ תונכת 1 5 קלח • R-ב םדקתמ תונכת ggplot-ב הקיפרג

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

הנתונים

> library(ggplot2)

> gDat <- read.table(file="countries_data.txt", header=T, sep="\t")

> head(gDat)

country year pop continent lifeExp gdpPercap

1 Afghanistan 1952 8425333 Asia 28.801 779.4453

2 Afghanistan 1957 9240934 Asia 30.332 820.8530

3 Afghanistan 1962 10267083 Asia 31.997 853.1007

4 Afghanistan 1967 11537966 Asia 34.020 836.1971

5 Afghanistan 1972 13079460 Asia 36.088 739.9811

6 Afghanistan 1977 14880372 Asia 38.438 786.1134

9 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

דיאגרמת פיזור

> p <- ggplot(gDat, aes(x = gdpPercap, y = lifeExp))

> p + geom_point()

10

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

שמות לצירים

> p + geom_point() + labs(x="GDP Per Capita", y="Life Expectancy")

11 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

טרנספורמציות

"מלוכלכת"טרנספורמציה לוגריתמית •> ggplot(gDat, aes(x = log10(gdpPercap),

y = lifeExp)) + geom_point()

12

Page 4: slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב םדקתמ תונכת 1 5 קלח • R-ב םדקתמ תונכת ggplot-ב הקיפרג

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

טרנספורמציות

עדיף ככה•> p + geom_point() + scale_x_log10()

13 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

טרנספורמציות

נקבע את השינויים האחרונים•> p <- p + scale_x_log10() +

labs(x="GDP Per Capita", y="Life Expectancy")

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

"לשמור"

14

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

חלוקה לקבוצות

> p + geom_point(aes(color = continent))

15 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

חלוקה לקבוצות

> p + geom_point(aes(color = continent)) + scale_color_manual(values = c("red", "blue", "green", "black", "yellow"))

16

Page 5: slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב םדקתמ תונכת 1 5 קלח • R-ב םדקתמ תונכת ggplot-ב הקיפרג

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

חלוקה לקבוצות

> vals <- c("#FF0000", "#00FF00", "#0000FF", "#FF90C0", "#CC6600")

> p + geom_point(aes(color = continent)) + scale_color_manual(values = vals)

17 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Overplotting-פתרונות ל

> p + geom_point(alpha = 0.3, size = 2)

18

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Overplotting-פתרונות ל

> p + geom_bin2d()

19 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

החלקה

> p + geom_point() + geom_smooth()

20

Page 6: slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב םדקתמ תונכת 1 5 קלח • R-ב םדקתמ תונכת ggplot-ב הקיפרג

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

החלקה

> p + geom_point() + geom_smooth(lwd = 1.5, se = FALSE)

21 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

קו רגרסיה

> p + geom_point() + geom_smooth(lwd = 1.5, se = FALSE, method = "lm")

22

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

החלקה

> p + aes(color = continent) + geom_point() + geom_smooth(lwd = 1.5, se = FALSE)

23 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Faceting

> p + geom_point(alpha = 0.3) + facet_wrap(~ continent)

24

Page 7: slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב םדקתמ תונכת 1 5 קלח • R-ב םדקתמ תונכת ggplot-ב הקיפרג

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Faceting

> p + geom_point(alpha = 0.3) + facet_wrap(~ continent) + geom_smooth(se = FALSE)

25 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

תרגיל

שרטטו את תוחלת החיים כפונקציה של השנה לכל •

המדינות

דיאגרמת פיזור רגילה•

•faceting לפי יבשת

facetingבלי קו רגרסיה לינארית עם החלקה ועם •

facetingעם החלקה עם •

עם קווים שמחברים בין הנקודות של כל מדינה לאורך השנים•

26

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

subsetהפונקציה

> subset(gDat, country == "Italy" & year <= 1962)

country year pop continent lifeExp gdpPercap

763 Italy 1952 47666000 Europe 65.94 4931.404

764 Italy 1957 49182000 Europe 67.81 6248.656

765 Italy 1962 50843200 Europe 69.24 8243.582

> subset(gDat, country == "Italy" & year <= 1962, select=c(pop, lifeExp))

pop lifeExp

763 47666000 65.94

764 49182000 67.81

765 50843200 69.24

27 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

droplevelsהפונקציה

> x <- subset(gDat, country == "Italy" & year <= 1962)

> x

country year pop continent lifeExp gdpPercap

763 Italy 1952 47666000 Europe 65.94 4931.404

764 Italy 1957 49182000 Europe 67.81 6248.656

765 Italy 1962 50843200 Europe 69.24 8243.582

> x$continent

[1] Europe Europe Europe

Levels: Africa Americas Asia Europe Oceania

> x <- droplevels(subset(gDat, country == "Italy" & year <= 1962))

> x$continent

[1] Europe Europe Europe

Levels: Europe

28

Page 8: slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב םדקתמ תונכת 1 5 קלח • R-ב םדקתמ תונכת ggplot-ב הקיפרג

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

subsetting

> ggplot(subset(gDat, country == "Italy"), aes(x=year, y=lifeExp)) + geom_line() + geom_point()

29 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

subsetting

> jCountries <- c("Canada", "Rwanda", "Cambodia")

> ggplot(subset(gDat, country %in% jCountries), aes(x = year, y = lifeExp, color = country)) + geom_line() + geom_point()

30

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

reorderהפונקציה

> diets

name diet change

1 Jill A 1.3

2 Jack C -3.9

3 Tiffany B -6.1

4 Sarah B 1.2

5 Stan A -0.8

6 Terry B -2.0

7 Jeff C -4.4

8 Dave C -2.8

> diets$diet

[1] A C B B A B C C

Levels: A B C

31 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

reorderהפונקציה

> reorder(diets$diet, diets$change, mean)

[1] A C B B A B C C

attr(,"scores")

A B C

0.25 -2.30 -3.70

Levels: C B A

> reorder(diets$diet, diets$change, min)

[1] A C B B A B C C

attr(,"scores")

A B C

-0.8 -6.1 -4.4

Levels: B C A

32

Page 9: slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב םדקתמ תונכת 1 5 קלח • R-ב םדקתמ תונכת ggplot-ב הקיפרג

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

subsetting

> ggplot(subset(gDat, country %in% jCountries), aes(x = year, y = lifeExp, color = reorder(country, -lifeExp, max))) + geom_line() + geom_point() + labs(color="country")

33 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

היסטוגרמה

> ggplot(subset(gDat, continent == "Europe"), aes(lifeExp)) + geom_histogram()

34

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Stripplots

:לא כל כך טוב•> ggplot(gDat, aes(x = continent, y = lifeExp)) +

geom_point()

35 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Stripplots

:עדיף ככה•> ggplot(gDat, aes(x = continent, y = lifeExp)) +

geom_jitter()

36

Page 10: slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב םדקתמ תונכת 1 5 קלח • R-ב םדקתמ תונכת ggplot-ב הקיפרג

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Stripplots

> ggplot(gDat, aes(x = continent, y = lifeExp)) + geom_jitter(position = position_jitter(width=0.4, height=0), alpha=0.25)

37 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Stripplots

> ggplot(gDat, aes(x = continent, y = lifeExp)) + geom_jitter(position = position_jitter(width=0.4),

alpha=0.25) + stat_summary(fun.y=median, color="red",

geom="point", size=5)

38

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Stripplots

איך משנים את התרשים הקודם כך שסדר : תרגיל•

?יהיה לפי חציון עולה stripplots-ה

39 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Boxplots

> ggplot(gDat, aes(x = continent, y = lifeExp)) + geom_boxplot()

40

Page 11: slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב םדקתמ תונכת 1 5 קלח • R-ב םדקתמ תונכת ggplot-ב הקיפרג

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Boxplots

> ggplot(gDat, aes(x = continent, y = lifeExp)) + geom_boxplot(outlier.colour = "hotpink") + geom_jitter(position = position_jitter(width=0.4,

height=0), alpha=0.25)

41 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Bar charts

> ggplot(gDat, aes(x = continent)) + geom_bar()

42

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Bar charts

> ggplot(gDat, aes(x = reorder(continent, continent, length))) + geom_bar() + labs(x = "continent")

43 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Bar charts

> ggplot(gDat, aes(x = continent)) + geom_bar(width=0.2) + coord_flip()

44

Page 12: slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב םדקתמ תונכת 1 5 קלח • R-ב םדקתמ תונכת ggplot-ב הקיפרג

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Bar charts

שברירת המחדל שלו , statיש ארגומנט geom_bar-ל•

“count"היא לכן הגובה של כל עמודה הוא מספר המדינות בכל יבשת•

?איך משרטטים עמודות בגבהים נתונים•

נניח שנתונה מסגרת הנתונים הבאה•

> cars

maker sold

1 Toyota 512

2 Audi 126

3 Honda 313

4 Fiat 88

45 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Bar charts

> ggplot(cars, aes(x = maker, y = sold)) + geom_bar(stat = "identity")

46

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

הוספת כותרת

> p <- ggplot(gDat, aes(x = gdpPercap, y = lifeExp)) + scale_x_log10() + aes(color = continent) + geom_point() + labs(x="GDP Per Capita", y="Life Expectancy")

> p + ggtitle("Life expectancy vs. GDP by continent")

47 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Themes

ויזואלי" סגנון"כל הגרפים שראינו עד עכשיו היו באותו •

ggthemesיש מבחר של סגנונות אחרים בספריה •

נטען את הספריה•

> library(ggthemes)

48

Page 13: slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב םדקתמ תונכת 1 5 קלח • R-ב םדקתמ תונכת ggplot-ב הקיפרג

2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Themes

> p + theme_economist() + ggtitle("Life Exp. vs GDP, theme = economist")

49 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב

Themes

> p + theme_wsj() + ggtitle("Theme = WSJ")

50