Explorative Datenanalyse mit R The R Bootcamp |
from today.com
In diesem Practical wirst du üben mit ggplot2
Grafiken zu erstellen.
Am Ende des Practicals wirst du wissen wie man:
geom
s verwendet.Öffne dein TheRBootcamp
R project. Es sollte die Ordner 1_Data
und 2_Code
enthalten.
Öffne ein neues R Skript. Schreibe deinen Namen, das Datum und “Plotting Practical” als Kommentare an den Anfang des Skripts.
## NAME
## DATUM
## Plotting Practical
Speichere das neue Skript unter dem Namen plotting_practical.R
im 2_Code
Ordner.
Lade tidyverse
und ggthemes
.
read_csv()
Funktion um den Datensatz mcdonalds
als Objekt mcdonalds
einzulesen. Denke an den Trick mit den Anführungszeichen.# Lese mcdonalds
mcdonalds <- read_csv('1_Data/mcdonalds.csv')
Printe den Datensatz. Wurden alle Variablentypen korrekt identifiziert?
Verwende summary()
um einen weiteren Überblick über die Daten zu bekommen.
In diesem Abschnitt wirst du den folgenden Plot Schritt-für-Schritt zusammenbauen.
ggplot()
um einen leeren Plot für den mcdonalds
Datensatz zu starten.ggplot(data = mcdonalds)
ggplot(mcdonalds)
mapping
-Argument und die aes()
-Helferfunltion um Calories
der x-Achse und SaturatedFat
der y-Achse zuzuweisen.ggplot(data = mcdonalds,
mapping = aes(x = XX, y = XX))
ggplot(mcdonalds, aes(x = Calories, y = SaturatedFat))
geom_point()
mit +
um Punkte zu plotten.ggplot(mcdonalds, aes(x = Calories, y = SaturatedFat)) +
geom_point()
col
Argument in aes()
um die Farbe nach der Variable Category
variieren zu lassen.ggplot(mcdonalds, aes(x = XX, y = XX, col = XX)) +
geom_point()
ggplot(mcdonalds, aes(x = Calories, y = SaturatedFat, col = Category)) +
geom_point()
+ geom_smooth()
um eine gefittete Linie zu ergänzen.ggplot(mcdonalds, aes(x = XX, y = XX, col = XX)) +
geom_point() +
geom_smooth()
ggplot(mcdonalds, aes(x = Calories, y = SaturatedFat, col = Category)) +
geom_point() +
geom_smooth()
geom_smooth()
auf "black"
setzt.ggplot(mcdonalds, aes(x = XX, y = XX, col = XX)) +
geom_point() +
geom_smooth(col = "XX")
ggplot(mcdonalds, aes(x = Calories, y = SaturatedFat, col = Category)) +
geom_point() +
geom_smooth(col = "black")
R versteht eine grosse Menge von Farbworten. Lasse dir diese mit colors()
(ohne Argumente) anzeigen. Alle aufgeführten character
Werte können verwenden werden um die entsprechende Farbe zu definieren.
Verwende nun labs()
um den Plot angemessen zu annotieren.
ggplot(mcdonalds, aes(x = XX, y = XX, col = XX)) +
geom_point() +
geom_smooth(col = "XX") +
labs(title = "XX",
subtitle = "XX",
caption = "XX")
ggplot(mcdonalds, aes(x = Calories, y = SaturatedFat, col = Category)) +
geom_point() +
geom_smooth(col = "black") +
labs(title = "McDonalds Nährwerte",
subtitle = "Jeder Punkt ist ein Menü-Item",
caption = "Quelle: Kaggle.com")
xlim()
, eine einfache Version von scale_x_continuous()
(mehr dazu später), um die x-Achse auf die Werte 0
und 1250
zu begrenzen.ggplot(mcdonalds, aes(x = XX, y = XX, col = XX)) +
geom_point() +
geom_smooth(col = "XX") +
labs(title = "XX",
subtitle = "XX",
caption = "XX") +
xlim(XX, XX)
ggplot(mcdonalds, aes(x = Calories, y = SaturatedFat, col = Category)) +
geom_point() +
geom_smooth(col = "black") +
labs(title = "McDonalds Nährwerte",
subtitle = "Jeder Punkt ist ein Menü-Item",
caption = "Quelle: Kaggle.com") +
xlim(0, 1250)
theme_minimal()
um die Ästhetik des Plots anzupassen. Auch hierzu mehr später.ggplot(mcdonalds, aes(x = Calories, y = SaturatedFat, col = Category)) +
geom_point() +
geom_smooth(col = "black") +
labs(title = "McDonalds Nährwerte",
subtitle = "Jeder Punkt ist ein Menü-Item",
caption = "Quelle: Kaggle.com") +
xlim(0, 1250) +
theme_minimal()
geom
sCalories
(y-Achse) in Abhängigkeit der Category
(x-Achse) zu kreieren. Violinenplots zeigen mit ihrer Dicke die jeweilige relative Häufigkeit der Werte an - in diesem Fall der Kalorien. Verwende für das Argument fill
ebenfalls Category
, um die Violinen entsprechend einzufärben.ggplot(data = mcdonalds,
aes(x = XX, y = XX, fill = XX)) +
geom_violin()
ggplot(data = mcdonalds,
aes(x = Category, y = Calories, fill = Category)) +
geom_violin()
labs()
einen angemessenen Titel (title
) und Untertitel (subtitle
).ggplot(data = mcdonalds, aes(x = XX, y = XX, fill = XX)) +
geom_violin() +
labs(title = "XX",
subtitle = "XX")
ggplot(data = mcdonalds, aes(x = Category, y = Calories, fill = Category)) +
geom_violin() +
labs(title = "McDonalds",
subtitle = "Kalorienverteilung pro Menü Kategorie")
guides(fill = FALSE)
, so dass keine Legende gezeigt wird.ggplot(data = mcdonalds, aes(x = XX, y = XX, fill = XX)) +
geom_violin() +
labs(title = "XX",
subtitle = "XX") +
guides(fill = FALSE)
ggplot(data = mcdonalds, aes(x = Category, y = Calories, fill = Category)) +
geom_violin() +
labs(title = "McDonalds",
subtitle = "Kalorienverteilung pro Menü Kategorie") +
guides(fill = FALSE)
geom_jitter()
um Punkte über die Violinen zu plotten. Setze in der Funktion width = 1
und alpha = .5
.ggplot(data = mcdonalds,
aes(x = Category, y = Calories, fill = Category)) +
geom_violin() +
labs(title = "McDonalds",
subtitle = "Kalorienverteilung pro Menü Kategorie") +
guides(fill = FALSE) +
geom_jitter(width = .1, alpha = .5)
width
oder alpha
in geom_jitter()
.fill = Category
.geom_boxplot()
um stattdessen einen Box-Plot zu plotten.geom_text
In dieser Sektion wirst du den folgenden Plot unter Verwendung von geom_text()
kreieren.
ggplot(mcdonalds, aes(x = XX,
y = XX,
col = XX)) +
geom_point() +
xlim(XX, XX) +
ylim(XX, XX) +
theme_minimal() +
labs(title = "XX")
Nun ergänze geom_text()
so dass für jeden Punkt das entsprechende Item
Label angezeigt wird.
Wo sind die Labels? Ah, du hast ggplot
nicht gesagt welche Spalte die Information beinhaltet, die in den Labels stehen soll. Behebe dieses Problem indem du innerhalb der aes()
Funktion dem Argument label
die Spalte Item
zuweist. Führe den Code nochmal aus. Jetzt solltest du viele labels sehen!
Passe geom_text()
an in dem du col
auf black
, check_overlap
auf TRUE
, und hjust
auf "left"
setzt.
Verwende nun das data
Argument in geom_text()
und weise ihm einen gefilterten Auschnitt des mcdonalds
Datensatzes zu, nämlich data = mcdonalds %>% filter(Calories > 1100)
. Schau was passiert.
ggplot(mcdonalds, aes(x = Sugars,
y = Calories,
col = Category,
label = Item)) +
geom_point() +
geom_text(data = mcdonalds %>%
filter(Calories > 1100),
col = "black",
check_overlap = TRUE,
hjust = "left") +
xlim(0, 150) +
ylim(0, 2000) +
theme_minimal() +
labs(title = "Ergänze Labels zu einem Plot mit geom_text()")
Verwende das size
Argument in aes()
, so dass die Grösse der Punkte den Calories
entspricht.
Versuche andere theme_*
Funktionen. Z.B. theme_excel()
oder theme_economist()
aus dem ggthemes
Paket.
stat_summary()
Funktion können auch direkt einfache Statistiken berechnet und geplotted werden. Verwende den folgenden Code um die Calories
(y-Achse) gegen Categories
zu plotten. Annotiere angemessen.ggplot(XX, aes(x = XX, y = X)) +
stat_summary(geom = "bar",
fun.y = "mean") +
labs(title = "XX",
subtitle = "XX")
ggplot(mcdonalds, aes(x = Category, y = Calories)) +
stat_summary(geom = "bar",
fun.y = "mean") +
labs(title = "Calories gegen McDonalds Menu Kategorie",
subtitle = "Balken repräsentieren Mittelwwerte")
"median"
anstatt "mean"
.geom_point()
, geom_count()
, oder geom_jitter()
.ggplot(mcdonalds, aes(x = Category,
y = Calories,
col = Category)) +
stat_summary(geom = "bar",
fun.y = "median") +
geom_jitter() +
labs(title = "Calories gegen McDonalds Menu Kategorie",
subtitle = "Balken repräsentieren Mittelwwerte")
mcdonalds
Datensatz. Weitere geom
s und alles weitere findest du hier# Lade tidyverse
library(tidyverse)
# Printe die mpg Daten
mpg
# Beginne den Plot
ggplot(data = mpg)
# Ergänze das mapping, d.h. bestimme x und y
ggplot(data = mpg,
mapping = aes(x = displ, y = hwy))
# Ergänze Punkte
ggplot(data = mpg,
mapping = aes(x = displ, y = hwy)) +
geom_point()
# Ergänze nach Häufigkeit skalierte Punkte
ggplot(data = mpg,
mapping = aes(x = displ, y = hwy)) +
geom_count()
# Assigne class zum col Argument und füge labels mit labs() hinzu
ggplot(data = mpg,
mapping = aes(x = displ, y = hwy, col = class)) +
geom_point(size = 3, position = 'jitter') +
labs(x = "Hubraum in Litern",
y = "Autobahn Meilen pro Gallone",
title = "MPG Datensatz",
subtitle = "Autos mit groesserem Hubraum fahren wneiger Meilen",
caption = "Quelle: mpg Datensatz aus ggplot2")
# Ergänze eine Kurve für jede Klasse
ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy,
color = class)) +
geom_point(size = 3, alpha = .9) +
geom_smooth(method = "lm")
# Ergänze eine Kurve für alle Klassen zusammen
ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy,
color = class)) +
geom_point(size = 3, alpha = .9) +
geom_smooth(col = "blue", method = "lm")
# Kombination von verschiedenen Elementen
ggplot(data = mpg,
mapping = aes(x = cty, y = hwy)) +
geom_count(aes(color = manufacturer)) +
geom_smooth() +
geom_text(data = filter(mpg, cty > 25),
aes(x = cty,y = hwy,
label = rownames(filter(mpg, cty > 25))),
position = position_nudge(y = -1),
check_overlap = TRUE,
size = 5) +
labs(x = "Hubraum in Litern",
y = "Autobahn Meilen pro Gallone",
title = "MPG Datensatz",
subtitle = "Autos mit groesserem Hubraum fahren wneiger Meilen",
caption = "Quelle: mpg Datensatz aus ggplot2")
library(tidyverse)
library(ggthemes)
mcdonalds <- read_csv("1_Data/mcdonalds.csv")
File | Rows | Columns |
---|---|---|
mcdonalds.csv | 260 | 24 |
First 5 rows and columns of mcdonalds.csv
Category | Item | ServingSize | Calories | CaloriesfromFat |
---|---|---|---|---|
Breakfast | Egg McMuffin | 4.8 oz (136 g) | 300 | 120 |
Breakfast | Egg White Delight | 4.8 oz (135 g) | 250 | 70 |
Breakfast | Sausage McMuffin | 3.9 oz (111 g) | 370 | 200 |
Breakfast | Sausage McMuffin with Egg | 5.7 oz (161 g) | 450 | 250 |
Breakfast | Sausage McMuffin with Egg Whites | 5.7 oz (161 g) | 400 | 210 |
Paket | Installation |
---|---|
tidyverse |
install.packages("tidyverse") |
ggthemes |
install.packages("ggthemes") |