Veröffentlichungsdatum

23. Oktober 2023

Aufgabe 1: Verlauf der Besuchszahlen nach Monat

1a)

Nachdem wir die Projektstruktur aufgebaut haben und die Daten vorbereitet (inkl. aggregiert) sind, machen wir uns an die deskriptive Analyse. Dies macht immer Sinn. Bevor mach sich an die schliessende Statistik macht, muss man ein “Gefühl” für die Daten bekommen. Dies funktioniert am einfachsten mit explorativen Analysen.

Wir interessieren uns in den Analysen für 5 Zeitabschnitte:

  1. von Anfang Untersuchungsperiode bis vor dem 1. Lockdown (pre)
  2. Lockdown 1
  3. Zwischen beiden Lockdowns
  4. Lockdown 2
  5. Ende 2. Lockdown bis Ende Untersuchungsperiode
  • Plottet den Verlauf der monatlichen Besuchszahlen an eurer Zählstelle. Auf der x-Achse steht dabei dabei Jahr und Monat (gespeichert im df depo_m), auf der y-Achse die monatlichen Besuchszahlen. Zeichnet auch die beiden Lockdown ein (Hinweis: rundet das Start- und Enddatum der Lockdowns auf den Monat, da im Plot die monatlichen Zahlen gezeigt werden).

Haltet euch dabei an untenstehenden Plot:

Code
ggplot(depo_m, mapping = aes(Ym, Total, group = 1)) + # group = 1 braucht R, dass aus den Einzelpunkten ein Zusammenhang hergestellt wird
  # zeichne Lockdown 1
  geom_rect(
    mapping = aes(
      xmin = ym("2020-3"), xmax = ym("2020-5"),
      ymin = 0, ymax = max(Total + (Total / 100 * 10))),
    fill = "lightskyblue", alpha = 0.2, colour = NA) +
  # zeichne Lockdown 2
  geom_rect(
    mapping = aes(
      xmin = ym("2020-12"), xmax = ym("2021-3"),
      ymin = 0, ymax = max(Total + (Total / 100 * 10))),
    fill = "darkolivegreen2", alpha = 0.2, colour = NA) +
  geom_line(alpha = 0.6, linewidth = 1) +
  scale_x_date(date_labels = "%b%y", date_breaks = "6 months") +
  labs(title = "", y = "Fussgänger:innen pro Monat", x = "Jahr") +
  theme_classic(base_size = 15) +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

Hinweis: - Nutzt zum plotten ggplot() - folgende Codeschnipsel helfen euch:

Code
ggplot(data = depo_m, mapping = aes(Ym, Total, group = 1)) + # group 1 braucht R, dass aus den Einzelpunkten ein Zusammenhang hergestellt wird
    # zeichne Lockdown 1; ein einfaches Rechteck. bestimme mit min und max die Dimensionen
  geom_rect(
    mapping = aes(
      xmin = ym("2020-3"), xmax = ym("2020-5"),
      ymin = 0, ymax = max(Total + (Total / 100 * 10))
    ), # das Rechteck soll 10 % grösser als die maximale Besuchszahl sein
    fill = "lightskyblue", alpha = 0.2, colour = NA
  ) +
  # zeichne Lockdown 2
  ... +
  # zeichne die Linie
  geom_line(...) +
  scale_x_date(...)+
  theme_linedraw(base_size = 15) +
  ...
  • Exportiert euren Plot mit ggsave() nach results. Breite = 20, Höhe = 10, Einheiten = cm, dpi = 1000

1b)

Der erste Plot zeigt sehr einfach, wie sich die Besuchszahlen allgemein entwickelt haben. Interessant ist aber auch, wie sie während den einzelnen Monaten zueinander stehen (z.B. “Waren im Mai 2020 mehr Menschen unterwegs als im Mai 2017?”). Dies zeigt uns folgender Plot:

Code
ggplot(depo_m, aes(Monat, Total, group = Jahr, color = Jahr, linetype = Jahr)) +
  geom_line(size = 2) +
  geom_point() +
  scale_colour_viridis_d() +
  scale_linetype_manual(values = c(rep("solid", 3), "twodash", "twodash", "solid")) +
  scale_x_discrete(breaks = c(seq(0, 12, by = 1))) +
  geom_vline(xintercept = c(seq(1, 12, by = 1)), linetype = "dashed", color = "gray") +
  labs(title = "", y = "Fussgänger:innen pro Monat", x = "Monat") +
  theme_classic(base_size = 15) +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))
  • Erstellt diesen Plot und speichert ihn.

Hinweis: Dieser Plot wird erstellt mit dem Argument group, linetype und color innerhalb des _aes()__ Arguments. geom_line() wiederum zeichnet die Linien.

1c)

Unser Fokus liegt auf der dunklen Tageszeit. Wie verteilen sich die Besuchenden also auf Morgen, Tag, Abend und Nacht?

  • Folgender Plot zeigt das. Erstellt und speichert ihn.

Code
ggplot(depo_m_daytime, aes(Ym, Total, fill = Tageszeit)) +
  geom_area(position = "fill", alpha = 0.8) +
  scale_fill_manual(values = mycolors) +
  scale_x_date(date_labels = "%b%y", date_breaks = "6 months", 
               limits = c(min(depo_m_daytime$Ym), max = max(depo_m_daytime$Ym)), expand = c(0, 0)) +
  geom_vline(xintercept = seq(as.Date(min(depo_m_daytime$Ym)), as.Date(max(depo_m_daytime$Ym)), 
                              by = "6 months"), linetype = "dashed", color = "black")+
  theme_classic(base_size = 15) +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1), 
        legend.position = "bottom") +
  labs(title = "", y = "Verteilung Fussgänger:innen / Monat [%]", x = "Jahr")

Folgende Codeschnipsel helfen euch:

Code
ggplot(depo_m_daytime, aes(Ym, Total, fill = Tageszeit)) +
  geom_area(...) +
  scale_x_date(date_labels = "%b%y", date_breaks = "6 months", 
               limits = c(min(depo_m_daytime$Ym), max = max(depo_m_daytime$Ym)), expand = c(0, 0)) +
  geom_vline(xintercept = seq(as.Date(min(depo_m_daytime$Ym)), as.Date(max(depo_m_daytime$Ym)), 
                              by = "6 months"), linetype = "dashed", color = "black")+
  ...

Aufgabe 2: Wochengang

Nun möchten wir genauer untersuchen, wie sich die Besuchszahlen je nach Phase (Pre, Normal, Lockdown 1, Lockdown 2 und Covid) auf die Wochentage und Tageszeiten verteilen.

2a)

  • Erstellt dazu einen Violinplot nach untenstehender Vorgabe. Was sagt uns dieser komplexe Plot?

Code
ggplot(data = depo, aes(x = Wochentag, y = Total, fill = Tageszeit)) +
  geom_violin() +
  labs(title = "", y = "Fussgänger:innen pro Tag") +
  facet_grid(cols = vars(Tageszeit), rows = vars(Phase))+
  scale_y_log10()+
  scale_fill_manual(values = mycolors) +
  theme_classic(base_size = 15) +
  theme(
    panel.background = element_rect(fill = NA, color = "black"),
    axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
    legend.title = element_blank(), 
    legend.position = "none")

Hinweis: - Nutzt zum plotten ggplot() - folgende Codeschnipsel helfen euch:

Code
ggplot(data = depo, aes(x = Wochentag, y = Total, fill = Tageszeit)) +
  geom_violin() +
  facet_grid(cols = vars(...), rows = vars(...))+
  scale_y_log10()+ 
  ...
  • Warum macht es Sinn, hier die y-Achse zu logarithmieren?
  • Exportiert auch diesen Plot mit ggsave(). Welche Breite und Höhe passt hier?

2b)

Ist euch aufgefallen, dass in meinen Daten während dem ersten Lockdown in der Nacht keine Leuten unterwegs waren? Nun könnte man also sagen: “Ja gut, der Lockdown 1 war verglichen mit Pre ja deutlich kürzer und es macht keinen Sinn hier die absoluten Zahlen darzustellen”. Stimmt. Darum berechnen wir noch den Durchschnitt pro Phase und Tageszeit.

  • Berechnet:
Code
mean_phase <- depo_daytime |>
  group_by(Phase, Tageszeit) |>
  summarise(
    Mean = mean(Total))
  • Plottet:

Code
ggplot(mean_phase, aes(Tageszeit, Mean, fill = Phase))+
  geom_col(position = "dodge", color = "black") +
  scale_fill_viridis_d() +
  labs(title = "", y = "Durchschnitt Fussgänger:innen pro Tag") +
  # scale_fill_manual(values = mycolors) +
  theme_classic(base_size = 15) +
  theme(legend.position = "bottom")

Aufgabe 3: Tagesgang

Vom Grossen zum Kleinen, von der Übersicht ins Detail. Jetzt widmen wir uns dem Tagesgang, das heisst der Verteilung der Besuchenden auf die 24 Tagesstunden je nach Phase.

3a)

  • Berechnet zuerst den Mittelwert der totalen Besuchszahlen pro Wochentag, pro Stunde pro Phase und speichert das df unter Mean_h.
Code
Mean_h <- depo |>
  group_by(Wochentag, Stunde, Phase) |>
  summarise(Total = mean(Total))

Vergewissert euch vor dem Plotten, dass der Datensatz im long-Format vorliegt.

3b)

  • Plottet den Tagesgang, unterteilt nach den 7 Wochentagen nun für unsere Phasen.

Code
ggplot(Mean_h, aes(x = Stunde, y = Total, colour = Wochentag, linetype = Wochentag)) +
  geom_line(size = 1) +
  scale_colour_viridis_d() +
  scale_linetype_manual(values = c(rep("solid", 5), "twodash", "twodash")) +
  scale_x_continuous(breaks = c(seq(0, 23, by = 1)), labels = c(seq(0, 23, by = 1))) +
  facet_grid(rows = vars(Phase)) +
  labs(x = "Uhrzeit [h]", y = "Durchscnnitt Fussganger_Innen / h", title = "") +
  lims(y = c(0, 25)) +
  theme_linedraw(base_size = 15) +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

Hinweis: - Nutzt zum plotten ggplot() - folgende Codeschnipsel helfen euch:

Code
ggplot(Mean_h, aes(x = Stunde, y = Total, colour = Wochentag, linetype = Wochentag)) +
  geom_line(...) +
  facet_grid(...)
...

Aufgabe 4: Kennzahlen

Bis hier hin haben wir in diesem Kapitel v.a. visuell gearbeitet. Für den Bericht kann es aber sinnvoll sein, auch einige Kennzahlen in der Hinterhand zu haben. Wir haben das bereits im Kapitel [Datenverarbeitung] berechnet.

  • Reflektiert, welche Zahlen ihr habe und was für den Bericht spannend sein könnte, resp. eure Abbildungen unterstützt oder ergänzt.