--- title: "Dashboard Practical" output: flexdashboard::flex_dashboard: vertical_layout: fill theme: lumen source_code: embed social: ["twitter", "facebook"] --- ```{r setup, include=FALSE} # Lade Pakete library(flexdashboard) library(tidyverse) library(plotly) library(leaflet) library(viridis) library(htmltools) airbnb <- read_csv("../1_Data/airbnb.csv") ``` Übersicht der Airbnbs in Berlin {data-orientation=rows} ====================================================================== Zeile 1 {data-height = 400} ---------------------------------------------------------------------- ### Superhosts ```{r} # berechne die Anzahl Superhosts im airbnb Datensatz n_superhosts <- sum(airbnb$Host_superhost) # Erstelle valueBox # Setze die oben berechnete Summe ein valueBox(n_superhosts, # Definiere "Superhost" als Titel. Der HTML code # vergrössert die Schrift und setzt die Schriftfarbe # auf weiss caption = "

Superhost

", # Wähle eine Medallie als Icon icon = "fa-medal", # Definiere die Färbung der valueBox (hier das Airbnb grün) color = "#6BB7B9") ``` ### Allstar ```{r} # Berechne die Anzahl allstars, mit ausschliesslich top ratings allstar <- airbnb %>% # Rating_gesamt ist von 0 bis 100 -> reskaliere auf 0 bis 10 mutate(Rating_gesamt = Rating_gesamt / 10) %>% # Behalte ausschliessliche Spalten mit Ratings select(starts_with("Rating")) %>% # Berechne die Mittelwerte jeder Zeile über alle Spalten mutate(Ratings_m = rowMeans(.)) %>% # Behalte nur die Zeilen mit Mittelwert 10 (Maximum Rating) filter(Ratings_m == 10) %>% # Zähle die Anzahl verbliebener Zeilen summarise(n()) valueBox(allstar, caption = "

Allstar

", icon = "fa-gem", color = "#f5d142") ``` ### Preiswert ```{r} # Berechne die Anzahl preiswerter Airbnbs preiswert <- sum(airbnb$Preis < 100) valueBox(preiswert, caption = "

Preiswert

", icon = "fa-money-bill-wave", color = "#85a95d") ``` Zeile 2 ---------------------------------------------------------------------- ### Karte {.no-title} ```{r} # Erstelle neue Variable für die Labels airbnb %>% # Erstelle Plot leaflet() %>% # Setze Anfangskoordinaten und Zoomwert setView(lng = 13.40439, lat = 52.51128, zoom = 12) %>% # Zeichne Karte addTiles() %>% # Füge Marker hinzu addCircleMarkers( lng = ~Längengrad, lat = ~Breitengrad, radius = 4, stroke = FALSE, fillOpacity = 0.5, color = "#6BB7B9" ) ``` Entwicklung über Zeit {data-orientation=columns} ====================================================================== Spalte 1 ---------------------------------------------------------------------- ### Entwicklung der Berliner Airbnbs seit 2009 ```{r} ### Plot zum Verlauf über die Zeit # Anzahl Stadtteile n_stadtteile <- length(unique(airbnb$Stadtteil)) # Definiere n_stadtteile verschiedene Farben aus der viridis palette farben <- viridis(n_stadtteile) # Passe den Datensatz an Verlauf <- airbnb %>% # Gruppiere über Stadtteile group_by(Stadtteil) %>% # Ordne Zeilen Aufsteigend nach Erstellungsdatum arrange(Erstellungsdatum) %>% # Erstelle neue Variablen Datum und Kumulativ, # letztere als 10er Logarithmus der Anzahl Airbnbs mutate(Datum = Erstellungsdatum, Kumulativ = log10(1:n())) %>% # Gruppiere über Stadtteil, Datum, und Kumulativ Variablen group_by(Stadtteil, Datum, Kumulativ) %>% # Berechne deskriptive Statistiken und erstelle Variable mit # Text für Popup Felder summarise( m_preis = mean(Preis, na.rm = TRUE), superhosts = sum(Host_superhost, na.rm = TRUE), m_rating = mean(Rating_gesamt, na.rm = TRUE), hover_text = paste0("Mittlerer Preis: ", m_preis, "
Superhosts: ", superhosts, "
Mittleres Gesamtrating: ", m_rating, "") ) %>% # Erstelle den Plot mit Datum auf der x- und Kumulativ auf der y-Achse # Separate und eingefärbte Linien pro Stadtteil ggplot(aes(x = Datum, y = Kumulativ, col = Stadtteil)) + # Zeichne Punkte ein; das text Argument wird später von ggplotly() verwendet geom_point(aes(text = hover_text)) + # Zeichne Linien geom_line(show.legend = FALSE) + # Definiere Farbwerte; Objekt farben stammt noch von der Karte auf p.1 scale_color_manual(values = farben) + # Definiere y-Achsenbeschriftung; verwendet HTML wegen plotly ylab("log10(Kumulative Häufigkeit)") + # Definiere Plot design theme_light() # Rufe ggplotly auf, um die Plotly Version zu erstellen ggplotly(Verlauf) ``` Spalte 2 {data-width=300} ---------------------------------------------------------------------- ### Hintergründe **Airbnbs in Berlin** Das erste Airbnb in Berlin öffnete 2009 im Stadtteil [Pankow](https://de.wikipedia.org/wiki/Berlin-Pankow) (siehe auch [Übersichtskarte](#page-1)). Von da an war ein rascher Anstieg zu verzeichnen. Bereits 6 Jahre später gab es in Berlin-Pankow alleine `r round(10**2.3)` Airbnbs. Mittlerweile ist diese Zahl auf rund `r round(10**3.2 / 100) * 100` angestiegen. Das teuerste heute verfügbare Airbnb kostet dabei `r max(airbnb$Preis)` pro Nacht; für die meisten Leute nicht gerade ein Schnäppchen. Dabei handelt es sich um ein `r airbnb$Unterkunftsart[max(airbnb$Preis)]` im Stadtteil `r airbnb$Stadtteil[max(airbnb$Preis)]`. Insgesammt wurden über die Jahre in Berlin `r as.integer(sum(airbnb$host_anzahl))` Gäste in Airbnbs empfangen. Bewertungen der Airbnbs {.storyboard} ====================================================================== ### Gesamtrating {data-commentary-width=300} ```{r} ## Erstelle das Histogramm der Gesamtratings # Wähle die Rating_gesamt Variable zum Plotten aus ggplot(airbnb, aes(Rating_gesamt)) + # Erstelle ein Histogramm mit Balkenbreite 1 geom_histogram(binwidth = 1) + # Definiere die Achsenbeschriftungen labs(x = "Gesamtrating", y = "Häufigkeit") + # Definiere den Range der x-Achse von 0 bis 100 coord_cartesian(xlim = c(0, 100)) + # Wähle ein Design für den Plot theme_light() + # Vergrössere die Achsenbeschriftungen theme( axis.title = element_text(size = 16), axis.text = element_text(size = 12) ) ``` *** **Mittlere Gesamtratings** ```{r fig.width=3,fig.height=1.5, fig.align="center"} # Berechne mittleres Gesamtrating und Runde auf eine Kommastelle gesamtrating <- airbnb %>% pull(Rating_gesamt) %>% mean(na.rm = TRUE) %>% round(1) # Estelle den gauge mit dem gesamtrating Objekt gauge(gesamtrating, # Setze Minimu und Maximum Werte min = 0, max = 100, # Definiere Farbwerte mit gaugeSectors gaugeSectors( # Grün, wenn der Wert zwischen 80 und 100 liegt success = c(80, 100), # Orange, wenn der Wert zwischen 50 un 79 liegt warning = c(50, 79), # Rot, wenn der Wert zwischen 0 und 49 liegt danger = c(0, 49) )) ```

Die Berliner Airbnbs scheinen allgemein in einem sehr guten Zustand zu sein. Zumindest lassen die hohen Gesamtratings darauf schliessen.

### Sauberkeit {data-commentary-width=300} ```{r} # Erstelle das Histogramm der Sauberkeitsratings ggplot(airbnb, aes(Rating_sauberkeit)) + geom_histogram(binwidth = 1) + labs(x = "Sauberkeitsrating", y = "Häufigkeit") + coord_cartesian(xlim = c(0, 10)) + theme_light() + theme( axis.title = element_text(size = 16), axis.text = element_text(size = 12) ) ``` *** **Mittlere Sauberkeitsratings** ```{r fig.width=3,fig.height=1.5, fig.align="center"} # erstelle einen gauge der mittleren Sauberkeitsratings sauberkeit <- airbnb %>% pull(Rating_sauberkeit) %>% mean(na.rm = TRUE) %>% round(1) gauge(sauberkeit, min = 0, max = 10, gaugeSectors( success = c(8, 10), warning = c(5, 7), danger = c(0, 4) )) ```

Auch beim Thema Sauberkeit gehen viele Hosts keine Kompromisse ein. Es scheint jedoch ein paar faule Eier zu geben.

### Lage {data-commentary-width=300} ```{r} # Erstelle das Histogramm der Lageratings ggplot(airbnb, aes(Rating_lage)) + geom_histogram(binwidth = 1) + labs(x = "Lagerating", y = "Häufigkeit") + coord_cartesian(xlim = c(0, 10)) + theme_light() + theme( axis.title = element_text(size = 16), axis.text = element_text(size = 12) ) ``` *** **Mittlere Lageratings** ```{r fig.width=3,fig.height=1.5, fig.align="center"} # erstelle einen gauge der mittleren Lageratings lage <- airbnb %>% pull(Rating_lage) %>% mean(na.rm = TRUE) %>% round(1) gauge(lage, min = 0, max = 10, gaugeSectors( success = c(8, 10), warning = c(5, 7), danger = c(0, 4) )) ```

Verrückt; auch die Lageratings sind fast alle super. Entweder Berlin hat fast nur erstklassige Wohngebiete, viele der guten Wohnungen sind bei Airbnb vermietet, oder die Gäste sind sehr wohlwollend. Wir wissen es schlussendlich nicht (eine einfache Erklärung für die guten ratings könnte z.B. auch sein, dass gute Airbnbs einfach häufiger besucht werden).