dl023: web scraping weihnachtsmarkt

dl023: web scraping weihnachtsmarkt

Intro (00:00:00)

Thema des Podcasts (00:00:18)

Willkommen zur dreiundzwanzigsten Folge beim datenleben-Podcast, dem Podcast über Verschwörungserzählungen ... nein, über Data Science.
Wir sind Helena und Janine und möchten mit euch die Welt der Daten erkunden.
Daten umgeben uns überall und sind eine wichtige Grundlage für unsere Entscheidungen.
Wer erhebt Daten? Welche Daten werden erhoben? Wie werden sie aufbereitet?
Und noch wichtiger: Welchen Einfluss haben sie auf uns?
Diesen Fragen gehen wir anhand konkreter Themen in unserem Podcast nach.

Thema der Folge (00:00:53)

  • Es geht um Flüchtige Daten eigentlich, praktisch haben wir ein Beispiel dabei:
  • Weihnachtsmarkt Braunschweig hat Besuchszahlen via Webseite rausgeworfen
  • Helena hat die abgesaugt und eine Webseite mit Plot generiert
  • Janine erzählt kurz über den Weihnachtsmarkt und das Infektionsschutzkonzept
  • Fragen, die wir klären wollen
    • Wie kriege ich Daten aus dem Internet?
    • Was kann ich mit den Daten dann machen?
    • Welche Rückschlüsse bieten die Daten an?

Warum ist das Thema interessant? (00:02:20)

  • Ja, was mache ich eigentlich, wenn ich im Internet Daten finde und diese nur von Jetzt sind, ich aber den zeitlichen Verlauf kennen möchte?
  • Dafür sind die Weihnachtsmarktdaten unser Beispiel, weswegen wir uns dafür interessieren
  • Hier für die Auslastung von Flächen

Einspieler: Datenpakete für mehr Erkenntnisse (00:02:43)

  • Es klingelt an der Tür, davor steht eine Botin mit einem Paket
  • "Hier, für sie, die Daten die sie bestellt haben!"
  • Enthalten sind ganz verschiedene Daten
  • Ein paar Uhrzeiten, ein paar absolute Zahlen, solche Dinge halt
  • Du sortierst nach Kategorien, guckst dir alles näher an, setzt sie ins Verhältnis und entschließt dich für eine Anordnung
  • "Tatsache!", sagst Du, "Das ist ja mal interessant. Gut dass ich das weiß, jetzt kann ich die nächste Entscheidung treffen."
  • So oder so ähnlich ist das mit Daten im Internet
  • Manchmal gibt es daten schon in direkt benutzbarer Form (Sensordaten für Feinstaubsensoren bei sensor community)
  • Das ist das schöne an Open Data - es sind offene und für jeden zugängliche Daten
  • Manche Daten muss man erst befreien
  • Sei es mittels eines Skriptes oder mit einer Anfrage bei Firmen, Behörden, Kommunen, Regierung
  • Oft sind auch Daten der öffentlichen Hand nicht undbedingt gut zugänglich
  • Obwohl es bereits einige Daten in Deutschland über Govdata gibt, steht Deutschland noch sehr weit am Anfang dieses Prozesses
  • Deswegen gibt es Projekte wie FragDenStaat in der Trägerschaft des Vereins Open Knowledge Foundation Deutschland
  • Denn eins wissen wir ja bereits: Daten sind wichtig, damit wir in allen Lebenslagen informierte Entscheidungen treffen können

Wie fand der Weihnachtsmarkt statt? (00:05:17)

  • Im Grunde geht's darum, wie man mit Daten umgeht, die man gefunden und gespeichert hat
  • Deswegen ist es wichtig Kontext zu verstehen in dem die Daten erhoben wurden
  • Deswegen erzählt Janine wie der Weihnachtsmarkt in Braunschweig 2021 stattgefunden hat
  • Der Braunschweiger Weihnachtsmarkt fand 2021 statt und zwar mit einem Infektionsschutzkonzept (Link: Die Seite wird vermutlich im Laufe des Jahres inhaltich ersetzt werden, wenn der Weihnachtsmarkt 2022 ansteht, aktuell sind dort noch die Regeln für 2021 nachzulesen)
  • Während andere Weihnachtsmärkte bereits im Vorfeld abgesagt waren, hielt die Stadt hier dran fest
  • Wie sah das Konzept also aus?
  • Statt der üblichen Verteilung der Buden, wurde alles etwas entzerrt, weniger Stände
  • Der Markt findet auf dem Burgplatz rund um den Dom statt und vor dem Rathaus
  • Es gab 4 Gastronomieflächen, die eine Ein- und Ausgangskontrolle hatten
  • In diesen Flächen standen alle Stände, die Getränkeausschank hatten und alle Stände mit Speisen, die eher nicht "To Go" waren
  • Zugang war pro Fläche auf eine Anzahl festgelegt und es galt die 2G-Regel, geimpft oder genesen
  • Auf der Marktfläche ohne Zugangskontrollen waren alle anderen Buden - auch die, die Süßspeisen "auf die Hand" mitgegeben haben
  • Allerdings durfte direkt neben der Bude in einem markierten Bereich konsumiert werden, aber nur nach vorzeigen eines 2G-Nachweises
  • Ansonsten war Essen und Trinken auf der gesamten Marktfläche eher verboten, es galt eine Maskenpflicht für medizinische Masken
  • Wenige Tage nach Eröffnung stiegen die Zahlen (Omikron und Winter) wenig überraschend weiter
  • Ab dem 1.12. galt überall Maskenpflicht für FFP2 Masken, auch auf den Gastronomieflächen, außer man aß oder trank gerade
  • Maskenpflicht wurde von Sicherheitsdienst, Ordnungsamt und Polizei oft kontrolliert und durchgesetzt
  • Zusätzlich galt dann auch 2G+ Regel: Geimpft oder genesen UND getestet
  • Bzw. kurz darauf 2G+ oder Booster statt Test
  • Das waren die Grundbedingungen unter denen der Markt stattfand

Wie hat Helena die Daten bekommen? (00:10:41)

  • Also es gab diese Flächen, die eine maximale Zahl zugelassener Besucher*innen hatten
  • Damit die Menschen zu Hause wussten, ob sich das Losgehen lohnt, hat die Stadt Braunschweig die Auslastung der Flächen im Internet veröffentlicht
  • Unter https://www.braunschweig.de/weihnachtsmarkt/auslastung-flaechen.php (link inzwischen tot, wurde um 11:07 am 05.01. abgeschaltet) wurde das für alle veröffentlicht
  • Zu jeder Fläche sah man eine Zahl
  • Helena sah das noch vor der Markteröffnung bereits am Vormittag des Eröffnungstages und dachte sich: Hm, warum speicher ich das nicht einfach
  • Das sind Daten, die stehen da nur live, aber eigentlich ist ja interessant, ob es bestimmte Zeitpunkte gibt, die vorrausplanen lassen, wo es nicht zu voll ist
  • Also: die Daten mussten gespeichert werden
  • Helena hat sich die Webseite mal runtergeladen und den HTML-Quellcode anzeigen lassen, um zu sehen, wie das aufgebaut ist
  • HTML steht für Hypertext Markup Language und wird für die Darstellung einer Webseite eingesetzt
  • Im HTML waren Tags angegeben, die anzeigen, was mit bestimmten Textschnippseln passieren soll
  • Dafür gab es die Werte braunschweig-app-1, braunschweig-app-2, braunschweig-app-3, braunschweig-app-4 - für die vier Flächen
  • Das HTML-Schnipsel enthielt dann jeweils einen Zeitpunkt als HTML-Kommentar an dem die Daten gültig waren, sowie den Text "Auslastung: 0 %", wobei statt 0 konnte da eine Zahl stehen
  • Das ist aber auf der Seite selbst nicht zu sehen, sondern nur, wenn man sich den Quelltext anguckt
  • Dann bekommt man zu der Auslastungszahl auch den Zeitpunkt der Datenerhebung mitgeliefert
  • In dem Moment, wo Helena ihr Skript geschrieben hat, wusste sie noch nicht, ob das dann ganze Zahlen werden oder auch Kommazahlen möglich sind
  • Und wenn es Kommazahlen sind, ist es dann das klassische deutsche Komma oder der Dezimalpunkt?
  • Helena hat deswegen jede dieser Varianten in ihre Software eingebaut
  • Als dann alles lief und losging, ist irgendwann statt der Zahl ein Text aufgetaucht: Fehler
  • Es musste also noch der Fall eingearbeitet werden, dass da auch mal Datenmüll ankommt
  • Praktisch war: Helena musste nicht immer die ganze Seite neu laden, sondern es gab eine spezielle URL an die man einen GET-request schicken konnte
  • Helena konnte in die URL die data-content-id reinschreiben, Beispiel: braunschweig-app-4, und es kam das HTML zurück mit den dazugehörigen Zahlen
  • Im nächsten Schritt wurde dann eingebaut, dass die Zahlen und der Zeitpunkt der Zahlenerhebung rausgezogen und gespeichert wurde
  • Diese hat sie dann umgewandelt in tatsächlich maschinenlesbare Daten, und das per Skript immer an eine csv-Datei angehängt
  • CSV-Dateien sind Textdateien, die über eine bestimmte Formatierung genauso sind wie Excel-Dateien
  • Der Computer speichert Daten auf eine bestimmte Weise ab in dem Dateisystem
  • Dateisysteme haben verschiedene Modi in denen eine Datei geöffnet werden kann
  • Beispiel: Dateien können nur für Lesen geöffnet werden, so können mehrere Programme gleichzeitig drauf zugreifen, ohne sich in die Quere zu kommen, weil nur eines zum Beispiel darauf schreiben kann, die anderen nur lesend zugreifen
  • Außer schreibend und lesend, gibt es noch die Möglichkeit anhängend
  • Dabei wird nichts überschrieben, was schon da ist, sondern nur etwas Neues angehängt
  • Dabei läuft man nicht gefahr bei einem Fehler im Programm alte Daten zu verlieren
  • Daher hat mein Skript die Datei nur 'anhängend' geöffnet

Was hat Helena mit den Daten gemacht? (00:19:42)

  • Nächster Schritt: Daten runterladen und erstmal angucken
  • Helena hat die Daten dann geplottet (also visualisiert) und sich gedacht, dass es auch nett wäre, wenn andere sich das angucken könnten
  • Also hat sie mit der Software Shiny, die auf R basiert, ein kleines Webtool gebaut
  • Helena hat vorher noch nie mit Shiny gearbeitet und wollte das testen, weil es auch so oft erwähnt wird
  • Hat relativ gut funktioniert, war schnell fertig, aber Helena mag es nicht
  • Interaktivität nicht hoch genug, Defaultwerte kamen nicht richtig an, man muss extra plotten klicken
  • Plot selbst kann nicht gezoomt werden, an den Achsen kann nicht so gebastelt werden
  • Janine fragt, was sie beim nächsten Mal stattdessen benutzen würde
  • Es gibt zum Beispiel noch Grafana, was ein javaskript-basiertes Plottingtool ist
  • Helena findet die Plots sehen eher fürchterlich aus, es ist aber interaktiv benutzbar
  • Vorteil: Wenn man Daten aus einer Datenbank wie influxdb zieht, gibt es einfach fertige Module, die man einbinden kann
  • Wenn es um schnelle Ergebnisse geht, ist das ein richtig cooles Tool, das in vielen Fällen eingesetzt wird
  • Was Helena programmiert hat, hat sie auch auf Github veröffentlicht
  • Der Code funktioniert zwar nicht mehr, aber als Beispiel ist es hier nochmal verlinkt
  • Was haben wir dann mit den Daten und Plots gemacht?
  • Tag 1 des Weihnachtsmarktes:

  • Es gab 4 Plätze: Ruhfäutchenplatz, Burgplatz, Domplatz und Platz der Deutschen Einheit/Rathausplatz
  • Nach Markteröffnung am ersten Tag geht es auch fast überall recht zügig hoch mit den Zahlen
  • Ab 18:00 ist der Ruhfäutchenplatz, der kleinste von allen, das erste mal gesättigt/voll
  • Burg- und Domplatz ziehen nach, aber Rathausplatz hat es den nicht wirklich über 80% geschafft
  • Der Markt schließt um 21:00 Uhr und man sieht in der letzten halben Stunde schon, dass die Zahlen wieder kleiner werden, weil die Leute gehen
  • Und dann passiert erstmal nichts, die Zahlen bleiben ab 21:00 Uhr immer auf der gleichen Höhe und bilden eine lange Linie über die 21:00 Uhr hinaus, die irgendwann schlagartig auf Null landet
  • Was ist da passiert?
  • Hier ist der Kontext wichtig, um das zu verstehen
  • Ziel Datenerhebung: wissen, wie viele Menschen während der Öffnungszeiten auf den Plätzen sind
  • Und für die Menschen zu Hause ist auch nur wichtig, dass sie sehen, ob es sich lohnt loszugehen
  • Hat der Markt eh zu, ist diese Information nicht mehr relevant, also wird aufgehört zu zählen, wie viele Menschen noch auf dem Platz sind
  • Es darf keiner mehr rauf, wann die vorhandenen Menschen gehen, ist aber egal
  • Damit der Wert am nächsten Tag aber nicht schon mit falschen Zahlen startet, wird irgendwann nachts -- vermutlich automatisiert -- die Zahl wieder auf Null gesetzt
  • Deswegen sehen die Zahlen hier so seltsam aus in ihrem Verhalten
  • Nach Tag 1 war auch klar, dass es nur ganze Zahlen und gar keine Kommazahlen in den Daten gibt
  • Und wie oft aktualisiert wird
  • Wenn man die Webseite offen hatte, sah man, dass 1x pro Minute die Zahlen aktualisiert wurden
  • Also hat Helena ihr Skript auch 1x pro Minute die Daten ziehen lassen, weil sie so davon ausgehen konnte, dass das ein Traffic ist, der auch so erwartet wurde
  • An Tag 2 war der erste reguläre Tag, es gab hier keine 100%ige Auslastung und auffällig waren mehrere Sprünge in den Daten, die wir nicht erklären konnten und es gibt eine Lücke in den Daten, als Helena ihr Skript aktualisieren musste (gegen 19:00 Uhr)

  • Was waren die Dinge, die Helena nochmal anpassen musste?
  • Zum Beispiel musste angepasst werden, dass die Ausgabe "Fehler" anstelle einer Zahl, richtig weggespeichert wurde und nicht die CSV-Datei kaputt macht
  • Der auf den Plots zu sehende Abfall passiert gegen 15:00 Uhr auf Ruhfäutchen- und Burgplatz
  • Wäre es nur ein Platz, hätte man vielleicht denken können, dass es eine größere Gruppe gab, die geschlossen gegangen ist
  • Auf zwei Plätzen gleichzeitig klingt das eher unwahrscheinlich
  • Spekulation von Helena: Vielleicht sind zu dem Zeitpunkt Menschen rumgegangen und haben nachgezählt, ob die Zahlen noch stimmen und dann wurde korrigiert
  • Die Ordner*innen haben die Zahlen auf Handys jeweils hoch und runter geklickt, vielleicht wurde einfach nicht immer alles richtig erfasst
  • Und es war der erste ganze Tag, vielleicht passten die Routinen noch nicht

Wie wirkt sich die Verschärfung der Maßnahmen aus? (00:30:01)

  • Am 01.12.2021 wurde 2G+ für die Gastronomieflächen eingeführt
  • Deswegen erschien dieser Tag im Vorfeld besonders spannend, was die Daten angeht
  • Der erste Blick auf die Daten war dann doch überraschend: so wenig Leute, dass es schon absurd wirkte
  • Nur 7% Auslastung und ab 15:00 Uhr war gar nichts mehr los

  • Es wirkt sehr unwahrscheinlich, dass die Ursache dafür 2G+ sein soll
  • Was war los? Der Markt wurde um 15:00 Uhr wegen einer Sturmwarnung geschlossen
  • Man sieht, dass nach 15 Uhr das gleiche passiert, wie sonst nach 21:00 Uhr
  • Die Zahlen laufen bei 2 Plätzen noch einige Stunden auf dem Stand von 15:00 Uhr so weiter, ehe sie plötzlich abbrechen
  • Die beiden anderen Plätze scheinen schon vor 15:00 Uhr geräumt worden zu sein
  • Dann wollten wir aber nochmal einen tatsächlichen Vergleich haben von 2G und 2G+
  • Der Tag darauf war ein Donnerstag, zu dem gab es ja schon in der Woche davor einen Vergleichstag
  • In der Woche davor war die maximale Auslastung bei etwa 75%
  • Nach der Einführung von 2G+ lag die Besuchsrate dann bei maximal 50%
  • Die verschärfte Maßnahme hatte also durchaus einen Effekt auf die Besuchszahlen

  • Den Freitag gab es dann auch wieder 100%, allerdings nicht über lange Zeit wie den Freitag zuvor
  • 2G+ hat also zu weniger Menschen auf dem Weihnachtsmarkt geführt
  • Der regnerische Freitag war ähnlich gut besucht wie der erste Freitag mit 2G+
  • Helena schließt: Die Pflicht sich testen zu lassen ist in etwa so nervig, wie bei Regen draußen zu stehen

Wie gut passen die Daten zur Realität? (00:33:11)

  • Fazit Zahlen und wie die Realität sich angefühlt hat:
  • Die Bereitschaft sich testen zu lassen, war trotzdem sehr hoch, es standen doch recht viele Menschen immer am Stand für Stempel oder Bändchen an
  • Also: Menschen standen bei Testzentren an, haben sich dann für Stempel/Bändchen angestellt, haben sich dann für den Einlass auf eine Fläche angestellt
  • Janine hat das aus erster Hand mitbekommen, weil sie auf dem Weihnachtsmarkt gearbeitet hat
  • Auf der Webseite sieht es auch an ziemlich vielen Tagen so aus, als wäre die Auslastung ganz gut
  • Verglichen mit der Realität ist es aber trotzdem ambivalent
  • In den Shownotes sind auch ein paar Bilder vom Markt und wie es dort aussah, kombiniert mit dem Plot zum jeweiligen Tag

  • Um überhaupt zu sehen: Was heißt denn eine Auslastung von 50 oder 80%?
  • Auch bei 100% war es nicht so voll, dass man nicht noch ein Eckchen für eine kleine Gruppe finden konnte mit Abstand zu anderen Gruppen
  • Tagsüber deutlich weniger Besuchende auf dem markt, insbesondere in den Gastronomieflächen
  • Deswegen ist auch das Fazit sehr durchwachsen, unterm Strich war der Markt zu wenig besucht, wenn man das mit vor der Pandemie vergleicht
  • Janine hat sich mit einigen Marktmenschen unterhalten und die Rückmeldung bekommen, dass es eigentlich ziemlich desaströs ist, obwohl die Zahlen auf der Homepage eigentlich einen guten Eindruck gemacht haben
  • Aber die meisten waren trotzdem ganz froh darum die Chance mit dem Weihnachtsmarkt überhaupt gehabt zu haben
  • Aus sicht der Marktbesucher*innen hat Janine auch verschiedene Dinge gehört
  • Manche haben sich echt gefreut über den Markt, was sich auch im üppigeren Trinkgeld niedergeschlagen hat
  • Andere wiederum haben lauthals im Vorbeigehen gepöbelt über die Maßnahmen
  • Es war für Janine mal ganz schön, mit Daten zu arbeiten, die so direkt mit der Realität abgeglichen werden konnten
  • Helena fand es sehr schön, dass die Daten zur Verfügung gestellt wurden und hat sich über die Fingerübung gefreut

Was für andere Anwendungen dafür gibt es? (00:38:14)

  • In Braunschweig gibt es die Boulderhalle Greifhaus, die veröffentlichen aktuell auch Besuchszahlen auf der Homepage
  • Allerdings: Es ist dort deutlich schwerer die Daten wegzuspeichern
  • Wäre aber auch hier spannend einen zeitlichen Verlauf zu kennen, für regelmäßige und nicht nur spontane Besuche
  • Ansonsten gibt es viele öffentliche APIs (Anwendungs Programmier Interface) die auch maschinenlesbare Daten geben
  • Beispiel Projekt: https://dystonse.org/, wo angezeigt werden kann, wie wahrscheinlich eine Straßenbahn zu einer bestimmten Uhrzeit ankommt
  • Apropos Verspätungsdaten: Empfehlenswerter Vortrag zu Verspätungen der Deutschen Bahn von David Kriesel, der Data Mining bei der Bahn betrieben hat
  • Wettervorhersagen speichern wäre auch ein gutes Projekt, für die Frage: Wie unpräzise sind die Wettervorhersagen für einen bestimmten Ort?
  • Wird die Wettervorhersage immer genauer vorher oder nicht? Wie genau sind welche Webseiten?
  • Ist vermutlich wegen der Piktogramme etwas schwerer auszuwerten, aber möglich
  • Im Internet liegen viele Daten rum und alles, was man auch sehen kann, kann man auch speichern

Kann man einfach überall alles an Daten abziehen und benutzen? (00:42:17)

  • Technisch? Ja.
  • Wir haben einige Stichpunkte, um, die man sich beim Datenholen Gedanken machen sollte
  • Je höher der Aufwand an die Daten zu kommen, desto eher überlegen, ob das erwünscht ist
  • Jenachdem wie man die Daten gewinnt, kann dadurch Last und somit Verlangsamung auf oder auch Kosten für den Server anfallen
  • Nicht in Ordnung: einfach so viele Daten saugen, die dann die Systeme der Quelle lahm legen
  • Seiten, die Daten zur freien Verfügung stellen haben für so etwas rate limits und regeln wie viele Anfragen pro Sekunde erlaubt sind
  • Aber man kann sich nicht drauf verlassen, dass alle das haben, daher sollte man beobachten, ob der Server irgendwann langsamer wird
  • Deswegen hat Helena ihr Skript bei den Weihnachtsmarktdaten auch an der automatischen Aktualisierung der Seite angepasst
  • Daten können Lizenzen unterliegen, achtet darauf, ob es welche gibt, spätestens dann sollte keine kommerzielle Weiterverwendung stattfinden
  • Es gibt auch ein Urheberrecht auf Datenbanken
  • Helena ist grundsätzlich der Meinung des Manifestes vom Chaos Computerclub: öffentliche Daten nutzen, private Daten schützen
  • Datenressourcen, die interessant sein könnten: Govdata, bietet Daten von Regierung und Kommunen
  • Dort werden auch Links auf Projekte, die mit öffentlichen Daten arbeiten, bereitgestellt, das ist sehr spannend und inspirierend

Fazit (00:47:33)

  • Wenn irgendwo Daten rumliegen, mit denen man spannende Dinge tun kann, einfach mal speichern
  • Gerade wenn es sich um so Flüchtige Daten handelt, wie in unserem Beispiel

Nächste Folge: wie datenleben entsteht am 26.03.2022 (00:48:17)

  • Wir haben einen Talk auf der #rC3 im Programm der Haecksen gehalten
  • Wir wurden öfter gefragt, ob wir nichtmal vorstellen können, wie wir die Folgen erarbeiten und umsetzen
  • Diesen Vortrag haben wir natürlich audiotechnisch aufgezeichnet und wollen das in der nächsten Folge veröffentlichen

Call to Action (00:49:01)

  • Wenn ihr uns weiter hören möchtet, folgt uns auf Twitter unter @datenleben
  • Oder besucht unsere Webseite: www.datenleben.de
  • Hinterlasst uns gerne Feedback, wir würden uns darüber sehr freuen
  • Ihr könnt uns als Data Scientists auch Buchen für Analysen oder Projekte
  • Habt ihr Fragen oder Themen, die euch interessieren? Dann schreibt uns!

Outro (00:49:36)

Schlagworte zur Folge

Web scraping, Datenerfassung, CSV, R, Shiny

Quellen

Weiterführende Links


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert