Mit dem „Tutorial-Tuesday“ hat gestern in Aalborg die useR! Conference 2015 begonnen. Unser Team vor Ort hat viele der Tutorials besucht und die wichtigsten Informationen für die R-User zusammengefasst:

Rocker: Using R on Docker (Dirk Eddelbuettel)

Seit einiger Zeit schon gehört Docker zu den am heißesten diskutierten Ansätzen in der IT-Welt. Docker ist eine Abstraktionsschicht, vergleichbar mit einer Virtualisierungsumgebung. Innerhalb von Docker finden sich Container, die einer virtuellen Maschine (VM) entsprechen. Im Unterschied zu VMs sind Docker Container jedoch leichtgewichtig: Sie benötigen kein eigenes Betriebssystem, sie verbrauchen deutlicher weniger Disk space, sie lassen sich schnell und einfach erstellen, verteilen und initialisieren. Docker läuft auf allen gängigen Betriebssystemen und wird von nahezu allen wichtigen Cloudanbietern (Microsoft Azure, Amazon, Digital Ocean etc.) unterstützt.

Dirk Eddelbuettel, Mitentwickler des populären C++ Interfaces Rcpp, stellte in seinem Tutorium Rocker vor. Rocker steht für R on Docker. Es handelt sich dabei nicht um ein R Paket, sondern um ein Set von R-Instanzen, die sich in Docker Containern befinden. Eddelbuettels Kern-Anwendungsszenario ist das Testing. Mit Hilfe von Docker lässt sich Code automatisiert auf unterschiedlichen R Versionen testen. Rocker lässt sich leicht erweitern –  sei es für spezielle Einsatzszenarien oder generelle Anwendungsfälle, die dann über den Docker Hub veröffentlicht werden können.

Ein anderes interessantes Anwendungsfeld von Docker ist die Reproduzierbarkeit von Analysen. Mit Docker lassen sich Skripte für bestimmte R-Versionen inklusive aller verwendeter Pakete in den verwendeten Versionen in einen Container packen und archivieren. Docker bietet damit eine weitere Alternative zu den gängigen Ansätzen Packrat von RStudio und checkpoint von Revolution Analytics.

Statistical analysis of Network data (Gábor Csárdi)

Netzwerke sind heutzutage allgegenwärtig. Beispiele hierfür sind die Kontakte in sozialen Netzwerken wie Facebook oder Twitter, Verlinkungen von einer Internetseite zur anderen oder der Verkehrsflussfluss zwischen Flughäfen. Gábor Csárdi, Maintainer des weitverbreiteten igraph-Pakets, hat mit seinem Tutorial einen spannenden Überblick darüber gegeben, wie sich die vielzähligen Verbindungen und Strukturen innerhalb eines Netzwerks mit den Methoden der Netzwerkanalyse untersuchen lassen.
Zu Beginn des Tutorials wurden verschiedene Datenstrukturen zur Repräsentation von Netzwerkdaten vorgestellt. Im zweiten Teil lag der Fokus auf den Methoden, mit denen sich die Struktur des Netzwerks beschreiben lassen. Welche Knoten sind besonders gut vernetzt? Über wie viele Ecken sind die Knoten in einem Netzwerk miteinander verknüpft? Die Netzwerkanalyse mit R gibt Antworten auf diese Fragestellungen.
Anschließend wurden verschiedene Ansätze präsentiert, mit denen sich Gruppen innerhalb eines Clusters identifizieren lassen. Zum Abschluss gab Csárdi einen kurzen Überblick über die Visualisierung von Netzwerken.

Alles in allem gab das Tutorial einen guten Einblick in die zentralen Begriffe der Netzwerkanalyse und hat Lust auf mehr gemacht.

RHadoop (Andrie de Vries)

Eine Technologie die wohl wie kaum eine andere mit dem Thema Big-Data verknüpft ist, ist das Eco System von Hadoop. Auch bei der useR! Konferenz 2015 widmete sich mit dem Beitrag von Andrie de Vries vom eoda Partner Revolution Analytics ein Tutorial diesem Thema.

Vielen erscheint Hadoop als die Antwort auf die Frage, wie sich zukünftig Big Data Probleme lösen lassen und dabei wirkt es wie ein Buzzword in der Data Science Community: Alle sind daran interessiert, aber angewendet oder durchdrungen haben das Thema die Wenigsten. Gründe für geringe die operative Anwendung von Hadoop könnten die Probleme sein, die de Vries in seinem Tutorial benennt:

  1. Die Daten sind wirklich Big-Big. (Mehrere Terra-Byte)
  2. Der Algorithmus welcher auf den Daten läuft ist äußerst rechenintensiv und skaliert exponentiell mit der Datenmenge.
  3. Der Algorithmus veranlasst ein enormes Wachstum der Daten.

Bei de Vries‘ Vortrag stand insbesondere die Aufgabe des Analysten innerhalb des Hadoop-Ecosystems im Vordergrund. Letztendlich also die Frage: Welcher Logik folgen Map-Reduce Jobs auf einem verteilten System und wie werden diese in R ausgeführt. Darüber hinaus wurden das Hadoop Distributed File System (HDFS) und dessen Steuerung über R vorgestellt.

Durch den Beitrag von De Vries zeigt sich einmal mehr, wie sehr die Zukunftsängste von R der Vergangenheit angehören. Hieß es noch vor einigen Jahren, R sei nicht auf Big Data Probleme vorbereitet, schafft es R nun, den Anforderungen von Big Data auf vielfältige Art und Weise gerecht zu werden. Hadoop ist eine davon. Ein sehr interessanter Beitrag von De Vries und seinem Team!

Efficient statistical consulting using R Workflow for data analysis projects (Peter Baker)    

Der Dozent Peter Baker ist seit mehreren Jahrzenten als Statistcal Consultant tätig. In dieser Tätigkeit stellte er fest, dass eine der größten Herausforderungen in diesem Bereich die Reproduzierbarkeit und Dokumentation der Analysen sei.

Analyse und Reporting werden häufig getrennt voneinander und mit einem komplett unterschiedlichen Toolset (Analysen mit R, SAS oder SPSS. Reporting mit MS Office) ausgeführt. Dieser inkonsistente Prozess ist in hohem Maße fehleranfällig und aufwendig.

In der Arbeit mit R gibt es mit knitr und Rmarkdown Tools um Analyse und Reporting besser miteinander zu verbinden, eine Verbesserung der Reproduzierbarkeit zu erreichen und den Prozess deutlich zu vereinfachen. Einen Nachteil hat Baker dabei aber auch benannt: „Simplicity means you can‘t control everything“. Die Prozessvereinfachung geht mit Einschränkungen in den Formatierungsmöglichkeiten des Reportings einher.

Den Workflow eines Projektes definierte Baker mit folgenden Schritten:

  1. Planung
  2. Dokumentation
  3. Organisation
  4. Analyse
  5. Kommunikation der Ergebnisse
  6. Anpassungen an den vorherigen Schritten

Baker zeigte die Anforderungen an einen guten Workflow und wie man diesen Anforderungen mit Hilfe von R, git und make gerecht werden kann:

Effizienz und Einfachheit lässt sich durch funktionsorientiertes Programmieren erreichen. Nutzt man Code Teile mehrmals, lagert man sie in eine Funktion aus. Funktionen können dann wiederum in Paketen gebündelt werden.

Standardisierung wird möglich durch vordefinierte Ordnerstrukturen. R hält einige Funktionen zum Dateimanagment bereit und es lässt sich schnell eine Funktion erstellen, die eine festgelegte Ordnerstruktur anlegt.

Automatisierung mittels des Tools make. Usprünglich kam make in größeren Softwareprojekten, die in C oder Fortran geschrieben wurden, zum Einsatz. make kann aber auch für Analyse Projekte genutzt werden. Innerhalb einer make-Datei definiert man die Reihenfolge, in der die Dateien ausgeführt werden.

Usability ist erreichbar durch eine gute Dokumentation.

Skalierbarkeit: Das Projekte mit den Daten und Anforderungen wachsen können lässt sich durch eine vorausschauende Planung erreichen. So empfiehlt Baker z.B für das Datenmanagement erstmal den sogenannten Shotgun Approach anzuwenden und so viele Daten wie möglich zu sammeln.

Kollabaration: Hier empfiehlt sich vor allem eine Versionierung, beispielsweise mit git.

Das Tutorial zeigte anschaulich die Herausforderungen denen sich Datenanalysten in ihrer Arbeit stellen müssen und bot interessante Lösungsansätze.

Applied Machine Learning and Efficient Model Selection with mlr (Bernd Bischl und Michel Lang)

mlr von Bernd Bischl et al. ist mehr als ein weiteres R-Paket zum Machine Learning: Es bietet ein ganzes Machine Learning Framework. Kern des Frameworks ist der Prozess:

Problemstellung – Lernen – Prognose – Performance Test – Modelloptimierung

Für jeden Schritt werden umfangreiche Funktionssets zur Verfügung gestellt, die konsistent aufeinander aufbauen. Ein zentrales Feature von mlr ist die Objektorientierung, die bemerkenswerterweise vollständig in S3 umgesetzt ist. Alle Objekte enthalten umfangreiche Attribute, so dass der ML Prozess auf jeder Stufe inspiziert werden kann. Im Paket sind bereits eine große Zahl von Algorithmen aus den Bereichen Klassifikation, Regression, Clustering und Survival Analyse implementiert. Darüber hinaus ist es leicht möglich eigene Algorithmen in das mlr Framework zu integrieren.

Mit mlr lassen sich unterschiedliche Data Mining Ansätze vergleichen und Modell-Parameter automatisch innerhalb definierter Grenzen variieren. Darüber hinaus sind Resampling Methoden wie Bootstrapping oder Cross-Validation tief in das Framework integriert.

mlr ist ein konzeptionell gut durchdachtes Framework, dass den gesamten Data-Mining Prozess abdeckt. Der reiche Funktionsumfang erfordert eine gewisse Einarbeitungszeit, die sich jedoch langfristig bezahlt macht.

Testing R Code (Richard J. Cotton)

Ein bisher vielleicht eher stiefmütterlich behandeltes Thema ist das strukturiere Testen von R Code.

Beim Testen von R -Code gibt es zwei unterschiedliche Anliegen:

  • Sicherstellen, dass der User einer Funktion keinen unerwarteten Input liefert (assertive Testing)
  • Sicherstellen, dass die Funktion an sich richtig geschrieben ist (unit testing), also dass der Entwickler keine Fehler gemacht hat.

In dem Tutorial wurden zwei Pakete vorgestellt, die sich diesen Zielen annehmen. Auf die User orientierte Sicht wird mit dem Paket assertive von Richard J. Cotton eingegangen. Hier werden eine Reihe von Funktionen zur Verfügung gestellt um den gegebenen Input zu überprüfen. Der Funktionsaufruf von assert_is_numeric(x) beispielsweise, hat eine ähnliche Funktionsweise wie der base R Code stopifnot(is.numeric(x)), jedoch mit einem aussagekräftigeren Output.

Während die Funktionen assert_xxxx entweder gar keinen Output oder bei nicht eintreten der Bedingung einen Error liefern, gibt die Funktion is_xxxx einen logischen Wert zurück. Das Paket ist bereits heute sehr umfangreich und wird in Zukunft wahrscheinlich noch erweitert. Neben Datenklassen lassen sich auch Dateneigenschaften abfragen: So zum Beispiel mit is_email_adress() ob es sich bei einem String um eine E-Mail Adresse handelt oder mit is_current_r() ob die aktuellste R Version Verwendung findet.

Die korrekte Funktionsweise eines Pakets lässt sich mit dem Paket testthat von Hadley Wickham auf den Prüfstand stellen. Hier wird überprüft ob die entwickelte Funktion bei definiertem Input den erwarteten Output liefert.

Es wird hauptsächlich auf die Funktion test_that zurückgegriffen. Die Funktion besteht aus zwei Argumenten:

  • Erstes Argument: Definition der Test Hypothese
  • Zweites Argument: Der für den Test der Hypothese notwendige Code

Deutlich gemacht wurde dies von Richie Cotton anhand einer Funktion zum Errechnen der Hypotenuse:

test_that(

„hypotenuse, with inputs x = 5 and y = 12,

returns 13“,

{

expected <- 13

actual <- hypotenuse(5, 12)

expect_equal(actual, expected)

}

)

Bei korrekter Funktionsweise, ergibt das Ergebnis des Funkionsaufrufs hypotenuse(5, 12) 13. Die eigentlich Überprüfung findet dann mit expect_equal() statt.

Auch hier gibt es wieder eine ganze Reihe weiterer Funktionen mit denen sich die Erwartungen überprüfen lassen, beispielsweise kann man mit expect_error() eine erwartete Fehlermeldung überprüfen oder mit expect_null(), die Rückgabe von NULL.

Die entwickelten, definierten Tests lassen sich in eigenen Paketen in dem Ordner tests ablegen und werden beim Kompilieren des Paketes durchgeführt. Die grundlegende Nutzung beider Pakete lässt sich sehr schnell erlernen. Die Herausforderung bei der Nutzung in der Praxis wird es sein, es richtig einzusetzen. Dies hat sich auch in dem sehr praxisnahen Tutorial widergespiegelt.

Introduction to Bayesian Data Analysis with R (Rasmus Bååth)

Ein tolles Tutorial zur bayesschen Statistik, welches sicherlich vielen anwesenden Teilnehmern als eines der Highlights auf der useR! Konferenz 2015 in Erinnerung bleiben wird. Ein sehr informativer Vortrag, der die zentralen Konzepte der bayesschen Statistik überaus anschaulich und unterhaltsam erklärt.

Bååth bediente sich in seiner Einführung in die Bayes Statistik eines populären Problems, das sich mit Hilfe des bayesschen Ansatzes lösen lässt:

Wie schätzt man die Anzahl von Fischen in einem Teich?

Dazu nutzt man eine Methode, die als Capture–Recapture bezeichnet wird. Im ersten Schritt werden dazu einige Fische aus dem Teich gefangen, markiert und anschließend wieder in den Teich ausgesetzt. In einem zweiten Schritt werden wieder einige Fische aus dem Teich gefangen. Diesmal wird ausgezählt, wie viele der erneut gefangenen Fische eine Markierung haben. Nach welcher Logik aufgrund der Auszählung schließlich eine Schätzung erfolgt, ist beinahe intuitiv: Befinden sich relativ viele der markierten Fische im erneuten Fang, spricht dies für eine geringere Anzahl von Fischen im Teich, als wenn nur wenige markierte Fische erneut ins Netz gegangen sind. Anhand vergleichbarer Beispiele und interessanten Übungen wurden den Teilnehmen die Grundlagen der bayesschen Programmierung nähergebracht. Bemerkenswert dabei, wie es Bååth schaffte, weitestgehend auf Formeln und mathematische Herleitungen zu verzichten und über die Anwendung der bayesschen Logik auf die Beispieldaten ein Verständnis bei den Teilnehmers zu entwickeln.

Rasmus Bååth erklärte welche Software für die Erstellung „bayesianischer“ Statistik „State of the Art“ ist und wie sich R in diesem Softwarestack positioniert. Aus R heraus lassen sich über das Paket MCMCpack diverse Methoden bayesscher Inferenz auf simulierte Posterior-Wahrscheinlichkeiten ausführen. BUGS, ebenfalls eine Software zur Berechnung bayesianischer Modelle, verfügt ebenfalls über ein großes Methodenset, welches sich auch aus R heraus ausführen lässt. Jags ein Framework zur Erstellung Bayesscher Modelle welches auf Bugs aufsetzt und eine an R angelehnte Syntax verfügt, kann ebenfalls direkt durch über die R Umgebung angesprochen werden.