Data Analytics

Wissenschaftler (und Binge-Watcher) versammeln sich

Seit einiger Zeit wird die Swisscom Application Cloud mit einem eingebauten Buildpack für die beliebte Statistiksprache R ausgeliefert. Dieser Beitrag stellt dir dieses R-Buildpack vor und zeigt ein Beispiel, wie du Daten anzeigen kannst, die von einem Webservice bereitgestellt werden.

"Ist das nicht der Hausmeister aus den Harry Potter-Filmen?" - "Nein, das ist Walder Frey aus Game of Thrones." - "Oh warte, jetzt wo ich es sehe, hat David Bradley beide Rollen gespielt."

Diese Unterhaltung führte ich kürzlich, als ich die britische Comedy/Drama-Serie After Life sah.

Um solche Fragen zu beantworten, habe ich mich gefragt, ob es ein Verzeichnis gibt, in das ich die Namen von zwei Fernsehserien oder Filmen eingeben kann. Ich würde dann erwarten, dass ich eine Liste von Schauspielern und Schauspielerinnen bekomme, die in beiden Produktionen eine Rolle spielen. Eine fünfminütige Suche führte nicht sofort zu einer brauchbaren Lösung, also beschloss ich fröhlich, es selbst zu implementieren.

Ich hatte einen Graphen im Kopf, in dem die Schauspieler/innen Knoten sind und ihre jeweiligen Rollen Kanten, die diese Knoten verbinden.

Glücklicherweise wird die Swisscom Application Cloud mit einem integrierten Buildpack für die beliebte Statistiksprache R ausgeliefert. So musste ich nur eine R-Anwendung schreiben, um die notwendigen Daten zu sammeln und sie als einen solchen Graphen zu visualisieren.

Es stellte sich heraus, dass ich Java-Anwendungen viel besser schreiben kann als R-Skripte. Also beschloss ich, eine kleine Java-Anwendung auf der Grundlage des Reactive Spring Frameworks zu schreiben, die alle Daten im Hintergrund verarbeitet und die Ergebnisse über eine einfach zu bedienende Schnittstelle bereitstellt. Auf diese Weise kann ich auch den geheimen Speicher der Application Cloud(öffnet ein neues Fenster) und das Container Networking(öffnet ein neues Fenster) nutzen.

Das Frontend ist als Shiny R App(öffnet ein neues Fenster) geschrieben. Nachdem ich einige Fallstricke und bemerkenswerte Konfigurationen kennengelernt habe, möchte ich dir zeigen, wie du mit dem R-Buildpack eine einfache Shiny-App erstellst und sie in der Application Cloud bereitstellst.

Nehmen wir an, dass die Nutzer ein paar Namen von Fernsehserien oder Filmen eingeben können. Das Backend durchsucht eine gewöhnliche Filmdatenbank und liefert einen Graphen, der aus Knoten und Kanten besteht:

Um diese Daten anzuzeigen, muss eine Shiny-App sie konsumieren und darstellen.

Ich erstelle ein neues R-Skript und beginne mit dem Hinzufügen dieser Abhängigkeiten:

Danach wird die Benutzeroberfläche wie folgt definiert:

searchQuery ist das Feld der Benutzereingabe mit einigen Titeln als Standardwerte. In einem Browser sieht es so aus:

Die Serverlogik ist so implementiert, dass sie diese Eingabe past und die Ergebnisse von einer bestimmten URI abruft. Anschließend wird der Graph mit Hilfe von visNetwork gerendert:

Beachte, dass ich den Host des Backends noch nicht angegeben habe, aber erwarte, dass eine Variable namens URI gesetzt wird.

Ich möchte meine Anmeldedaten nicht in einem VCS wie Git einchecken, also weise ich die App an, die Verbindungsdetails aus der Umgebung zu lesen, wobei ich eine Vorgabe für die lokale Entwicklung mache:

Damit das funktioniert, ist eine Instanz eines geheimen Speichers(öffnet ein neues Fenster) erforderlich. Ich habe einen solchen mit diesem Befehl erstellt:

Schließlich macht dieser Befehl das Skript als lauffähige Shiny-App sichtbar:

Um sie zu verteilen, habe ich die folgenden drei Dateien im selben Verzeichnis:

- shiny.r (die App selbst, wie oben abgebildet)
- r.yml
- manifest.yml

Die r.yml-Datei enthält die notwendigen Abhängigkeiten und sieht wie folgt aus:

Beachte, dass dadurch die Abhängigkeiten installiert werden. Vergiss nicht, sie im R-Skript zu verwenden (mit library(...)). Shiny wird nicht installiert, da es standardmäßig mit dem R-Buildpack ausgeliefert wird.

Die manifest.yml ist das bekannte Deployment-Manifest mit diesem Inhalt:

Denke daran, vor dem Push eine Netzwerkrichtlinie zu erstellen, damit das Frontend auf das Backend zugreifen kann, wie es in der URI des geheimen Speichers konfiguriert ist:

Die erfolgreiche Bereitstellung der App in der Application Cloud ist so einfach wie ein cf-Push. Allerdings kann es einige Zeit dauern, bis der Staging-Prozess alle R-Abhängigkeiten heruntergeladen hat. Auf Github wird derzeit darüber diskutiert, wie dies in Zukunft verbessert werden kann. Nachdem die App bereitgestellt wurde, rufst du sie über deinen Browser auf und gibst die Produktionen ein, an denen du interessiert bist. Im ersten Gespräch war David Bradley nicht der einzige Schauspieler, der in mehr als nur einer der fraglichen Produktionen mitgespielt hat:

Und das war's auch schon. Ich hoffe, ich konnte dir eine kurze Einführung in das R-Buildpack geben und du bist jetzt in der Lage, deine Shiny-Apps auch zu deployen.

Ich möchte mich bei allen Mitwirkenden(öffnet ein neues Fenster) für ihre Arbeit an diesem Buildpack bedanken. Ziehe es für deine nächsten wissenschaftlichen Plots in Betracht oder um schnell andere spannende Daten zu zeichnen.

Viel Spaß beim Plotten!

Roman Bachmann

Roman Bachmann

Head of Cloud Platform Services

Mehr getIT-Beiträge

Bereit für Swisscom

Finde deinen Job oder die Karrierewelt, die zu dir passt. In der du mitgestalten und dich weiterentwickeln willst.

Was du draus machst, ist was uns ausmacht.

Zu den Karrierewelten

Zu den offenen Security Stellen