2016/02/16

Blog wird auf Eis gelegt

Aufgrund geringer Nachfrage und weil ich momentan mit einem privaten Projekt in der Freizeit einigermaßen ausgelastet bin (-> Steyr-Werke), wird der Blog vorläufig geschlossen.

2015/10/25

Google Cloud Datalab

Google hat ein neues Service in seiner Cloud Platform am Start. Es heißt Google Cloud Datalab, ist noch im Beta-Stadium und setzt auf Jupyter und dem PyData Stack auf. Hier mein erster Eindruck bei einem kurzen Test.

PyData Stack auf Cloud Platform

Das aufsetzen des Datalabs erfolgt automatisiert, dauert aber seine Zeit (rund 10 min lt. Notification). Es wird eigenartigerweise als Google App Engine Anwendung erstellt und nicht, wie man meinen könnte, als Compute Engine Projekt. Standardmäßig läuft es aktuell auf einer n1-standard-1 Maschine (1 Kern, 3.75GB RAM) mit einem 100GB Laufwerk. Weitere Maschinen und Laufwerke können in den Verbund eingehängt werden, wenn mehr Rechenleistung bzw. Speicherkapazität nötig ist. Die Einbindung der Google-eigenen Storage Dienste ist natürlich unkompliziert möglich und auch sinnvoll - neben der Skalierbarkeit der Infrastruktur mEn. der Hauptgrund warum es sich überhaupt nachzudenken lohnt, die Analysen in die Google Cloud auszulagern. Der Preis für das Service ist aktuell (im Beta-Stadium) noch überschaubar. Man zahlt für die im Projekt verwendete Infrastruktur (Instanzen) und Services (zB. BigQuery), das Datalab ansich ist (noch) kostenlos - was sich möglicherweise nach dem Beta-Stadium ändern wird.

Jupyter Notebook: Anomaly Detection Beispiel
Das Interface für das Datalab ist ein Jupyter Notebook (siehe Bild). Die essentiellen Bibliotheken aus dem PyData Stack sind vorinstalliert und müssen nur mehr bei Bedarf importiert werden. Das Notebook kann genauso wie bei einer lokalen Installation benutzt werden. Auch die interaktiven Visualisierungsfähigkeiten, wie man es von lokalen Notebooks kennt, sind in der Cloud auf selben Wege zu realisieren.  Neben bisschen Dokumentation und Tutorials für das Verwenden des Notebooks und Einbinden von Storage Diensten, werden auch einige Beispiele standardmäßig im Home Ordner zur Verfügung gestellt. Das Bild ist beispielsweise aus dem Anomalie-Erkennungs-Beispiel. 

Grundsätzlich ist mMn. das Google Cloud Datalab ein attraktives Angebot, um Datenanalysen und -visualisierungen in der Cloud mit dem PyData Stack durchzuführen, da man sich einiges an Installations- und Netzwerkadministrationsaufwand sparen kann. Interssant wird natürlich wie die Preisgestaltung dann im Alpha-Stadium sein wird. Vor allem für Data Science Teams, die nicht an einem Standort gemeinsam arbeiten, ist das Datalab eine überlegenswerte Möglichkeit. An einem Einsatz im Unternehmen (zumindest wenn es seinen Sitz in der EU hat) ist derzeit aber noch nicht zu denken. Das liegt aber weniger an der bewährten Technologie aus dem Python Ökosystem selbst, sondern eher an der rechtlichen Situation derzeit in Europa. Die zentrale Instanz wird nämlich in der US Central Region ausgeführt, was eine Verwendung durch europäische Unternehmen im operativen Einsatz derzeit leider unmöglich macht. Auch das sollte nach dem Beta-Stadium gelöst sein und die Region frei wählbar sein.

2015/08/05

MOOC Scalable ML

Der zweite Data Science MOOC unter Verwendung von Apache Spark ist jetzt auch zu Ende gegangen. Wie schon im letzten Post erwähnt, handelt er von skalierbaren maschinellem Lernen. Obwohl die sinnvolle Vertiefung zum Kurs "Introduction to Big Data with Apache Spark", konnte dieser MOOC nicht mal annähernd an dessen Qualität anschliessen.

Theorie

Der Vortrag über die vorgestellten Methoden (im Grunde waren das nur Lineare und Logistische Regression und Faktorenanalyse) war wirklich miserabel. Die Konzepte dahinter wurden, wenn überhaupt, nur kurz erwähnt und auch die Skalierbarkeit kam viel zu kurz. Dafür wurde mit Formeln um sich geworfen und Matrix-Rechenoperationen bis zum Exzess praktiziert. Natürlich auch wichtig, aber wenn schon nur so wenige Methoden vorstellt werden, hätten die zumindest auch leichter verständlich und mit ein paar Beispielen aus der Praxis präsentiert werden können. Der einzige Lichtblick war die Woche 2 - das lag aber nur daran, dass darin in Apache Spark eingeführt wurde und nämlich mit Vorträgen aus dem Vorgängerkurs "Introduction to Big Data with Apache Spark" (für Absolventen wie mich also eine Woche zum überspringen).

Praxis

Die praktisch ausgerichteten Labs waren zwar um Welten besser als die Vorträge, aber auch diese konnten mein Frustrationslevel bezüglich diesem Kurses nicht großartig senken. Man merkte zwar, dass die Ersteller aus den Fehlern der ersten Labs im Vorgänger-MOOC gelernt haben, es schlichen sich jedoch dennoch einige didaktische Fehler ein. Es ist z.B. mühsam, wenn ein Fehler am Ende des Labs auftritt, weil eine Funktion am Anfang nicht gestimmt hat (obwohl ursprünglich damit alle Test einwandfrei liefen) - so geschehen im Lab 4. Alles in Allem ein MOOC den man sich getrost sparen kann, um Zeit und Energie für bessere Lehrmaterialien aufzuwenden.

2015/07/04

MOOC über Big Data & Apache Spark - Teil 3

...Fortsetzung von Teil 2...

Die letzten beiden Wochen des MOOCs sind nun vorbei. Das vorgetragene Material in der vierten Woche handelte von Exploration und Datenqualität. Zwei Themen, die mMn in einer früheren Phase des Kurses besser aufgehoben gewesen wären. Der Inhalt beschränkte sich auch sehr auf Oberflächlichkeiten der beiden Bereiche. Hätte einiges an Zeit gespart, die Videos zu überspringen. Auch das Lab in dieser Woche hätte besser aufbereitet werden können. Die Fragestellung war zwar spannend -Text Analyse auf Produkt-Datensätze von Google und Amazon anwenden -, die Anleitung war aber großteils schwer verständlich und der vorgegebene Lösungsweg mühsam nachzuvollziehen. Die vorgegebenen Hilfsfunktionen, die mit wenig Code zu ergänzen waren, kosteten im Endeffekt mehr Zeit und Nerven, als wenn die komplette Programmlogik neu geschrieben hätte werden müssen. Dieses Lab kostete mir auch die Möglichkeit, 100% der Punkte für den Kurs zu bekommen, da ich die eine Hilfsfunktion bei Frage 4f nicht vor dem Ende der Soft-Deadline lösen konnte. Als ich die Lösung dann endlich hatte, wurden wegen der verspäteten Abgabe Strafpunkte abgezogen. Ein A wird sich dennoch ausgehen ;)

Die fünfte Woche war dann wieder entspannter. Sie bestand nur mehr aus dem letzen Lab des Kurses, das als Übergang zum kommenden MOOC von BerkeleyX, Scalable Machine Learning, gesehen werden kann. Das Lehrmaterial war wieder auf gewohnt hohem didaktischen Niveau und war wirklich lehrreich & spannend. Es ging um die Möglichkeiten mit Spark Maschinelles Lernen umzusetzen, was Dank dessen MLLib Bibliothek auch kein Hexenwerk (nichtmal auf verteilten Systemen) ist. Die Aufgabe beinhaltete, basierend auf einer Teilmenge von Filmbewertungen von MovieLens, ein Vorhersagemodell für Bewertungen, auf Basis von Collaborative Filtering, zu bauen. Am Schluß konnte man ein paar Filme selbst bewerten und erhielt dann eine Vorhersage für jene 20 Filme, die das Modell vorhersagt, dass sie einem am besten gefallen werden (also, dass man sie am besten bewerten wird). Basierend auf nur 10 Filme, die ich in der Aufgabe bewertet habe, waren meine Ergebnisse verblüffend treffsicher (eingedenk der limitierten Daten und Feature Basis):
Ergebnisse von meinem Modell
Die mir bekannten Filme aus der Liste, würde ich tatsächlich alle sehr hoch bewerten. Von einigen habe ich die Story auf Wikipedia gesucht - und sollten mir eigentlich auch zusagen. Somit hatte der MOOC einen zusätzlichen Bonus, nämlich die Einsicht, dass ich mir mal Citizen Kane anschauen sollte ;)

Zusammenfassung

Da der MOOC nun beendet ist, ein kurzes Resümee. Abgesehen von kleineren Schwächen in Woche 4, war "Introduction to Big Data with Apache Spark" ein sehr gut gemachter Kurs. Ich würde sogar sagen, der beste MOOC, den ich bislang -egal auf welcher Plattform- belegt habe. Der vorgetragene Inhalt wurde verständlich aufbereitet und die praktischen Aufgaben hatten definitiv Realitätsbezug - kamen also nicht aus den typischen "Data Science"- und "Machine Learning"-Schubladen wie bei so vielen anderen Lehrmaterialien, die in der Fachliteratur zu finden sind. Im Grunde war das Durcharbeiten des Materials des Kurses sogar lehrreicher als die beiden von mir glesenen Bücher über Spark (Learning Spark: Lightning-Fast Big Data Analysis bzw. Advanced Analytics with Spark: Patterns for Learning from Data at Scale). Insofern freue ich mich jetzt schon sehr auf den kommenden Kurs von BerkeleyX auf edX über Maschinelles Lernen mit Spark, der jetzt auch schon gestartet ist. Praktisch dabei, dass Teile von "Introduction to Big Data with Apache Spark" auch wiederverwendet werden können. Man erspart sich somit eine neue virtuelle Maschine herunter zu laden und das Material der zweiten Woche ist aus dem vorhergegangen MOOC übernommen (inkl. des LABs). Über die Erfahrungen bei diesem MOOC werde ich dann auch die nächsten Wochen mal berichten. 

2015/06/18

MOOC über Big Data & Apache Spark - Teil 2

...Fortsetzung von Teil 1...

3. Woche - Datenstrukturen

In dieser Woche ging es um Datenmanagement. Die beiden Lektionen handelten von strukturierten bzw. semi-strukturierten Daten. Auch die Performance beim IO unterschiedlicher Dateiarten wurde angesprochen.
Lektion 5, über semi-strukturierte Daten, handelte vor allem um tabellarische Strukturen und dem Zusammenspiel von Pandas Dataframes mit Spark. Als Beispiel wurden Server-Log-File Analysen angesprochen und an einer solchen, konnte man sich dann auch im Lab gleich selbst versuchen - konkret an den monatlichen HTTP Requests an einem Server der NASA. Der Schwierigkeitsgrad der Aufgaben wurde schon deutlich erhöht, dafür waren die Aufgabenstellungen auch ganz interessant, weil realitätsnah. 
Die zweite Lektion der Woche handelte von strukturierten Daten. Das war dann natürlich sehr SQL-lastig und alle möglichen joins mit Spark RDD's wurden vorgestellt.

...to be continued...

2015/06/08

MOOC über Big Data & Apache Spark - Teil 1

In diesem Monat war es endlich so weit und der erste von zwei angekündigten MOOCs über Apache Spark wurde auf edX veröffentlicht. Ersterer hat den Titel "Introduction to Big Data with Apache Spark" und meine Erfahrungen dabei werde ich hier teilen. Der Zweite handelt von Maschinellem Lernen mit Spark und wird Ende des Monats starten. Da ich mich in letzter Zeit öfter mal nebenbei mit Spark zu Weiterbildungszwecken beschäftigt habe (Learning Spark: Lightning-Fast Big Data Analysis gelesen und Advanced Analytics with Spark: Patterns for Learning from Data at Scale gerade durcharbeite), passen die MOOCs da auch gerade gut dazu.

1. Woche - Introduction 

Der Einführungskurs in Big Data Analyse und Spark ist letzte Woche gestartet und soll 5 Wochen lange dauern. In Beispielen der Lektionen und Programmieraufgaben wird PySpark (die Python-API von Spark) anstatt Scala verwendet.
In den beiden ersten Lektionen ging es darum, Verständnis zu schaffen, was Big Data ist und welche datenwissenschaftliche Methoden es gibt. Der Inhalt in den Lektionen ist klar strukturiert und wird von Anthony D. Joseph verständlich präsentiert. Da es sich um eine Einführung handelt und die Themen generell komplex und unklar abgegrenzt sind, bleibt es verständlicherweise bei Oberflächlichem.
Die Beurteilung von TeilnehmerInnen erfolgt zu einem kleinen Teil über kurze MC Fragen in den Lektionen und vor allem über die wöchentlichen Labs, in denen programmiert wird. Besonders positiv hervor zu heben ist dabei das Design der Labs. Um die verteilte Ausführung zu simulieren, wird eine bereitgestellte virtuelle Maschine, welche die relevanten Programme ausführt, als Worker installiert und als Treiberprogramm laufen die Labs als IPython Notebooks im lokalen Browser. Der bearbeitete Programmcode wird als Python Skript gepeichert und dann auf edX hochgeladen, um den Code durch einen Autograder überprüfen zu lassen. Die Einrichtung des beschriebenen Setups für die Labs und das Durchführen einer Test Benotung ist dann auch die zu erledigende Aufgabe in der ersten Woche.

2. Woche - Getting started

Die zweite Woche startet mit einer eher theoretischen Lektion über die Voraussetzungen für Computersysteme, um mit Big Data umgehen zu können und wie diese in Spark umgesetzt sind. In der vierten Lektion wird dann endlich in die Logik von Spark eingeführt. RDDs, Transformations, Actions, das Daten Caching, Key-Value RDDs und besondere Variable (Broadcast V und Accumulatoren) werden erklärt.
Im Lab für die zweite Woche kann zuerst ein (unbenotetes) Tutorium absolviert werden. In der eigentlichen Aufgabe werden die Anforderungen graduell gesteigert und es muss ein WordCount Skript zum zählen von Wörtern in einem Textdokument (Texte von Shakespear) erstellt werden. Das Lab versucht praxisnah zu sein, was auch überwiegend gelingt. Die große Herausforderung, an geeignete Daten zu kommen, wird nicht umgesetzt, dafür muss der vorhandene Datensatz aber (zumindest rudimentär) bereinigt und effizient weiterverarbeitet werden. Überhaupt wird bislang in diesem MOOC ein Fokus auf die effiziente Verteilung, Analyse und Verarbeitung der Daten gelegt, was sehr zu begrüßen ist. Sind alle Aufgaben gelöst, bekommt man die 15 häufigst verwendeten Wörtern in Shakespear-Texten präsentiert - da stop words vorher nicht entfernt werden mussten, sind es dann auch die üblichen Verdächtigen ;)

...to be continued... 

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.