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") |