2015/05/24

Storytelling mit Odyssey.js

Mit Odyssey.js wird es einem ziemlich einfach gemacht, interaktive kartenbasierte Stories zu erstellen. Mit ein bisschen Markdown und wenigen Klicks sind schnell ein paar Slides mit Kartenausschnitten zu einer interaktiven Geschichte zusammen zu stellen.

Kartenbasierte Geschichten

Odyssey.js ist ein Open Source Projekt von CartoDB und weist noch einen relativ frühen Entwicklungsstand auf. Einiges funktioniert nicht wie es sollte (z.B. die Leaflet Integration) und die Auswahlmöglichkeiten sind teilweise auch noch bescheiden. Aktuell ist es beispielsweise nur möglich zwischen 3 Basiskarten zu wählen. Die Markdown Umsetzung ist auch noch nicht ganz ausgereift. Für erste Versuche und ein paar visuell ganz ansprechende Stories ist das Tool aber schon zu gebrauchen. Als Resultat kann die erstellte kartenbasierte Story in HTML lokal gespeichert, als iFrame in eine Webpage eingebunden oder als eigenständige Page (gehostet über die Projektseite) verwendet werden.

Das Projekt ist mMn aus zwei Gründen sehr sinnvoll. Einerseits ist es ein weiterer Baustein, um Kartenanwendungen zu demokratisieren. Es ermöglicht einen einfachen Zugang zur Erstellung und Verbreitung eigener webbasierter Karten auch für GIS-Laien. Andererseits ermöglicht das Projekt eben die Zusammenstellung der Karten in Stories, inklusive interaktiver Features für BetrachterInnen. Gerade diese Möglichkeit macht das Tool mMn für die Sozialforschung interessant, um beispielsweise qualitative Ergebnisse in den geografischen Kontext zu setzen und dieses Aggregat als gemeinsame Geschichte zu präsentieren. Ausserdem kann damit RezipientInnen auch ermöglicht werden, mit diesen Ergebnissen zu interagieren, ohne den mühsamen Umweg, die Interaktion selbst entwickeln zu müssen.

Beispielgeschichte

Das Thema dieses Beispiels liegt nicht in der Sozialforschung, sondern in der Werbung. Es soll zeigen, wie mit wenig Aufwand der geografische Kontext eines Produktes mit dessen Entstehungsprozess so verbunden werden kann, dass BetrachterInnen einen näheren Bezug zum Produkt entwickeln. Da in diesem Anwendungsfall die exakte geografische Darstellung nicht von zentraler Bedeutung ist, wurde der Watercolor Style von Stamen Design für die Basiskarten verwendet und die PoI's auch nicht exakt verortet. Der Inhalt ist entsprechend eines schnellen Prototyps natürlich auch nicht ausgereift.
Hier der Link zur Geschichte über den Weg meines Lieblingskaffees.

2015/05/20

Spyre - Framework für Python Datenprojekte

Was dem Python Daten Ökosystem bislang noch fehlt, ist ein Modul um webfähige Datenprodukte, schnell und mit wenig Aufwand, zu erstellen. Adam Hajari hat einen ersten Versuch unternommen, das zu ändern und begann die Entwicklung von Spyre. Um dieses Framework zu testen, habe ich eine kleine Beispielapplikation geschrieben, das im Repo für diesen Blog unter den Python Beispielen zu finden ist.

Daten von Strava

Für das Beispiel habe ich ein paar Daten zu meinen sportlichen Aktivitäten in diesem Jahr von Strava herunter geladen. Die Strava API ist zwar nicht gerade ein Highlight in Bezug auf UX beim Datenabgreifen, aber es gibt zumindest ein (selten schlecht dokumentiertes) Python Modul, das die Verbindung managt und somit die Angelegenheit ein bisschen schmerzfreier gestaltet. Das Skript, mit dem ich die Kollektionen mit meinen Radfahr- und Schwimm-Aktivitäten erstellt habe, ist auch im Beispiel Verzeichnis zu finden. Sie enthalten die Art der Aktivität, die Startzeit, Dauer und Distanz.

Spyre Apps

Nach der Installation von Spyre (das Paket heisst dataspyre bei pip) und dem Download des master Repos des Projekts kann gleich mit dem Testen der Beispielanwendungen begonnen werden. Diese sind sehr auf Plots fixiert, es ist z.B. auch möglich Bokeh Plots zu integrieren, aber auch diverse Matplotlib Derivate können gerendert werden. Aber auch das Erzeugen von Tabellen wird durch ein Beispiel abgedeckt. Wirklich sehr nützlich um sich mit dem Modul vertraut zu machen, ist das Tutorial im Spyre Repo, im Form eines Ipython Notebooks. Darin wird anhand der Beispielanwendungen die wichtigsten Input-Elemente (div. Buttons, Slider, Dropdown etc.) und Output-Möglichkeiten (Plot, Tabelle etc.) des Frameworks erklärt.
Radfahr Daten in Browser App
Daten App im Browser

Von den Beispielen im Spyre Repo habe ich dann auch meine Beispielanwendung abgeleitet (hier ist der Code dazu). Um die Anwendung zu starten genügt es, das Hauptskript mit Python (in einer 2er Version) zu starten und im Browser der Wahl den Port 9097 vom localhost aufzurufen. Wie in dem Foto rechts zu sehen ist, kann dann mit einem Dropdown die Sportart gewählt werden. Der Plot (der Simplizität zuliebe mit Pandas erzeugt) zeigt daraufhin die Tage, an denen die Aktivität statt fand und die Distanz, welche mit dem Rad bzw. im Schwimmbecken zurück gelegt wurde.

Ein Spyre Server basiert übrigens auf dem CherryPy Web Framework. Wer daran ein bisschen herum bastelt, kann übrigens auch Spyre Apps auf einen Raspberry Pi 2 zum Laufen bringen (siehe Foto unten). Das halte ich für insofern interessant, da es damit möglich wird, Sensordaten abzugreifen, zu verarbeiten und jetzt eben auch im Internet zu präsentieren mit einer durchgängigen Programmiersprache und auf einem Gerät.
Ein von @datadonk23 gepostetes Foto am


Zusammenfassung

Mit Spyre ist es möglich, webfähige Datenprodukte durchgehend in Python zu erstellen, ohne auf Übersetzungen in eine andere Sprache (wie zB bei plot.ly) und den damit verbundenen Einschränkungen, angewiesen zu sein. Die Funktionalität und Usability ist aber im Vergleich zum R Ökosystem mit Shiny jedoch sehr bescheiden und benötigt noch jede Menge Entwicklungsarbeit der Community. Es bleibt zu hoffen, dass das Projekt weiter an Bedeutung zunimmt und eventuell auch eine Plattform wie ShinyApps.io, nur für das Python Daten Ökosystem, entstehen lässt. Insbesonders für die adäquate Präsentation von Analyse-Ergebnisse oder Daten-Modellen ist ein Modul wie Spyre bedeutend, um datenwissenschaftliche Prozesse durchgehend in Python zu ermöglichen.