Reporting mit R Data Analytics 4 PB |
adapted from Airbnb.com
In diesem Practical lernst du einen Bericht mit Markdown zu erstellen. Das Enprodukt ist der airbnb_solution.html
Bericht im 3_markdown
Ordner.
Am Ende des Practicals wirst du wissen wie man:
theme
ergänzt.Öffne dein DataAnalytics4PB
R Projekt, dass ihr von Github gecloned habt. Es sollte die Ordner 1_Data
, 2_Assets
, und 3_Markdown
enthalten.
Öffne ein neues RMarkdown Skript und wähle das Template “HTML” aus (siehe screenshot).
Trage als Titel Bericht Berlin 2018/2019
ein.
Speichere das neue Markdown Skript unter dem Namen Airbnb_level_one.Rmd
im 3_Markdown
Ordner ab.
Lösche alles unterhalb des setup
Code Chunks.
Lade die Pakete tidyverse
, lubridate
, knitr
, kableExtra
und sjPlot
im setup
Chunk. Ggf. musst du die pakete erst installieren.
# Lade Pakete
library(tidyverse)
library(lubridate)
airbnb
Datensatz mit read_csv()
ebenfalls im setup
Chunk mit dem Code unten.# Lade Airbnb Datensatz
airbnb <- read_csv("../1_Data/Airbnb.csv")
2018
und 2019
aus den Daten auszuwählen und ein neues Objekt airbnb_1819
zu erstellen.# Wähle Jahre 2018 und 2019 aus
airbnb_1819 <- airbnb %>%
filter(Erstellungsdatum > "2018-01-01",
Erstellungsdatum < "2019-12-31")
setup
Chunk, setze eine Überschrift auf drittem Level (###
) mit Titel Präambel
.### Präambel
Dieser Bericht analysiert Veränderungen in den Neueinstellungen und den Preisen von Airbnb Objekten in Berlin, Deutschland. Er wurde zum Zwecke der Übung auf Basis öffentlich verfügbarer Daten erstellt und repräsentiert einzig die Position der Autoren. Es besteht keine Beziehung zu Airbnb.
Knitte
das Dokument. Sieht alles in Ordnung aus?###
) mit Titel Neueinstellungen
und darunter eine Überschrift auf vierter Ebene (####
) mit dem Titel Entwicklung
.### Neueinstellungen
#### Entwicklung
Seit 02.01.2018 wurden in Berlin 5007 Airbnb Wohnungen eingestellt. Von diesen Wohnungn weisen aktuell 73% Verfügbarkeiten von durchschnittlich 47.5 Tagen für die nächsten 3 Monate auf.
Einstellungen von Airbnb Wohnungen haben im letzten Jahr stark zugenommen. Im Jahr 2019 wurden insgesamt 3274 neue Wohnungen eingestellt, wohingegend im Jahr 2018 nur 1733 Wohnungen eingestellt wurden. Dies entspricht einem Zuwachs von 89%.
r min(airbnb_1819$Erstellungsdatum)
strftime()
Funktion. Versuche mit dem folgenden inline Code das Datum in das richtige Format zu bringen.r strftime(min(airbnb_1819$Erstellungsdatum), "%d.%m.%Y")
Als nächstes ersetze die Anzahl der Wohnungen durch nrow(airbnb_1819)
. Nicht das r
am Anfang vergessen!
Ersetze nun Prozentsatz der Wohnungen durch round(mean(airbnb_1819$Verfügbarkeit_90Tage > 0) * 100)
und die durchschnittliche Verfügbarkeit durch round(mean(airbnb_1819$Verfügbarkeit_90Tage[airbnb_1819$Verfügbarkeit_90Tage>0]),1)
. Jetzt sollten alle Zahlen des ersten Absatz durch Code ersetzt worden sein. Überprüfe ob alles stimmt.
Im nächsten Absatz ersetze die ersten beiden Zahlen durch n_2019 <- sum(year(airbnb_1819$Erstellungsdatum) == 2019); n_2019
und n_2018 <- sum(year(airbnb_1819$Erstellungsdatum) == 2018); n_2018
. In diesen beiden Fällen siehst du, dass auch Zuweisungen in inline Code möglich sind.
Ersetze nun den wert des Zuwachses am Ende des Absatzes durch (round(n_2019/n_2018, 2) - 1)*100
, was, wie du siehst, auf die beiden zuvor im inline Code definierten Objekte zurückgreift. Knitte das Dokument und überprüfe, ob nun alle Zahlen einwandfrei wiedergegeben werden.
Zuletzt verwende ** um den gesamten zweiten Absatz fett zu setzen. Setze hierfür einmal die zwei Asteriske vor das erste und nach dem letzten Wort des Absatzes. Nun alles wie im Zieldokument?
{r}
und anschliessend nocheinmal drei Ticks in einer Zeile darunter. Wie in der Abbildung unten sollte sich der Hintergrund automatisch grau einfärben.
# Plotte Häufigkeiten
ggplot(airbnb_1819 %>%
group_by(Jahr = year(Erstellungsdatum),
Monat_tmp = month(Erstellungsdatum)) %>%
summarize(Monat = as_factor(paste(first(Jahr), first(Monat_tmp), sep = '-')),
Wohnungen = n()),
aes(x = Monat, y = Wohnungen, fill = Jahr)) +
geom_bar(stat = 'identity', position = 'dodge') +
theme(legend.position = 'none',
axis.text.x = element_text(angle = 45, hjust = 1))
r
, echo = FALSE
. Danach knitte das Dokument nocheinmal.
Das Dokument sollte nun den Code im Chunk nicht mehr anzeigen. Mache nun dieses Setting rückgängig, d.h., lösche echo = FALSE
, es gibt nämlich einen zweiten Weg diesen und alle zukünftigen Code Chunks zu verstecken. Knitte das Dokument nachdem du das echo = FALSE
entfernt hast.
Gehe nun zum Setup-Chunk ganz am Anfang es Dokuments (unter dem YAML header). Dort siehst du folgende Code Zeile knitr::opts_chunk$set(echo = TRUE)
, die aktuell impliziert, dass alle Code Chunks per default angezeigt werden. Setze nun hier echo = FALSE
und knitte das Dokument. Der Code Chunk sollte nun wieder versteckt sein. Behalte diese Einstellung auch für die weiteren Sessions bei.
Ergänze nun zusätzlich in den allgemeinen Chunk-Optionen message = FALSE
und warning = FALSE
, was vollständig verhindert, dass Messages oder Warnings im Bericht auftauchen. Die finalen Settings sollten nun so aussehen.
knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE)
Setze unten im Script eine weitere Überschrift auf vierter Ebene (####
) mit dem Titel Stadtteile
.
Unter die Überschrift setze den folgenden Text.
Neueinstellungen fallen nach wie vor sehr unterschiedlich in den Bezirken aus. Die meisten Neueinstellungen im Jahr 2019 gab es in Friedrichshain-Kreuzberg, die wenigsten in Marzahn - Hellersdorf.
Die grössten Veränderungen gab es in Marzahn - Hellersdorf und Treptow - Köpenick. In Marzahn - Hellersdorf schrumpften die Neueinstellungen um -13.3%, in Treptow - Köpenick wuchsen die Neueinstellungen um 137.8%.
stadtteile
speichert.# Berechne Häufigkeiten über die Bezirke
stadtteile <- airbnb_1819 %>%
group_by(Stadtteil,
Jahr = year(Erstellungsdatum)) %>%
summarize(Wohnungen = n()) %>%
ungroup() %>%
arrange(desc(Jahr), Wohnungen) %>%
mutate(Stadtteil = as_factor(Stadtteil))
Ersetze nun die die zwei im ersten Paragraph erwähnten Stadtteile durch stadtteile %>% filter(Jahr == 2019) %>% pull(Stadtteil) %>% last()
und stadtteile %>% filter(Jahr == 2019) %>% pull(Stadtteil) %>% first()
. Knitte das Dokument und schaue, ob die richtigen Namen eingesetzt wurden.
Kreiere einen neuen Chunk zwischen den beiden Absätzen mit dem folgenden Code, welcher einige Objekte erstellt, die die inline Ergänzungen im darauf folgenden Absatz erleichtern werden.
# Veränderung über die Stadtteile
veränderung = stadtteile %>%
group_by(Stadtteil) %>%
summarize(veränderung = (100 * (Wohnungen[Jahr == 2019]/Wohnungen[Jahr == 2018] - 1)) %>% round(1))
# Geringsten Veränderung
min_veränderung = veränderung %>%
slice(which.min(veränderung)) %>%
pull(veränderung)
# Stadteil mit der geringsten Veränderung
min_stadtteil = veränderung %>%
slice(which.min(veränderung)) %>%
pull(Stadtteil)
# Grösste Veränderung
max_veränderung = veränderung %>%
slice(which.max(veränderung)) %>%
pull(veränderung)
# Stadteil mit der grössten Veränderung
max_stadtteil = veränderung %>%
slice(which.max(veränderung)) %>%
pull(Stadtteil)
Ersetze die ersten beiden Stadtteil-Nennungen in beiden Sätzen durch min_stadtteil
und max_stadtteil
und knitte das Dokument. Passt alles?
Ersetze nun schrumpften
und wuchsen
durch ifelse(min_veränderung > 0, "wuchsen", "schrumpften")
und ifelse(max_veränderung > 0, "wuchsen", "schrumpften")
. Die beiden Codestücke können dann selbst entscheiden, ob die Veränderung eine positive oder negative ist und das jeweils richtige Wort einsetzen.
Abschliessend ersetze die beiden numerischen Werte durch min_veränderung
und max_veränderung
. Knitte das Dokument und überprüfe, ob alles in Ordnung ist.
# Plotte Häufigkeieten der Stadtteile
ggplot(stadtteile,
aes(y = Stadtteil, x = Wohnungen, group = Jahr, fill = Jahr)) +
geom_bar(stat = 'identity', position = 'dodge') +
theme(legend.position = 'none') +
labs(y = '')
Ergänze eine Fussnote nach dem Texteil ‘verfügbarer Daten’ ^[Daten wurde heruntergeladen von [insideairbnb.com](http://insideairbnb.com/get-the-data.html)]
Knitte
das Dokument. Siehst du nun eine Fussnote am Ende des Dokuments?
Nun geht es darum die Darstellung der Grafiken zu verbessern und Bildunterschriften einzufügen. Setze zunächst das Seitenverhältnis der ersten Grafik auf .5 (fig.asp = .5
). Knitte das Dokument. Die Grafik sollte nun schmaler sein.
Füge fig.cap = cap
in den Optionen des Chunks der ersten Grafik ein. Dies wird dir ermöglichen gleich die Bildunterschrift im Chunk zu definieren.
Am Ende des Grafik Chunks ergänze nun cap = "Abbildung 1. Neueinstellungen pro Monat."
. Knitte das Dokument. Du solltest nun eine Bildunterschrift sehen.
Weitere zur nächsten Grafik. Setze das Seitenverhältnis für die zweite Grafik auf .5.
Füge nun zunächst fig.cap = cap
in den Optionen des Chunks der zweiten Grafik ein und dann innerhalb des Chunks cap = Abbildung 2. Neueinstellungen pro Bezirk.
.
Knitte
das Dokument. Sieht alles in Ordnung aus?
Für einen neuen Abschnitt füge Preis
als Level 3 Header ein.
Setze darunter den folgenden Text.
Der durchschnittliche Preis der Neueinstellungen beträgt 80.8 €. Im Vergleich zum Vorjahr sind die Preise der Neueinstellungen um 1.7% gestiegen.
airbnb_1819
direkt im Text ein. Siehe unten.round(mean(airbnb_1819 %>% pull(Preis)),1)
m <- mean(airbnb_1819 %>% filter(year(Erstellungsdatum) == 2019) %>% pull(Preis))/ mean(airbnb_1819 %>% filter(year(Erstellungsdatum) == 2018) %>% pull(Preis)) ; round(m, 3) * 100 - 100
Knitte
das Dokument. Sieht alles in Ordnung aus?Erstelle eine neue Überschrift, Einfluss Ausstattung
, als Level 4 Header.
Berechne als ersten Schritt in einem eigenem Code Chunk wie sich die verschiedenen Ausstattungsmerkmale (Küche, Wifi, …) auf die durchschnittlichen Preise auswirken.
# Vektor mit Ausstattungsmerkmalen
ausstattung_var <- c('Küche','Wifi','TV','Kaffeemaschine',
'Geschirrspüler','Terrasse_Balkon',
'Check_in_24h')
# Bestimme Preise als Funktion der Ausstattungsmerkmale
ausstattung <-
airbnb_1819 %>%
select(all_of(ausstattung_var), Preis) %>%
pivot_longer(-Preis,
names_to = 'Ausstattung',
values_to = 'Ausstattung_vorhanden') %>%
group_by(Ausstattung) %>%
summarize(Nicht_vorhanden = mean(Preis[!Ausstattung_vorhanden]),
Vorhanden = mean(Preis[Ausstattung_vorhanden]),
Differenz = Vorhanden - Nicht_vorhanden,
Prozent_vorhanden = mean(Ausstattung_vorhanden) * 100) %>%
arrange(desc(Differenz))
Das Austattungsmerkmal mit dem grössten Unterschied im Preis ist Check_in_24h (72.9), das Austattungsmerkmal mit dem kleinsten Unterschied im Preis ist Küche (-88.9).
ausstattung %>% pull(Ausstattung) %>% first()
ausstattung %>% pull(Differenz) %>% first() %>% round(1)
ausstattung %>% pull(Ausstattung) %>% last()
ausstattung %>% pull(Differenz) %>% last() %>% round(1)
Der stark negative Effekt der Küche überrascht, er könnte jedoch durch die Art der Unterkunft moderiert werden, gegeben dass auch Hotels im Angebot enthalten sind.
Knitte
das Dokument. Sieht alles in Ordnung aus?ausstattung
. Verwende dafür die kable()
Funktion. Siehe unten.# Plotte Tabelle mit Austattungsmerkmalen
ausstattung %>% kable(format = 'html')
Beschränke die Anzahl Nachkommastellen mit digits = 2
auf zwei.
Füge eine Tabellenüberschrift mit caption = 'Tabelle 1. Austattung und Einfluss auf den Preis'
ein.
Passe die Namen der Spalten an, inklusive neuer Zeilenumbrüche mit <br>
: col.names = c('', 'Preis<br>Nicht-vorh.', 'Preis<br>vorh.', 'Differenz', 'Prozent<br>vorh.')
Knitte
das Dokument. Du wirst bemerken, dass die Spaltenbeschriftung nicht korrekt übersetzt wird. Verwende als weiteres Argument escape = FALSE
um dieses Problem zu korrigieren.
Lege die Ausrichtung der Zellen mit align = "lcccc"
fest. Jeder Buchstabe legt die Ausrichtung für eine Spalte fest. l
bedeutet left und c
center.
Nun vergrössere die Breite der Spalten in dem du column_spec()
hinter der kable()
Funktion verwendest.
ausstattung %>%
kable(...) %>%
column_spec(c(2,3,4,5), width = "1.2in")
kable()
Funktion folgenden Code ein und verbinde die beiden Teile mit einer Pipe %>%
.ausstattung %>%
mutate_if(is.numeric, function(x) {
cell_spec(round(x,1), bold = T,
font_size = spec_font_size(x, begin=10, end=16))}) %>%
kable(...) %>%
column_spec(...)
Knitte
das Dokument. Sieht alles in Ordnung aus?Erstelle eine neue Überschrift, Regressionsmodell
, als Level 4 Header
Verwende den Code unten um eine Regression in der Preis
durch verschiedenen Ausstattungsmerkmalen und den Status Hotel Ja/Nein vorhergesagt wird.
# Reduzierter Vektor mit Ausstattungsmerkmalen
ausstattung_var <- c('Küche','TV','Terrasse_Balkon','Check_in_24h')
# Bereit den Datensatz für die Regression vor
ausstattung <-
airbnb_1819 %>%
mutate(Hotel = Unterkunftsart %in% c('Boutique hotel', 'Hotel')) %>%
select(Preis, Hotel, all_of(ausstattung_var))
# Rechne Regression des Preises auf Austattungsmerkmale und Hotel
ausstattung_mod <-
ausstattung %>%
lm(formula = Preis ~ .)
# Bestimme Anteil Hotels in 2018 und 2019
hotel <-
airbnb_1819 %>%
group_by(year(Erstellungsdatum)) %>%
summarize(Anteil = mean(Unterkunftsart %in% c('Boutique hotel', 'Hotel')))
Die Regression legt nahe, dass Küche, TV und Terrasse oder Balkon den grössten Einfluss auf den Preis in denletztene beiden Jahren hatten.
Der Einfluss der Küche ist gegenüber dem Unterschied in Tabelle 1 gesunken, jedoch nach wie vor signifikant.
Überraschenderweise ist der Effekt eines 24h Check-ins, welcher deskriptiv am grössten ausfiel, nicht signifikant. Dies ist ebenfalls auf den Zusammen zur Unterkunftsart zurückzuführen
Es besteht ein substantieller Unterschied im Preis zwischen Unterkunftsarten. Hotels haben eine um 437.3€ höheren Preis als Unterkünfte die keine Hotels sind.
Der Anteil von Hotels ist von 1.1% im Jahre 2018 auf 1.4% im Jahre 2019 gestiegen. Es liegt nahe, dass der Anstieg im Anteil der Hotels, den Anstieg der Objektpreise verursacht.
coefficients(ausstattung_mod)['HotelTRUE'] %>% round(1)
Hebe zum Abschluss den 2. (“Überraschenderweise …”) und 4. Absatz (“Der Anteil …”) fett hervor.
Knitte
das Dokument. Sieht alles in Ordnung aus?
tab_model()
Funktion an.# Tabelle mit Ergebnissen der Regression
tab_model(ausstattung_mod)
Ersetze die Namen der Koeffizienten in der Tabelle mit dem Argument pred.labels = c('Achsenabschnitt', names(ausstattung)[-1])
Füge einen neuen Tabellentitel mit dem Argument title = 'Table 2. Regression des Preises auf die Ausstattung.'
ein.
Knitte
das Dokument. Sieht alles in Ordnung aus?
Um Einstellungen des Dokuments vornehmen zu können füge zunächst hinter html_document
im YAML Header einen Doppelpunkt hinzu.
Füge nun in einer Zeile darunter toc: true
hinzu um ein Inhaltsverzeichnis zu ergänzen. Stelle sicher, dass toc: true
gegenüber html_document:
eingerückt ist. Knitte das Dokument. Siehst du alle Überschriften im Inhaltsverzeichnis?
Damit alle Überschriften Levels angezeigt werden ergänze in einer weiteren Zeile (selbe Ebene wie toc: true
) den Befehl toc_depth: 5
.
Knitte das Dokument. Wird der Abschnitt Neueinstellungen mit zwei Unterkapiteln Entwicklung und Stadteile angezeigt?
Füge in einer neuen Zeile: includes:
hinzu und dann darunter eingrückt in_header: ../2_Assets/header.Rhtml
ein. Damit lädst du eine kleine HTML Vorlage für den Kopf des Berichts.
Knitte das Dokument. Hat sich die Anzeige des Titels und Untertitels verändert? Ist das AirBnB Logo zu sehen?
Entferne nun die Zeile mit title:
aus dem YAML Header, da jetzt kein zweiter Titel benötigt wird.
Als letztes Gestaltungselement ergänze theme: lumen
auf der selben Ebene wie toc: true
oberhalb von includes:
, womit verschiedene Eigenschaften des Schriftbildes angepasst werden (hier findest du eine Übersicht über weitere Themes)
Knitte das Dokument. Sieht alles in Ordnung aus?
Als ersten Schritt um die Grafiken weiter anzupassen, ergänze in den allgemeinen Chunk-Optionen (knitr::opts_chunk$set()
) im setup
Chunk das Argument dev.args = list(bg = "transparent")
.
Nun ergänze im setup
Chunk folgenden Code, welcher das theme
der ggplot
Grafiken auf theme_minimal
setzt. Knitte das Dokument. Hat sich etwas verändert?
theme_set(theme_minimal())
theme_update(panel.background = element_rect(fill = "transparent", colour = NA),
plot.background = element_rect(fill = "transparent", colour = NA))
setup
Chunk, stelle mit folgendem Code die Farbpaletten der ggplot Grafiken auf die AirBnB Farben ein.ggplot <- function(...) ggplot2::ggplot(...) +
scale_fill_gradientn(colors = c('#555555','#6BB7B9')) +
scale_colour_gradientn(colors = c('#555555','#6BB7B9'))
Knitte
das Dokument. Hat sich der Hintergrund und die Farbpalette der Grafiken verändert?center
um die beiden cap
Definitionen der Grafiken. Siehe Code."<center>Abbildung 1. Neueinstellungen pro Monat</center>"
"<center>Abbildung 2. Neueinstellungen pro Bezirk</center>"
In der Regressions-Tabelle, die Du mit sjPlot
erstellt hast, ergänze CSS = list(css.caption = "font-weight: 500")
um die Schrift anzupassen
Im gleichen Argument füge css.table = "width: auto; margin-right: 0px;margin-left: auto;"
zusätzlich in die list
ein, um die Tabelle rechts auszurichten.
Setze folgenden HTML Code im Abschnitt Entwicklung ein - damit positionierst du den Text in die linke Spalte und die Grafik in die rechte Spalte.
#### Entwicklung
und dem ersten Absatz “Seit …” folgenden HTML Code ein. Noch nicht Knitten!<table>
<col width = 40%>
<col width = 10%>
<col width = 50%>
<tr>
<td>
</td>
<td>
</td>
<td>
#### Stadtteile
den folgenden Code, welcher die HTML Tabelle abschliesst. </td>
</tr>
</table>
Knitte jetzt das Dokument. Sind der Text und die Grafik nun in 2 Spalten gesetzt?
Für die weiteren Abschnitte gehe gleich vor. Zwischen #### Stadtteile
und dem Code-Chunk für die Berechnung der Häufigkeiten über die Bezirke fügen den folgnden HTML Code ein. Noch nicht Knitten!
<table>
<col width = 40%>
<col width = 10%>
<col width = 50%>
<tr>
<td>
</td>
<td>
</td>
<td>
### Preis
folgende HTML code um die Tabelle abzuschliessen. </td>
</tr>
</table>
Knitte jetzt wieder das Dokument. Sind der Text und die Grafik nun in 2 Spalten gesetzt?
Für den Abschnitt ###Preis
gehe gleich vor. Ergänze nach dem ersten Code-Chunk mit Berechnungen zur Ausstattung und vor dem ersten Absatz den folgenden Code. Noch nicht Knitten!
<table width=100%>
<col width = 25%>
<col width = 10%>
<col width = 65%>
<tr>
<td>
</td>
<td>
</td>
<td>
#### Regressionsmodell
den Abschluss der Tabelle. </td>
</tr>
</table>
Knitte jetzt wieder das Dokument. Sind der Text und die Grafik nun in 2 Spalten gesetzt?
Setze den letzten Abschnitt selbständig mit einer HTML Table (widths 50%, 10%, 40%) in 2 Spalten.
Knitte wieder das Dokument. Der gesamte Text ist nun in 2 Spalten gesetzt mit den Textinhalten links und den Grafiken bzw. Tabellen rechts.
Um allgmeine Gestaltungsmkermale des gesamten HTML-Berichts zu ändern erstelle die Datei my_airbnb.css
und speichere sie in 2_Assets
ab. Du kannst die Datei direkt in RStudio erstellen und mit .css
als Extension speichern.
Binde nun die leere Datei im YAML Header deines Airbnb Markdown Dokumentes ein. Dafür ergänze css: ../2_Assets/airbnb.css
unter html_document:
(selbe Ebene wie toc: true
)
Füge den folgenden Code in my_airbnb.css
hinzu um die vertikale Ausrichtung der Tabellen anzupassen. Speichere die .css
Datei und knitte dein Markdown Dokument.
table td {
vertical-align: top;
}
my_airbnb.css
um Schriftart und Farbe der beiden Überschriftenlevel anzupassen. Die .css
Datei speichern und knitten.h3, h4 {
font-weight: 500;
color: #555555;
}
my_airbnb.css
und knitte das Dokument.a, a:hover {
color: #007D8C;
}
my_airbnb.css
Datei und knitte das Dokument.body {
background-image: url(watermark.svg);
background-repeat: repeat-y;
background-size: contain;
}
Knitte dein Dokument. Du solltest nun einen wohlformatierten AirBnB Bericht vor dir haben.
Speichere das fertige Dokument unter: 3_Markdown/airbnb_final.Rmd
ab.
Der Airbnb.csv Datensatz enthält Zahlen zu 9868 Berliner Airbnbs
Variable | Beschreibung |
---|---|
Preis | Preis pro Nacht |
Erstellungsdatum | Eröffnungsdatum des Airbnbs |
Unterkunftsart | Appartement, Loft, Haus, etc. |
Schlafplätze | Anzahl Schlafplätze |
Schlafzimmer | Anzahl Schlafzimmer |
Badezimmer | Anzahl Badezimmer |
Reinigungsgebühr | Reinigungsgebühr |
Verfügbarkeit_90Tage | |
Viertel | In welchem Viertel befindet sich das Airbnb |
Stadtteil | In welchem Stadtteil befindet sich das Airbnb |
Breitengrad | Breitengrad |
Längengrad | Längengrad |
Host_id | Host id |
Host_seit | Erfahrung des Hosts |
Host_antwortzeit | Host Antwortzeit |
Host_antwortrate | Host Antwortrate |
Host_superhost | Superhost Ja/Nein |
Host_anzahl | Anzahl Gäste |
Rating_gesamt | Gesamtrating |
Rating_genauigkeit | Genauigkeitsrating |
Rating_sauberkeit | Sauberkeitsrating |
Rating_checkin | Checkinrating |
Rating_kommunikation | Kommunikationsrating |
Rating_lage | Lagerating |
Rating_wertigkeit | Wertigkeitsrating |
Küche | Küche vorhanden TRUE/FALSE |
Wifi | WLAN vorhanden TRUE/FALSE |
TV | TV vorhanden TRUE/FALSE |
Kaffeemaschine | Kaffeemaschine vorhanden TRUE/FALSE |
Geschirrspüler | Geschirrspüler vorhanden TRUE/FALSE |
Terrasse_Balkon | Terrasse/Balkon vorhanden TRUE/FALSE |
Badewanne | Badewanne vorhanden TRUE/FALSE |
Check_in_24h | 24h Check-In vorhanden TRUE/FALSE |
Paket | Installation |
---|---|
tidyverse |
install.packages("tidyverse") |
lubridate |
install.packages("lubridate") |
Funktion | Paket | Beschreibung |
---|---|---|
strftime |
lubridate |
Formatierung von Daten |
ggplot |
ggplot |
Erstellen von Grafiken |