slides-12 - ggplotyuval/teaching/R/slides... · 2020. 6. 5. · 15 40 60 80 1e+03 1e+04 1e+05 GDP...
Transcript of slides-12 - ggplotyuval/teaching/R/slides... · 2020. 6. 5. · 15 40 60 80 1e+03 1e+04 1e+05 GDP...
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי 1
12חלק • R –מבוא לתכנות מדעי וסטטיסטי
ggplot-גרפיקה ב
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי 2
בסיסי R-גרפיקה ב
-ראינו והשתמשנו ב•
•plot
•hist
•boxplot
•barplot
…
גישה אחרת לגמרי –היום •
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
ggplot
3 2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
ggplot
ggplot2נשתמש בחבילה •
2005-ב Hadley Wickhamי "נוצרה ע•
Lelandלגרפיקה שהמציא " דקדוק"מתבססת על •
Wilkinson
•ggplot = Grammar of Graphics Plot
Rאחת החבילות הפופולריות ביותר של •
4
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
ggplot
5
איכות
התוצאה
זמן
base R
ggplot
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
אלמנטים של גרפיקה
•data – הנתונים שרוצים להציג בתרשים
•aes – המיפוי האסתטי)aesthetic ( של המשתניםבנתונים לתכונות אסתטיות
)x(מיקום אופקי •
)y(מיקום אנכי •
צבע•
גודל•
6
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
אלמנטים של גרפיקה
•geoms – האובייקטים הגאומטריים שמייצגים את
הנתונים בתרשים
)points(נקודות •
)lines(קווים •
)bars(עמודות •
)polygons(מצולעים •
7 2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
אלמנטים של גרפיקה
•stats – טרנספורמציות סטטיסטיות על הנתונים
היסטוגרמהחלוקה לקבוצות וספירת תצפיות בשביל •
סיכום מגמה באמצעות הוספת קו רגרסיה•
שכבה אחר , מוסיפים לתרשים את האלמנטים השונים•
שכבה
8
2019/20, ף"תש' בסמסטר • 12חלק • 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 2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
דיאגרמת פיזור
> p <- ggplot(gDat, aes(x = gdpPercap, y = lifeExp))
> p + geom_point()
10
40
60
80
0 30000 60000 90000
gdpPercap
lifeE
xp
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
שמות לצירים
> p + geom_point() + labs(x="GDP Per Capita",
y="Life Expectancy")
11
40
60
80
0 30000 60000 90000
GDP Per Capita
Life E
xpecta
ncy
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
טרנספורמציות
"מלוכלכת"טרנספורמציה לוגריתמית •> ggplot(gDat, aes(x = log10(gdpPercap),
y = lifeExp)) + geom_point()
12
40
60
80
3 4 5
log10(gdpPercap)
lifeE
xp
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
טרנספורמציות
עדיף ככה•> p + geom_point() + scale_x_log10()
13
40
60
80
1e+03 1e+04 1e+05
gdpPercap
lifeE
xp
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
טרנספורמציות
נקבע את השינויים האחרונים•> p <- p + scale_x_log10() +
labs(x="GDP Per Capita", y="Life Expectancy")
להוסיף בשלבים את הפקודות שרוצים : כך מקובל לעבוד•
"לשמור"
14
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
חלוקה לקבוצות
> p + geom_point(aes(color = continent))
15
40
60
80
1e+03 1e+04 1e+05
GDP Per Capita
Life
Expecta
ncy
continent
Africa
Americas
Asia
Europe
Oceania
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
חלוקה לקבוצות
> p + geom_point(aes(color = continent)) +
scale_color_manual(values =
c("red", "blue", "green", "black", "yellow"))
16
40
60
80
1e+03 1e+04 1e+05
GDP Per Capita
Life
Expecta
ncy
continent
Africa
Americas
Asia
Europe
Oceania
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
חלוקה לקבוצות
> vals <- c("#FF0000", "#00FF00", "#0000FF",
"#FF90C0", "#CC6600")
> p + geom_point(aes(color = continent)) +
scale_color_manual(values = vals)
17
40
60
80
1e+03 1e+04 1e+05
GDP Per Capita
Life
Expecta
ncy
continent
Africa
Americas
Asia
Europe
Oceania
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Overplotting-פתרונות ל
> p + geom_point(alpha = 0.3, size = 2)
18
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Overplotting-פתרונות ל
> p + geom_bin2d()
19 2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
החלקה
> p + geom_point() + geom_smooth()
20
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
החלקה
> p + geom_point() + geom_smooth(lwd = 1.5,
se = FALSE)
21
40
60
80
1e+03 1e+04 1e+05
GDP Per Capita
Life
Expecta
ncy
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
קו רגרסיה
> p + geom_point() + geom_smooth(lwd = 1.5,
se = FALSE, method = "lm")
22
40
60
80
1e+03 1e+04 1e+05
GDP Per Capita
Life
Expecta
ncy
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
החלקה
> p + aes(color = continent) + geom_point() +
geom_smooth(lwd = 1.5, se = FALSE)
23
40
60
80
1e+03 1e+04 1e+05
GDP Per Capita
Life
Expecta
ncy
continent
Africa
Americas
Asia
Europe
Oceania
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Faceting
> p + geom_point(alpha = 0.3) +
facet_wrap(~ continent)
24
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Faceting
> p + geom_point(alpha = 0.3) +
facet_wrap(~ continent) + geom_smooth(se = FALSE)
25 2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
תרגיל
שרטטו את תוחלת החיים כפונקציה של השנה לכל •
המדינות
דיאגרמת פיזור רגילה•
•faceting לפי יבשת
facetingבלי קו רגרסיה לינארית עם החלקה ועם •
facetingעם החלקה עם •
עם קווים שמחברים בין הנקודות של כל מדינה לאורך השנים•
26
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Subsetting
•ggplot היטב יחד עם עובדתdplyr> library(dplyr)
> gDat %>% filter(country == "Italy") %>%
ggplot(aes(x=year, y=lifeExp)) + geom_line() + geom_point()
27
70
75
80
1950 1960 1970 1980 1990 2000
year
lifeE
xp
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Subsetting
> jCountries <- c("Canada", "Rwanda", "Cambodia")
> gDat %>% filter(country %in% jCountries) %>%
ggplot(aes(x=year, y=lifeExp, color = country)) +
geom_line() + geom_point()
28
40
60
80
1950 1960 1970 1980 1990 2000
year
lifeE
xp
country
Cambodia
Canada
Rwanda
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
היסטוגרמה
> ggplot(subset(gDat, continent == "Europe"),
aes(lifeExp)) + geom_histogram()
29
0
10
20
30
40
50
50 60 70 80
lifeExp
count
2019/20, ף"תש' בסמסטר • 12חלק • 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
30
2019/20, ף"תש' בסמסטר • 12חלק • 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
31 2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Stripplots
:לא כל כך טוב•> ggplot(gDat, aes(x = continent, y = lifeExp)) +
geom_point()
32
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Stripplots
:עדיף ככה•> ggplot(gDat, aes(x = continent, y = lifeExp)) +
geom_jitter()
33 2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Stripplots
> ggplot(gDat, aes(x = continent, y = lifeExp)) +
geom_jitter(position = position_jitter(width=0.4,
height=0), alpha=0.25)
34
2019/20, ף"תש' בסמסטר • 12חלק • 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)
35 2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Stripplots
איך משנים את התרשים הקודם כך שסדר : תרגיל•
?יהיה לפי חציון עולה stripplots-ה
36
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Boxplots
> ggplot(gDat, aes(x = continent, y = lifeExp)) +
geom_boxplot()
37
40
60
80
Africa Americas Asia Europe Oceania
continent
lifeE
xp
2019/20, ף"תש' בסמסטר • 12חלק • 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)
38
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Bar charts
> ggplot(gDat, aes(x = continent)) + geom_bar()
39
0
200
400
600
Africa Americas Asia Europe Oceania
continent
count
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Bar charts
> ggplot(gDat, aes(x = reorder(continent, continent,
length))) + geom_bar() + labs(x = "continent")
40
0
200
400
600
Oceania Americas Europe Asia Africa
continent
count
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Bar charts
> ggplot(gDat, aes(x = continent)) +
geom_bar(width=0.2) + coord_flip()
41
Africa
Americas
Asia
Europe
Oceania
0 200 400 600
count
continent
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Bar charts
שברירת המחדל שלו , statיש ארגומנט geom_bar-ל•
“count"היא
לכן הגובה של כל עמודה הוא מספר המדינות בכל יבשת•
?איך משרטטים עמודות בגבהים נתונים•
נניח שנתונה מסגרת הנתונים הבאה•> cars
maker sold
1 Toyota 512
2 Audi 126
3 Honda 313
4 Fiat 88
42
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Bar charts
> ggplot(cars, aes(x = maker, y = sold)) +
geom_bar(stat = "identity")
43
0
100
200
300
400
500
Audi Fiat Honda Toyota
maker
sold
2019/20, ף"תש' בסמסטר • 12חלק • 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")
44
40
60
80
1e+03 1e+04 1e+05
GDP Per Capita
Life E
xpecta
ncy
continent
Africa
Americas
Asia
Europe
Oceania
Life expectancy vs. GDP by continent
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Themes
ויזואלי" סגנון"כל הגרפים שראינו עד עכשיו היו באותו •
ggthemesיש מבחר של סגנונות אחרים בספריה •
נטען את הספריה•> library(ggthemes)
45 2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Themes
> p + theme_economist() +
ggtitle("Life Exp. vs GDP, theme = economist")
46
40
60
80
1e+03 1e+04 1e+05
gdpPercap
life
Exp
continent Africa Americas Asia Europe Oceania
Life Exp. vs GDP, theme = economist
2019/20, ף"תש' בסמסטר • 12חלק • R –מבוא לתכנות מדעי וסטטיסטי
Themes
> p + theme_wsj() + ggtitle("Theme = WSJ")
47
40
60
80
1e+03 1e+04 1e+05
continent Africa Americas Asia Europe Oceania
Theme = WSJ