tag:blogger.com,1999:blog-38238828976702388232024-03-14T04:11:56.959+01:00Shed01Beiträge zu IT-gestützter Sozialforschung und DatenwissenschaftdonK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comBlogger32125tag:blogger.com,1999:blog-3823882897670238823.post-77379060968217596492016-02-16T15:57:00.002+01:002016-02-16T15:57:50.592+01:00Blog wird auf Eis gelegtAufgrund geringer Nachfrage und weil ich momentan mit einem privaten Projekt in der Freizeit einigermaßen ausgelastet bin (-> <a href="http://www.steyr-werke.at/" target="_blank">Steyr-Werke</a>), wird der Blog vorläufig geschlossen.donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-15870272643763670442015-10-25T17:01:00.001+01:002015-11-03T10:43:09.574+01:00Google Cloud Datalab<div style="text-align: justify;">
Google hat ein neues Service in seiner <a href="https://cloud.google.com/" target="_blank">Cloud Platform</a> am Start. Es heißt <a href="https://datalab.cloud.google.com/" target="_blank">Google Cloud Datalab</a>, ist noch im Beta-Stadium und setzt auf <a href="http://jupyter.org/" target="_blank">Jupyter</a> und dem PyData Stack auf. Hier mein erster Eindruck bei einem kurzen Test.</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
PyData Stack auf Cloud Platform</h2>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-fcyY6etVwJY/Viz2Af0yHVI/AAAAAAAAB4o/HS6NUIj_YeQ/s1600/Auswahl_001.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="266" src="http://4.bp.blogspot.com/-fcyY6etVwJY/Viz2Af0yHVI/AAAAAAAAB4o/HS6NUIj_YeQ/s400/Auswahl_001.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Jupyter Notebook: Anomaly Detection Beispiel</td></tr>
</tbody></table>
<div style="text-align: justify;">
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. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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.</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-70205886258665784362015-08-05T16:22:00.001+02:002015-08-05T16:22:45.030+02:00MOOC Scalable ML<div style="text-align: justify;">
Der zweite Data Science MOOC unter Verwendung von Apache Spark ist jetzt auch zu Ende gegangen. Wie schon im <a href="http://shed01.blogspot.co.at/2015/07/mooc-uber-big-data-apache-spark-teil-3.html" target="_blank">letzten Post</a> erwähnt, handelt er von <a href="https://www.edx.org/course/scalable-machine-learning-uc-berkeleyx-cs190-1x" style="text-align: justify;" target="_blank">skalierbaren maschinellem Lernen</a>. Obwohl die sinnvolle Vertiefung zum Kurs "<a href="https://www.edx.org/course/introduction-big-data-apache-spark-uc-berkeleyx-cs100-1x" target="_blank">Introduction to Big Data with Apache Spark</a>", konnte dieser MOOC nicht mal annähernd an dessen Qualität anschliessen.</div>
<div style="text-align: justify;">
<br /></div>
<h4 style="text-align: justify;">
Theorie</h4>
<div style="text-align: justify;">
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<span style="text-align: justify;"> Vorgängerkurs "</span><a href="https://www.edx.org/course/introduction-big-data-apache-spark-uc-berkeleyx-cs100-1x" style="text-align: justify;" target="_blank">Introduction to Big Data with Apache Spark</a><span style="text-align: justify;">" (für Absolventen wie mich also eine Woche zum überspringen).</span></div>
<div style="text-align: justify;">
<br /></div>
<h4 style="text-align: justify;">
Praxis</h4>
<div style="text-align: justify;">
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.</div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-32247922886580355692015-07-04T20:32:00.001+02:002015-10-10T14:41:10.725+02:00MOOC über Big Data & Apache Spark - Teil 3<i>...Fortsetzung von <a href="http://shed01.blogspot.co.at/2015/06/mooc-uber-big-data-apache-spark-teil-2.html" target="_blank">Teil 2</a>...</i><br />
<br />
<div style="text-align: justify;">
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 ;)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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, <a href="https://www.edx.org/course/scalable-machine-learning-uc-berkeleyx-cs190-1x" target="_blank">Scalable Machine Learning</a>, 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 <a href="https://spark.apache.org/mllib/" target="_blank">MLLib</a> 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):</div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: justify;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-dSIBuKlqYoE/VZgeefJJgmI/AAAAAAAABsw/9HS_S6HUOBg/s1600/Auswahl_001.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="187" src="http://3.bp.blogspot.com/-dSIBuKlqYoE/VZgeefJJgmI/AAAAAAAABsw/9HS_S6HUOBg/s400/Auswahl_001.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Ergebnisse von meinem Modell</td></tr>
</tbody></table>
<div style="text-align: justify;">
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 ;)</div>
<div style="text-align: justify;">
<br /></div>
<h4 style="text-align: justify;">
Zusammenfassung</h4>
<div style="text-align: justify;">
Da der MOOC nun beendet ist, ein kurzes Resümee. Abgesehen von kleineren Schwächen in Woche 4, war <span style="text-align: justify;">"</span><a href="https://www.edx.org/course/introduction-big-data-apache-spark-uc-berkeleyx-cs100-1x" style="text-align: justify;" target="_blank">Introduction to Big Data with Apache Spark</a><span style="text-align: justify;">" 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 </span>über Spark (<a href="http://www.amazon.de/gp/product/1449358624/ref=as_li_tl?ie=UTF8&camp=1638&creative=19454&creativeASIN=1449358624&linkCode=as2&tag=shed01-21&linkId=RWILXIGCAIBDKY6N">Learning Spark: Lightning-Fast Big Data Analysis</a><img alt="" border="0" src="http://ir-de.amazon-adsystem.com/e/ir?t=shed01-21&l=as2&o=3&a=1449358624" height="1" style="border: none !important; margin: 0px !important;" width="1" /> bzw. <a href="http://www.amazon.de/gp/product/1491912766/ref=as_li_tl?ie=UTF8&camp=1638&creative=19454&creativeASIN=1491912766&linkCode=as2&tag=shed01-21&linkId=PKS6TJIQ5ADHORAY">Advanced Analytics with Spark: Patterns for Learning from Data at Scale</a>). Insofern freue ich mich jetzt schon sehr auf den kommenden Kurs von BerkeleyX auf edX über <a href="https://www.edx.org/course/scalable-machine-learning-uc-berkeleyx-cs190-1x" target="_blank">Maschinelles Lernen mit Spark</a>, der jetzt auch schon gestartet ist. Praktisch dabei, dass Teile von "<a href="https://www.edx.org/course/introduction-big-data-apache-spark-uc-berkeleyx-cs100-1x" target="_blank">Introduction to Big Data with Apache Spark</a>" 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. </div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-61884262599409795492015-06-18T13:48:00.001+02:002015-06-18T13:48:53.468+02:00MOOC über Big Data & Apache Spark - Teil 2<i>...Fortsetzung von <a href="http://shed01.blogspot.co.at/2015/06/mooc-uber-big-data-apache-spark-teil-1.html" target="_blank">Teil 1</a>...</i><br />
<i><br /></i>
<h3>
3. Woche - Datenstrukturen</h3>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
Lektion 5, über semi-strukturierte Daten, handelte vor allem um tabellarische Strukturen und dem Zusammenspiel von <a href="http://pandas.pydata.org/" target="_blank">Pandas</a> 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 <a href="http://ita.ee.lbl.gov/html/contrib/NASA-HTTP.html" target="_blank">Server der NASA</a>. Der Schwierigkeitsgrad der Aufgaben wurde schon deutlich erhöht, dafür waren die Aufgabenstellungen auch ganz interessant, weil realitätsnah. </div>
<div style="text-align: justify;">
Die zweite Lektion der Woche handelte von strukturierten Daten. Das war dann natürlich sehr SQL-lastig und alle möglichen <i>joins</i> mit Spark RDD's wurden vorgestellt.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<i>...to be continued...</i></div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-29277665079931842892015-06-08T22:47:00.000+02:002015-06-09T12:26:35.179+02:00MOOC über Big Data & Apache Spark - Teil 1<div style="text-align: justify;">
In diesem Monat war es endlich so weit und der erste von zwei angekündigten MOOCs über <a href="https://spark.apache.org/" target="_blank">Apache Spark</a> wurde auf <a href="https://www.edx.org/" target="_blank">edX</a> veröffentlicht. Ersterer hat den Titel "<a href="https://www.edx.org/course/introduction-big-data-apache-spark-uc-berkeleyx-cs100-1x" target="_blank">Introduction to Big Data with Apache Spark</a>" und meine Erfahrungen dabei werde ich hier teilen. Der Zweite handelt von <a href="https://www.edx.org/course/scalable-machine-learning-uc-berkeleyx-cs190-1x" target="_blank">Maschinellem Lernen mit Spark</a> und wird Ende des Monats starten. Da ich mich in letzter Zeit öfter mal nebenbei mit Spark zu Weiterbildungszwecken beschäftigt habe (<a href="http://www.amazon.de/gp/product/1449358624/ref=as_li_tl?ie=UTF8&camp=1638&creative=19454&creativeASIN=1449358624&linkCode=as2&tag=shed01-21&linkId=RWILXIGCAIBDKY6N">Learning Spark: Lightning-Fast Big Data Analysis</a><img alt="" border="0" src="http://ir-de.amazon-adsystem.com/e/ir?t=shed01-21&l=as2&o=3&a=1449358624" height="1" style="border: none !important; margin: 0px !important;" width="1" /> gelesen und <a href="http://www.amazon.de/gp/product/1491912766/ref=as_li_tl?ie=UTF8&camp=1638&creative=19454&creativeASIN=1491912766&linkCode=as2&tag=shed01-21&linkId=PKS6TJIQ5ADHORAY">Advanced Analytics with Spark: Patterns for Learning from Data at Scale</a><img alt="" border="0" src="http://ir-de.amazon-adsystem.com/e/ir?t=shed01-21&l=as2&o=3&a=1491912766" height="1" style="border: none !important; margin: 0px !important;" width="1" /> gerade durcharbeite), passen die MOOCs da auch gerade gut dazu.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
1. Woche - Introduction </h3>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
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 <a href="http://bnrg.cs.berkeley.edu/~adj/" target="_blank">Anthony D. Joseph</a> 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.</div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
2. Woche - Getting started</h3>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
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 <i>stop words</i> vorher nicht entfernt werden mussten, sind es dann auch die üblichen Verdächtigen ;)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<i>...to be continued... </i></div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-57280191026968535822015-05-24T15:31:00.002+02:002015-05-24T15:36:38.714+02:00Storytelling mit Odyssey.js<div style="text-align: justify;">
Mit <a href="http://odyssey.js/" target="_blank">Odyssey.js</a> 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.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Kartenbasierte Geschichten</h3>
<div style="text-align: justify;">
Odyssey.js ist ein Open Source Projekt von <a href="https://cartodb.com/" target="_blank">CartoDB</a> 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.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Beispielgeschichte</h3>
<div style="text-align: justify;">
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 <a href="http://maps.stamen.com/watercolor/" target="_blank">Watercolor</a> Style von <a href="http://stamen.com/" target="_blank">Stamen Design</a> 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.</div>
<div style="text-align: justify;">
Hier der <span style="font-size: large;"><a href="http://bl.ocks.org/anonymous/raw/62f1cc988ce2dae1ac5c/" target="_blank">Link</a> </span>zur Geschichte über den Weg meines Lieblingskaffees.</div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-77948680403949292912015-05-20T21:01:00.001+02:002015-05-20T21:04:22.511+02:00Spyre - Framework für Python Datenprojekte<span style="text-align: justify;">Was dem Python Daten Ökosystem bislang noch fehlt, ist ein Modul um webfähige Datenprodukte, schnell und mit wenig Aufwand, zu erstellen. </span><a href="https://github.com/adamhajari" style="text-align: justify;" target="_blank">Adam Hajari</a><span style="text-align: justify;"> hat einen ersten Versuch unternommen, das zu ändern und begann die Entwicklung von </span><a href="https://github.com/adamhajari/spyre" style="text-align: justify;" target="_blank">Spyre</a><span style="text-align: justify;">. Um dieses Framework zu testen, habe ich eine kleine Beispielapplikation geschrieben, das im </span><a href="https://github.com/donK23/shed01" style="text-align: justify;" target="_blank">Repo</a><span style="text-align: justify;"> für diesen Blog unter den </span><a href="https://github.com/donK23/shed01/tree/master/PyBeispiele" style="text-align: justify;" target="_blank">Python Beispielen</a><span style="text-align: justify;"> zu finden ist.</span><br />
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Daten von Strava</h3>
<div style="text-align: justify;">
Für das Beispiel habe ich ein paar Daten zu meinen sportlichen Aktivitäten in diesem Jahr von Strava herunter geladen. Die <a href="https://strava.github.io/api/" target="_blank">Strava API</a> ist zwar nicht gerade ein Highlight in Bezug auf UX beim Datenabgreifen, aber es gibt zumindest ein (selten schlecht dokumentiertes) <a href="http://pythonhosted.org/stravalib/" target="_blank">Python Modul</a>, 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 <a href="https://github.com/donK23/shed01/tree/master/PyBeispiele/SportActivities" target="_blank">Beispiel Verzeichnis </a>zu finden. Sie enthalten die Art der Aktivität, die Startzeit, Dauer und Distanz.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Spyre Apps</h3>
<div style="text-align: justify;">
Nach der Installation von Spyre (das Paket heisst dataspyre bei pip) und dem Download des <a href="https://github.com/adamhajari/spyre" target="_blank">master Repos</a> des Projekts kann gleich mit dem Testen der Beispielanwendungen begonnen werden. Diese sind sehr auf Plots fixiert, es ist z.B. auch möglich <a href="http://bokeh.pydata.org/" target="_blank">Bokeh Plots</a> zu integrieren, aber auch diverse <a href="http://matplotlib.org/" target="_blank">Matplotlib</a> 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.<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-OKwdaKqMJpQ/VVyrqP5pCvI/AAAAAAAABsA/yUNDyb3Jj2c/s1600/Auswahl_002.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img alt="Radfahr Daten in Browser App" border="0" height="224" src="http://1.bp.blogspot.com/-OKwdaKqMJpQ/VVyrqP5pCvI/AAAAAAAABsA/yUNDyb3Jj2c/s320/Auswahl_002.png" title="" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Daten App im Browser</td></tr>
</tbody></table>
<br />
Von den Beispielen im Spyre Repo habe ich dann auch meine Beispielanwendung abgeleitet (hier ist der <a href="https://github.com/donK23/shed01/tree/master/PyBeispiele/SportActivities" target="_blank">Code</a> 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 <a href="http://pandas.pydata.org/" target="_blank">Pandas</a> 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.</div>
<div style="text-align: justify;">
<br />
Ein Spyre Server basiert übrigens auf dem <a href="http://www.cherrypy.org/" target="_blank">CherryPy</a> 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.</div>
<div align="center">
<blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-version="4" style="background: #FFF; border-radius: 3px; border: 0; box-shadow: 0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width: 450px; padding: 0; width: -webkit-calc(100% - 2px); width: 99.375%; width: calc(100% - 2px);">
<div style="padding: 8px;">
<div style="background: #F8F8F8; line-height: 0; margin-top: 40px; padding: 50% 0; text-align: center; width: 100%;">
<div style="background: url(data:image/png; display: block; height: 44px; margin: 0 auto -44px; position: relative; top: -22px; width: 44px;">
</div>
</div>
<div style="margin: 8px 0 0 0; padding: 0 4px;">
<a href="https://instagram.com/p/2Qvh2RlTfG/" style="color: black; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px; text-decoration: none; word-wrap: break-word;" target="_top">#spyre app served by #raspberrypi2 🙌</a></div>
<div style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; line-height: 17px; margin-bottom: 0; margin-top: 8px; overflow: hidden; padding: 8px 0 7px; text-align: center; text-overflow: ellipsis; white-space: nowrap;">
Ein von @datadonk23 gepostetes Foto am <time datetime="2015-05-04T13:25:28+00:00" style="font-family: Arial,sans-serif; font-size: 14px; line-height: 17px;">4. Mai 2015 um 6:25 Uhr</time></div>
</div>
</blockquote>
</div>
<script async="" defer="" src="//platform.instagram.com/en_US/embeds.js"></script>
<br />
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Zusammenfassung</h3>
<div style="text-align: justify;">
Mit Spyre ist es möglich, webfähige Datenprodukte durchgehend in Python zu erstellen, ohne auf Übersetzungen in eine andere Sprache (wie zB bei <a href="https://plot.ly/" target="_blank">plot.ly</a>) und den damit verbundenen Einschränkungen, angewiesen zu sein. Die Funktionalität und Usability ist aber im Vergleich zum R Ökosystem mit <a href="http://shiny.rstudio.com/" target="_blank">Shiny</a> 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 <a href="https://www.shinyapps.io/" target="_blank">ShinyApps.io</a>, 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.</div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-47405476030822167832015-03-24T13:19:00.000+01:002015-03-24T13:26:39.181+01:00Geo-App: Schlösser und Burgen in OÖ<div style="text-align: justify;">
Als Beispiel-Projekt habe ich eine Geo-App entwickelt. welche den Standort von <i>Schlösser und Burgen in Oberösterreich</i> visualisiert. Sie dient zur Ergründung solcher Bauwerke in der eigenen Umgebung, kann auch Informationen beim Wandern bereit stellen oder zur Planung von Ausflügen verwendet werden.<br />
Dieser Eintrag wird den Entstehungsprozess thematisieren. Die App selbst ist auf folgender Seite erreichbar:<br />
<br /></div>
<div style="text-align: center;">
<a href="http://burschlooe-datensensorium.rhcloud.com/" target="_blank"><span style="font-size: large;">http://burschlooe-datensensorium.rhcloud.com</span></a></div>
<br />
<h3>
Daten von Wikipedia</h3>
<div style="text-align: justify;">
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-Ed8tnSSeBH4/VQ2eH4bBbQI/AAAAAAAABpI/ejra5qNLPMQ/s1600/IMG_7092.JPG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="http://3.bp.blogspot.com/-Ed8tnSSeBH4/VQ2eH4bBbQI/AAAAAAAABpI/ejra5qNLPMQ/s1600/IMG_7092.JPG" height="200" width="133" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: xx-small;">Burg Ruttenstein, </span><i><span style="font-size: xx-small;">Foto © S. Wiesinger, 2014</span></i></td></tr>
</tbody></table>
Auf das touristisch verwertbare Thema, <i>Schlösser und Burgen</i>, bin ich durch einen <a href="https://www.data.gv.at/katalog/dataset/ooe-211B25DD129C492C9BE69C9CA13C42AD" target="_blank">offenen Datensatz</a> des Landes OÖ gekommen. Wie sich jedoch erst heraus stellte, fehlten in diesem Datensatz eine größere Anzahl an Objekten, insbesonders (aber nicht nur) die touristisch interessanten Burgruinen. Aus den Metadaten war das so leider auch nicht ersichtlich. Genau so unzuverlässig und halbherzig dokumentiert sollten Open Data eigentlich nicht sein.<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-T0kVTW5Vz40/VRFQjyERKLI/AAAAAAAABqo/gAw3cPNHsVM/s1600/IMG_20150324_124401.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="http://1.bp.blogspot.com/-T0kVTW5Vz40/VRFQjyERKLI/AAAAAAAABqo/gAw3cPNHsVM/s1600/IMG_20150324_124401.jpg" height="200" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: xx-small;">Schloss Lamberg, Foto <a href="http://creativecommons.org/licenses/by/4.0/" target="_blank">CC-BY 4.0 Int.</a> T.Treml, 2015</span></td></tr>
</tbody></table>
Als Alternative habe ich mich für die Verwendung von Daten von Wikipedia entschieden. Dazu habe ich ein kleines Script geschrieben, das die jeweilgen Namen der Bauwerke, einen Link zur jeweiligen Wikipedia Seite (als Information für die Pop-Ups in der App) und die Geokoordinaten extrahiert. Die Verortung ist zwar weniger genau, als jene im Datensatz des Landes, jedoch ist die Anzahl der Objekte umfassender, insbesonders die erwähnten Ruinen kommen hierbei auch vor. Darüber hinaus klassifiziert das Script die Bauwerke noch, um eine Unterscheidung zwischen Burgen und Schlösser bei der Visualisierung zu ermöglichen. Bei den von den 324 <a href="http://de.wikipedia.org/wiki/Liste_von_Burgen_und_Schl%C3%B6ssern_in_%C3%96sterreich#Ober.C3.B6sterreich" target="_blank">aufgelisteten Objekten</a>, konnten nur 5 wegen mangelnder Geoverortung oder nicht Verfolgbarkeit der Links nicht verwendet werden. Im Vergleich dazu umfasst der Datensatz des Landes nur 240 Objekte.<br />
Um Oberösterreich hervor zu heben, habe ich wieder auf einen <a href="https://doris.ooe.gv.at/" target="_blank">DORIS</a> Datensatz vom Land OÖ zurück gegriffen. Dieser ist zwar stark generalisiert, was aber im Kontext dieser App ein Vorteil ist, da Speicherplatz und Ladezeiten dadurch vermindert werden. Um Zweiteres zu verbessern wird er vor dem Rendern im Browser auch noch weiter generalisiert.<br />
<br /></div>
<div style="text-align: justify;">
Die extrahierten Daten wurden dann in QGIS geoprozessiert und in ein Datenmodell transformiert. Dieses wurde mit MongoDB umgesetzt, da dessen Schemalosigkeit die Entwicklung vereinfachte und die damit mögliche Geoindexierung effiziente Abfragen versprach.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-pLmq56mkohA/VQ6fwsTGKnI/AAAAAAAABpo/F64Jsw-aIF8/s1600/Auswahl_002.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://4.bp.blogspot.com/-pLmq56mkohA/VQ6fwsTGKnI/AAAAAAAABpo/F64Jsw-aIF8/s1600/Auswahl_002.png" height="323" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Übersicht Karte</td></tr>
</tbody></table>
<h3>
Flask-App mit Bootstrap Frontend</h3>
</div>
<div style="text-align: justify;">
Das Backend der App basiert auf dem Python Framework Flask und wie erwähnt MongoDB. Die Architektur folgt einem vereinfachten MVC Modell.<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-fvw6sTR7vM0/VQ6gDo6PEaI/AAAAAAAABpw/nZYKJl73kL0/s1600/Auswahl_003.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="http://1.bp.blogspot.com/-fvw6sTR7vM0/VQ6gDo6PEaI/AAAAAAAABpw/nZYKJl73kL0/s1600/Auswahl_003.png" height="183" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Marker mit Pop-Up</td></tr>
</tbody></table>
Das Frontend wurde auf dem Bootstrap Framework aufgesetzt, vor allem um die App auch responsiv zu gestalten. Das ist besonders für den Anwendungsfall der mobilen Abfrage von Objekten nötig, beispielsweise wenn sich ein/e Benutzer/in beim Wandern oder einem Spaziergang befindet und erfahren möchte, wo sich die nächste Burg oder das nächste Schloss befindet. Grundsätzlich nimmt den größten Teil der Frontpage die ganzseitige Karte mit den visualisierten Objekten ein. Eine Navigationsleiste ermöglicht noch das Aufrufen einer kurzen Anleitung und Informationen über die Daten und der App. Diese Informationen wurden auf eine eigene Seite ausgelagert.<br />
<br />
Die Kommunikation zwischen Front- und Backend wurde mit einem Zusammenspiel von Flask mit AJAX und jQuery umgesetzt und könnte bei weitem besser entwickelt sein - bin leider kein Software Ingenieur. In diesem Zusammenhang sei auch erwähnt, dass die App für einen unternehmerischen Einsatz an manchen Stellen noch robuster programmiert werden müsste. Für ein Beispiel, das die Möglichkeiten mit den verwendetetn Daten und Techniken zeigt, sollte dieser Entwicklungsstand aber ausreichen.<br />
<br />
<h3>
Geo-App mit Leaflet</h3>
Die Karte selbst wurde mit Leaflet umgesetzt. Mein Konzept für die Visualisierung konnte damit (und auch Dank der verwendeten Plugins) sehr effizient umgesetzt werden.<br />
Als Basiskarte habe ich mich für das Open Static Map Service von MapQuest entschieden. Der Toner Style von Stamen Design hätte zwar grafik-design-technisch mehr her gegeben, aber die MapQuest Tiles geben durch ihr Farbschema visuell Informationen über die geografische Verortung der Bauwerke intuitiver preis.<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-mETVeAOA5lA/VQ_l3Z_QbsI/AAAAAAAABqI/0YgcFglBDM0/s1600/Auswahl_004.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="http://3.bp.blogspot.com/-mETVeAOA5lA/VQ_l3Z_QbsI/AAAAAAAABqI/0YgcFglBDM0/s1600/Auswahl_004.png" height="148" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Standortbestimmung</td></tr>
</tbody></table>
Der Standort der Schlösser und Burgen wird durch Marker angezeigt. Ein Piktogramm darauf zeigt an, zu welchem Typ das Objekt gehört. Durch das Auswählen eines Markers mittels Click, öffnet sich ein Pop-Up, das den Namen des Bauwerks und einen Link zu dessen Seite auf Wikipedia enthält, um sich näher über das jeweilge Schloss oder die Burg informieren zu können.<br />
Mit einem Button auf der Karte, ist es möglich, seinen eigenen Standort durch die App anzeigen zu lassen. Dabei wird auf Geoinformation aus dem Browser zurück gegriffen, was erst mit mobilen Geräten wirklich Sinn macht. Dennoch ist die Standortbestimmung damit nicht in allen Gegenden, auch trotz dem Einsatz von GPS, wirklich gut. Über die Einschränkungen ist <a href="http://www.andygup.net/html5-geolocation-api-%E2%80%93-how-accurate-is-it-really/" target="_blank">dieser Artikel</a> recht informativ. Jedenfalls, als Näherungswert, sollte die Bestimmung dennoch ausreichen.<br />
Sobald die App den Standpunkt bestimmt hat, wird aus der Datenbank das geografisch nächste Schloss oder die nächste Burg abgefragt. Die Bestimmung des nächsten Objekts vereinfacht der räumliche Index in MongoDB ungemein und ist mit einer einfachen Anfrage auszuführen. Auf der Karte wird das nächste Bauwerk dann mit einem eigenen Marker hervorgehoben.</div>
<div style="text-align: justify;">
<br />
<h3>
Deployment auf OpenShift</h3>
Weil die Datenbank wenig umfangreich ist und sich auch der Rechenaufwand zur Darstellung der Page in Grenzen hält, wird die App auf einem einzigen Gear in OpenShift gehostet. Problematisch war hierbei nur die alte Version von MongoDB in der Standard-Cartridge. Da die App mit einer neueren Version der Geoindizes lokal entwickelt wurde, habe ich eine aktuelle Version in OpenShift nachgerüstet - was Dank der <a href="https://github.com/icflorescu/openshift-cartridge-mongodb" target="_blank">MongoDB 2.6</a> Cartridge von Ionut-Cristian Florescu kein großes Problem war.<br />
<br />
<h3>
Zusammenfassung</h3>
Mit der Entwicklung dieser Geo-App habe ich versucht zu zeigen, wie es möglich ist mit relativ simplen Mitteln und offenen Daten die Visualisierung von Standorten von mehreren Objekten umzusetzen. Das Thema des Beispielprojekts, <i>Schlösser und Burgen in Oberösterreich</i>, ist touristisch nutzbar. Das beschriebene Vorgehen ist aber auch auf andere statische Objekte wie beispielsweise Geschäftsniederlassungen, Standorte von sportlichen oder kulturellen Einrichtungen etc. anwendbar. Erweiterungsmöglichkeiten sind auch vorhanden, beispielsweise im Rendern von 3D-Modellen der einzelnen Bauwerke an ihren Standorten bei hohen Zoomstufen.<br />
Aus Sicht der Sozialforschung ist der Blick auf die Karte auch nicht uninteressant, liefert sie doch eine Darstellung der Verteilung von machtdarstellenden Bauwerken in früheren Zeiten. Dabei ist besonders markant (wenn auch nicht unlogisch), dass sich solche Gebäude in jenen Gebieten konzentrieren, die noch Heute bevölkerungsreich sind, wohin gegen in ländlichen Regionen solche Objekte verstreut in der Landschaft liegen, wobei diese nicht zwangsläufig in Nähe aktueller regionaler Zentren liegen müssen. Hinsichtlich der Sozialforschung ist des weiteren auch bemerkenswert, dass gemeinschaftlich auf Wikipedia erstellte Information, nicht nur umfangreicher, sondern auch gültiger sein kann, als ein von offizieller Stelle publizierter Datensatz.<br />
Die zum Projekt gehörenden Scripte und der Source Code der App sind im <a href="https://github.com/donK23/WebBeispiele_Shed01" target="_blank">Webbeispiele Repository</a> dieses Blogs ersichtlich. Für die Planung von Tageausflüge und -in eingeschränktem Masse- auch mobil für die Orientierung bei einer Wanderung, lässt sich die App auf jedem Fall nutzen. Auch das Ergründen von bislang einem noch unbekannten Bauwerke kann ganz spannend sein.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-4IvEmzw5xRg/VQ6bxY9OPZI/AAAAAAAABpc/FKZzH0MpZz0/s1600/IMG_7100.JPG" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="http://4.bp.blogspot.com/-4IvEmzw5xRg/VQ6bxY9OPZI/AAAAAAAABpc/FKZzH0MpZz0/s1600/IMG_7100.JPG" height="213" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Burgruine Ruttenstein, <i style="font-size: 13.6000003814697px;"><span style="font-size: xx-small;">Foto © S. Wiesinger, 2014</span></i></td></tr>
</tbody></table>
</div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-91087182378173579962014-12-21T19:56:00.000+01:002014-12-21T19:56:14.361+01:00Buchrezension: Rewire<div style="text-align: justify;">
In letzter Zeit habe ich das Buch <a href="http://www.amazon.de/gp/product/0393082830/ref=as_li_ss_tl?ie=UTF8&camp=1638&creative=19454&creativeASIN=0393082830&linkCode=as2&tag=shed01-21" target="_blank">Rewire: Digital Cosmopolitans in the Age of Connection</a><img alt="" border="0" src="http://ir-de.amazon-adsystem.com/e/ir?t=shed01-21&l=as2&o=3&a=0393082830" height="1" style="border: none !important; margin: 0px !important;" width="1" /> von Ethan Zuckerman gelesen. Als Thema wird darin menschliche Kommunikation und Interaktion im Internetzeitalter besprochen.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Das Buch liest sich sehr <i>soziologisch</i>. Dem Menschen wird darin eine eindeutig höhere Bedeutung zugewiesen als der auch reichlich erwähnten Technik. Mir persönlich war der Inhalt aber zu oberflächlich dargestellt, wem jedoch massenmediale Anekdoten zu Themen mehr interessieren als die theoretische Wissenbasis, ist bei Zuckerman genau richtig. Nichtsdestotrotz finde ich das Buch sehr empfehlenswert, nämlich in Bezug auf der thematischen Aufbereitung durch den Autor und dessen lebendiger Erzählweise.</div>
<div style="text-align: justify;">
<br /></div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-10002915846725798332014-12-21T19:54:00.002+01:002014-12-21T19:54:29.978+01:00Ende Versuch: Umstellung auf Kleinschreibung<div style="text-align: justify;">
Wie in <a href="http://shed01.blogspot.co.at/2014/08/versuch-umstellung-auf-kleinschreibung.html">diesem Beitrag</a> beschrieben, habe ich die letzen Einträge in Kleinschreibung verfasst. Das Experiment ist meiner Meinung nach nicht aufgegangen und darum stelle ich den Versuch jetzt ein. Hauptausschlagender Grund dafür ist, dass es mir mehr Mühe kostet, einen Text ausschließlich in Kleinschreibung zu verfassen, da ich sonst auch mit Groß- und Kleinschreibung unterscheidenden Systemen arbeite. Insofern kosten mich die Tippfehler durch automatisches Umschalten mehr Zeit als ich durch das Weglassen der Umschaltung gewinne. Dazu finde ich, hat sich das Schriftbild des Blogs nicht verbessert (jedoch auch nicht verschlechtert). Die Lesbarkeit der Beiträge hat aber auch gelitten, einfach aus dem Grund, weil die Unterscheidung zwischen Groß- und Kleinschreibung kulturell so eingebrannt ist. Das könnte sich also durch eine weitere Verbreitung der Kleinschreibung verbessern, aktuell ist es mir jedoch noch zu nachteilig.</div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-22400352504312203162014-10-31T15:28:00.003+01:002015-04-02T17:25:55.892+02:00visualisierung mit bokeh: beliebte vornamen in OÖ<h3>
erste versuche mit Bokeh</h3>
<div style="text-align: justify;">
<a href="http://bokeh.pydata.org/" style="text-align: justify;" target="_blank">Bokeh</a> ist eine python bibliothek für interaktive visualisierungen und datenplots. <span style="text-align: justify;">entwickelt wird sie </span><span style="text-align: justify;">von </span><a href="http://continuum.io/" style="text-align: justify;" target="_blank">Continuum Analytics</a><span style="text-align: justify;">, das durch seine python distribution anaconda bekannt ist. die als open-source projekt entwickelte bibliothek erlaubt es, mit python interaktive und webfähige plots zu erzeugen - und das auf simple und schnelle art und weise. genug gründe für mich (als nicht unbedingten fan der matplotlib) einmal erste versuche damit zu starten.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
die einbindung der bibliothek ist nicht schwierig zu bewerkstelligen. auch die anwendung zur erzeugung der plots erzeugt keinen syntaktischen overhead, wie der code für die beispielanwendung zeigt (einseh- und downloadbar im <a href="https://github.com/donK23/shed01/tree/master/VisBeispiele" target="_blank">visualisierungs-beispiele repo</a> des blogs). die ergebnisse sind für den geringen aufwand visuell ansprechend und auch nützlich für die kommunikation von informationen aus den plots. bei meinen versuchen haben sich jedoch zwei problemfelder gezeigt, die dem noch jungen entwicklungsstands des projekts geschuldet sind. erstens ist die dokumentation noch sehr ausbaufähig. damit bleibt nichts anderes übrig, als bei der verwendung öfters mal im sourcecode der bibliothek nachzusehen. dieser ist zwar gut kommentiert und hilft, die korrekte anwendung von diversen methoden zu finden, kann aber eine gute dokumentation für das schnelle nachschlagen nicht ersetzen. als zweiten problembereich kamen mir dokumentierte parameter unter, die in folge jedoch nicht genutzt werden. dies ist besonders ärgerlich, wenn man die plots individuell verändern möchte. jedoch gehe ich davon aus, dass diese beiden problemgruppen in weiteren entwicklungsstadien behoben werden.<br />
<br />
als beispielanwendung habe ich mich auf eine simple visualisierung mittels einer heatmap festgelegt. da bokeh auch eine eigene methode und ein beispiel in der <a href="http://bokeh.pydata.org/docs/gallery.html" target="_blank">gallery</a> bereit stellt. als zusätzliches ziel setzte ich mir die einbindung eines bokeh-plots in eine statische webseite.<br />
<br /></div>
<h3>
thema: beliebte vornamen</h3>
<div style="text-align: justify;">
als datenquelle für dieses projekt hat sich der vornamen datensatz des landes oö (über <a href="http://daten.gv.at/" target="_blank">daten.gv.at</a>) angeboten. dieser enthält die 60 beliebtesten vornamen je geschlecht für die letzten 10 jahre. daraus wurden die 25 beliebtesten (nach summe der werte über die gesamtjahre) bestimmt und deren werte dann in einem pandas data frame in eine entsprechende form gebracht, um als input für die CategoricalHeatMap methode von <a href="http://bokeh.pydata.org/" target="_blank">Bokeh</a> zu dienen. im endeffekt stellte sich heraus, dass die größte herausforderung des projekts -wie so oft bei datenanalysen und- visualisierungen- darin bestand, die daten in die gewünschte form zu bringen. die erstellung der eigentlichen plots mittels bokeh ging dann recht zügig.</div>
<div style="text-align: justify;">
<br />
sobald die visualisierungen erstellt waren, wurden die plots in ein bootstrap template importiert. das vorgehen (im <a href="https://github.com/donK23/WebBeispiele_Shed01" target="_blank">web-beispiele repo</a> des blogs dokumentiert), hätte ich zwar eleganter gestalten können, für eine schnelle präsentationsmöglichkeit ist die einbindung des html-outputs von bokeh aber geeignet. eine bedeutende verbesserung wäre natürlich eine interaktive einbindung, was auch eine effektive verwendung in dynamischen seiten erlauben würde. dies scheint mit bokeh auch möglich zu sein - aber auch hier fehlt noch eine bessere dokumentation. für den anspruch, ein einfaches beispiel zu gestalten, hat mir aber die einbindung des kompletten outputs gereicht. die ergebnisse über die 25 beliebtesten vornamen für männliche und weibliche neugeborene kann somit unter folgendem link betrachtet werden:<br />
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<a href="http://donk23.github.io/WebBeispiele_Shed01/VornamenPage/index.html" target="_blank"><b><span style="font-size: large;">VornamenOÖ</span></b></a> </div>
<br /></div>
<h3 style="text-align: justify;">
zusammenfassung</h3>
<div style="text-align: justify;">
<span style="text-align: start;">einbindung und verwendung der python visualisierung-bibliothek </span><a href="http://bokeh.pydata.org/" target="_blank">Bokeh</a> sind einfach. das potential des projekts ist gross, aktuell gibt es jedoch noch einige mängel, va bezüglich der dokumentation.<br />
und zum ergebnis des beispiels: Lukas bzw. Anna sind die beliebtesten vornamen für neugeborene in den letzten 10 jahren in oberösterreich. die plots zeigen darüber hinaus, dass es besonders bei weiblichen neugeborenen eine konzentration von besonders häufig verwendeten vornamen gibt. ein trend zu mehr individualität bei der benennung von neugeborenen ist zumindest mit diesen vorliegenden daten für die letzten 10 jahre nicht erkennbar.</div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-20623225517065779352014-09-22T13:58:00.000+02:002015-04-02T17:27:01.535+02:00geokodierungsskript für MapQuest API<div style="text-align: justify;">
da es zwar aktuelle einige bibliotheken für python 2.x gibt, welche geokodierung mit Hilfe der <a href="http://open.mapquestapi.com/geocoding/" target="_blank">MapQuest Open Geocoding API</a> zur verfügung stellen, aber keine kompatible version für python 3.x, habe ich ein kleines Skript dafür geschrieben und auf <a href="https://github.com/donK23/shed01/tree/master/PyBeispiele/geocoderMapquest" target="_blank">GitHub</a> gestellt. voraussetzung zur verwendung ist ein authorisierungs schlüssel, der auf der <a href="http://developer.mapquest.com/" target="_blank">entwicklerseite von MapQuest</a> erzeugt werden kann.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
das skript kann in ein projekt kopiert werden, das koordinaten für bestimmte orte benötigt. der aufruf der funktion geocodeMQ mit dem parameter der jeweiligen ortsabfrage, stellt dann genau diese bereit, in dem es auf die <a href="http://open.mapquestapi.com/geocoding/">Open Geocoding API</a> von <a href="http://www.mapquest.com/">Mapquest</a> zugreift. diese daten basieren auf <a href="http://www.openstreetmap.org/" target="_blank">OpenStreetMaps</a>-daten und stehen unter der <a href="http://www.opendatacommons.org/licenses/odbl" target="_blank">ODbL</a>. es werden die koordinaten des besten treffers als koordinatentupel (breite, länge) zurück gegeben und können zur weiteren prozessierung verwendet werden.</div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-32374270225383352772014-08-22T20:53:00.000+02:002015-04-02T17:28:53.237+02:00reporting mit flask<div style="text-align: justify;">
um die möglichkeiten von <a href="http://flask.pocoo.org/" target="_blank">flask</a> zum erstellen eines reports zu testen, habe ich ein einfaches beispiel über wohnbautätigkeiten zusammen gestellt. zum ausprobieren der anwendung steht der code im <a href="https://github.com/donK23/shed01/tree/master/PyBeispiele" target="_blank">python repo</a> von diesem blog unter <a href="https://github.com/donK23/shed01/tree/master/PyBeispiele/FlaskReporting" target="_blank">FlaskReporting</a> zur verfügung.</div>
<div style="text-align: justify;">
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-13woOqXaKus/U_T2Qi7SHtI/AAAAAAAABGk/Q2vrXQUv1YU/s1600/Auswahl_001.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="image home screen" border="0" src="http://3.bp.blogspot.com/-13woOqXaKus/U_T2Qi7SHtI/AAAAAAAABGk/Q2vrXQUv1YU/s1600/Auswahl_001.png" height="162" title="home screen" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">home screen</td></tr>
</tbody></table>
<br /></div>
<h3 style="text-align: justify;">
thema: wohnbautätigkeit in österreich</h3>
<div style="text-align: justify;">
da es in dem beispiel eigentlich um die anwendung gehen sollte, habe ich datenzusammenstellung, -analyse und -visualisierung simpel gehalten. die <b>daten</b> stammen von <a href="http://www.statistik.at/" target="_blank">statistik austria</a> <i>[ironiemodus an]</i> DEM ansprechpartnerfür historische daten von österreich <i>[ironiemodus aus]</i> und bestehen aus 2 datensätze über die anzahl von <b>fertiggestellten gebäuden mit wohnungen</b> pro jahr. der insgesamte zeitraum der beobachtung ist somit zwischen 1970 und 2002. die datenwerte sind auch relativ unspektakulär mit nur einem ausreisser (in 1980), der eventuell mit mehr historischem wissen erklärbar wäre oder auch nur ein aggregation fehler ist.</div>
<div style="text-align: justify;">
für den report habe ich die daten dann so aufbereitet, dass eine zusammenfassende statistik der anzahl der gebäuden und ein einfaches diagramm über die selbe variable zu sehen ist. dazu noch ein bisschen erklärender text und fertig ist die simplifizierte version eines datenanalyse reports.<br />
<br />
<h3>
flask </h3>
<div>
mit ein wenig kenntnissen in python und einigen tutorials war es überaus einfach, mit geringem aufwand, eine einfache reporting app zu entwickeln. der <a href="https://github.com/donK23/shed01/tree/master/PyBeispiele/FlaskReporting" target="_blank">code</a> der anwendung ist mehr oder weniger selbsterklärend. grundsätzlich gibt es ein main script mit dem code für flask und ein analyse script, das die datenanalyse und -visualisierung (überwiegend mit hilfe von <a href="http://pandas.pydata.org/" target="_blank">pandas</a> und der <a href="http://matplotlib.org/api/pyplot_api.html" target="_blank">matplotlib</a>) zur verfügung stellt. als layout wurde die basis version von bootstrap verwendet, das über eine erweiterung auch flott in flask integriert werden konnte. dadurch genügten ein paar zeilen code in den html templates, um so einen simplen report zusammen zu stellen.</div>
</div>
<div style="text-align: justify;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-kS4wsVKgQK0/U_T2ka6KL9I/AAAAAAAABGs/VbyARv3mr4w/s1600/Auswahl_002.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://2.bp.blogspot.com/-kS4wsVKgQK0/U_T2ka6KL9I/AAAAAAAABGs/VbyARv3mr4w/s1600/Auswahl_002.png" height="346" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">report</td></tr>
</tbody></table>
<div style="text-align: justify;">
<h3>
zusammenfassung</h3>
</div>
<div style="text-align: justify;">
flask ist mmn überaus geeignet, einfache reports oder andere datenprodukte ins web zu bringen. die verwendung des frameworks zeigt sich recht einfach, setzt jedoch etwas an wissen über html und css voraus.</div>
<div style="text-align: justify;">
<br /></div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-24342213804453638362014-08-20T15:07:00.001+02:002014-08-20T15:07:19.262+02:00versuch: umstellung auf kleinschreibung<div style="text-align: justify;">
ab sofort starte ich den versuch, meine einträge in kleinschreibung zu verfassen. auf die idee brachte mich das lesen vom <a href="http://www.das-vegan-magazin.de/" target="_blank">das vegan magazin</a> (obwohl selbst nicht veganer) und die erinnerung an ein mal gelesenes buch eines italienischen autors, der sich ebenfalls der kleinschrift bediente. getestet soll werden, ob mir das konsequente klein-schreiben tatsächlich leichter fällt, wie sich die entscheidung auf das gesamte schriftbild des blogs auswirkt und ob die lesbarkeit der beiträge dadurch beeinträchtigt wird. persönliche erfahrungen oder meinungen dazu bitte über kontaktformular auf der seite. </div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-22870254656856072202014-07-27T15:53:00.002+02:002015-04-02T17:30:21.143+02:00Migrationsbilanz als ShinyApp<div style="text-align: justify;">
Für das Kurs-Projekt vom MOOC <a href="https://class.coursera.org/devdataprod-003" target="_blank">Developing Data Products</a> habe ich eine simple <a href="https://donk23.shinyapps.io/shinyMig_UpperAT/" target="_blank">Visualisierungs App</a> entwickelt. Sie bereitet Migrationsdaten aus dem Zeitraum 2002 - 2012 der Bezirke von Oberösterreich in Form einer Choroplethenkarte auf und zeigt die Werte auch in Tabellenform.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Link zu<b> <a href="https://donk23.shinyapps.io/shinyMig_UpperAT/" target="_blank">shinyMig OÖ</a></b></div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
ShinyApps.io</h3>
<div style="text-align: justify;">
Umgesetzt wurde das Projekt zu Versuchszwecken in R auf der <a href="https://www.shinyapps.io/" target="_blank">ShinyApps.io</a> Plattform von <a href="http://www.rstudio.com/" target="_blank">RStudio</a>. Das Deployment hierbei zeigte sich mehr als simpel. Sofern die Anwendung auf der eigenen Workstation einwandfrei läuft, kann es mit einem einfachen <i>deployApp()</i> Befehl auf die Plattform geladen werden. Die Kunst ist lediglich, die Anwendung am eigenen Rechner fehlerfrei zum Laufen zu bringen, da die debugging Möglichkeiten mit <a href="http://shiny.rstudio.com/" target="_blank">shiny</a> leider noch sehr begrenzt sind.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Umsetzung in R</h3>
<div style="text-align: justify;">
Bei der Entwicklung der App zeigte sich wieder eindeutig, dass R nur ein suboptimales Werkzeug zur Kartenerstellung ist. Mit ggplot2 ist zwar einiges möglich, der Aufwand dafür steht jedoch mMn nicht in Relation zu den mässigen Ergebnissen im Vergleich zu <i>echter</i> GIS-Software. Bei der Aufbereitung der Rohdaten (übrigen von <a href="http://www.data.gv.at/" target="_blank">data.gv.at</a>) und der tabellarischen Darstellung in der App, konnte hingegen R natürlich seine Stärken ausspielen. Als größtes Hindernis bei der Entwicklung stellte sich die Kategorisierung der Migrationsbilanzen heraus, wobei ich mich nach etlichen Versuchen in automatischer- und einiger in manueller-Klassifizierung für einen semi-automatischen Weg entschieden habe, wobei positive und negative Salden getrennt und von diesen beiden Kategorien dann der jeweilige Median als weitere Schwelle eingeführt wurde. Damit blieb die visuelle Vergleichbarkeit der Karten noch <i>einigermassen</i> erhalten, bei Beibehaltung des Akzents auf die Trennung von positiven und negativen Werten. Für detaillierte Vergleiche sind ja noch die jeweiligen Schwellen in der Legende verzeichnet bzw. auch die Daten in der Tabelle ersichtlich.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Beispielcode</h3>
<div style="text-align: justify;">
Der Beispielcode steht im <a href="https://github.com/donK23/shed01/tree/master/rBeispiele" target="_blank">R-Repo</a> dieses Blogs zum download bereit.</div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-53977634015167533442014-07-23T21:49:00.000+02:002014-07-23T21:49:26.241+02:00Buchrezension: Lifelogging von Stefan Selke<div style="text-align: justify;">
In den letzten Wochen habe ich das Buch "<a href="http://www.amazon.de/gp/product/3430201675/ref=as_li_ss_tl?ie=UTF8&camp=1638&creative=19454&creativeASIN=3430201675&linkCode=as2&tag=shed01-21" target="_blank">Lifelogging: Wie die digitale Selbstvermessung unsere Gesellschaft verändert</a>" von <a href="http://www.stefan-selke.de/" target="_blank">Stefan Selke</a> gelesen.<img alt="" border="0" src="http://ir-de.amazon-adsystem.com/e/ir?t=shed01-21&l=as2&o=3&a=3430201675" height="1" style="border: none !important; margin: 0px !important;" width="1" /> Als regelmässiger Leser seines Blogs <a href="http://stefan-selke.tumblr.com/" target="_blank">Stabile Seitenlage</a> und da mir seine Posts im <a href="http://soziologie.de/blog/" target="_blank">SozBlog</a> sehr zugesagt haben, ging ich mit großen Erwartungen in die Auseinandersetzung mit dem Thema Lifelogging.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Licht und Schatten</h3>
<div style="text-align: justify;">
Der Schreibstil des Autors sagt mir immer wieder zu. Er vermag nämlich komplexe gesellschaftlich Zusammenhänge, so zu präsentieren, dass sie einfach zu verstehen sind, aber dennoch keine bedeutenden Aspekte verloren gehen. Auch finde ich sehr gelungen, dass positive wie auch negative Entwicklungen und mögliche Auswirkungen des Lifeloggings angesprochen werden. Positive sind zwar eindeutig unterrepräsentiert, aber werden zumindest erwähnt, was im Vergleich zur Mainstream Medienlandschaft schonmal einem Quantensprung gleich kommt.<br />
<br />
Vor allem das Ende des Buches kam mir dann doch etwas zu langatmig vor. Das letzte Kapitel, ein Ausblick auf die Zukunft (was mMn in der Soziologie allzu oft fehlt) mal ausgenommen, waren mir Aneinanderreihungen von dystopischen Beschreibungen über mögliche negative Auswirkungen des Lifeloggings auf Dauer einfach zu viel. Auch die Glorifizierung sozialer und psychologischer Mechanismen im Gegensatz zu technischen Regulationssystemen kann ich zwar als Soziologe nachvollziehen, ist jedoch mMn eine antiquierte Haltung, sowohl im Bezug auf Erstere, wie auf Letztere. Eine trennschärfere Auseinandersetzung über Datenanwendungen und Lifelogging-Techniken hätte ich mir überdies gewünscht. </div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Fazit</h3>
<div style="text-align: justify;">
Grundsätzlich halte ich das Buch "<a href="http://www.amazon.de/gp/product/3430201675/ref=as_li_ss_tl?ie=UTF8&camp=1638&creative=19454&creativeASIN=3430201675&linkCode=as2&tag=shed01-21" target="_blank">Lifelogging</a>" aktuell als sehr notwendig. Es bringt etwas Licht in die Grauzone der datenbasierten Technikanwendungen und deren manifesten, aber auch unintentionierten, Auswirkungen auf die Gegenwartsgesellschaften. Ich halte das Werk auch dazu fähig, eine Debatte über den Umgang mit Daten auf gesamtgesellschaftlicher Ebene anzustossen. Ob diese dann auch objektiv geführt werden kann, wage ich zu bezweifeln. Auch gerade weil ich den Grundtenor des Buch als zu sehr auf negative Auswirkungen von datenbasierten Technologien ausgerichtet empfinde.<br />
Umgekehrt als die Ausrichtung auf ein Zielpublikum eigentlich zu erwarten wäre, würde ich das Buch sehr für den stereotypischen Techie empfehlen um dessen Horizont zu erweitern, als Technologie-interessierte Sozialforscher oder einer kritischen Öffentlichkeit, welche eventuell durch die Lektüre in ihrer Datenparanoia bestärkt werden könnten.</div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-69940118123033633172014-07-10T22:20:00.000+02:002014-07-10T22:20:27.455+02:00Twitter: @datadonk23Nachdem ich jetzt doch mal einen Twitter-Account angelegt habe (für ein Assignment im Rahmen eines MOOC - <i>mehr dazu bald</i>), gibt es jetzt auch Neuigkeiten von mir über Daten, Sozialforschung und alles was mir sonst noch unter kommt auf: <a href="https://twitter.com/datadonk23" target="_blank">@datadonk23</a>donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-47557015593056419692014-07-06T12:32:00.000+02:002015-04-02T17:31:13.967+02:00Visualisierung von Wahlergebnissen mit Qt<div style="text-align: justify;">
Um die Möglichkeiten für die Entwicklung von Android Apps mit <a href="http://qt-project.org/" target="_blank">Qt</a> zu testen, habe ich eine simple Anwendung zur <b>Visualisierung von Wahlerbnissen</b> erstellt. Das Projekt kann vom <a href="https://github.com/donK23/shed01/tree/master/VisBeispiele" target="_blank">Visualisierungs-Beispiele Repositorium</a> herunter geladen und auf Desktop oder neueren Android Versionen getestet werden.</div>
<div style="text-align: justify;">
<br /></div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: justify;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-FLQS5QT5TuE/U7kc_ewohuI/AAAAAAAAA90/r7Hel_9dHKA/s1600/Screenshot_WahlenVis.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="http://2.bp.blogspot.com/-FLQS5QT5TuE/U7kc_ewohuI/AAAAAAAAA90/r7Hel_9dHKA/s1600/Screenshot_WahlenVis.png" height="320" width="189" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Screenshot - Wahlergebnisse App</td></tr>
</tbody></table>
<h3 style="text-align: justify;">
Wahlergbnisse der EU-Wahl 2014 in Steyr </h3>
<div style="text-align: justify;">
Da die Daten der letzten politischen Wahl in meiner Heimatstadt einfach zugänglich waren, habe ich diese als Datenbasis verwendet. Diese lagen schon aufbereitet durch die Abteilung für Wahlen der Kommunalverwaltungsbehörde vor und wurden lediglich in XML umgewandelt, um sie durch ein <i>XMLListModel-Objekt</i> in die Anwendung eingebinden zu können.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Tabellenansicht</h3>
<div style="text-align: justify;">
Auf Basis eines Grid-Layouts wurde dann eine Tabelle mit den Ergebnissen erstellt. Diese ist flickable, mit einer Wischgeste kann also zu den Ergebnissen der Parteien der hinteren Listenplätze gescrollt werden. Auf mehr Interaktion wurde zu Gunsten der Simplizität verzichtet. Uninspirierter Weise wurden die Farben aus dem Standard-Farbschema von Android zur farblichen Gestaltung verwendet.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Fazit</h3>
<div style="text-align: justify;">
Die Entwicklung einer Android App, die auch auf Desktops lauffähig ist, mit Qt war Dank der umfangreichen Dokumentation des Projekts einfach. Die Integration von tabellarischen Daten und Wiederverwendung in selber Form ist ebenso unkompliziert umzusetzen, wie ein grid-basiertes Layout zur Aufbereitung. Der erstellte Prototyp der App läuft auf Desktop- und neueren Android-Geräten und ist grundsätzlich mit weiteren Features erweiterbar. So wäre eine Navigation zu den einzelnen Stadtteilergebnissen ohne größere Mühen umsetzbar. Eine Darstellung in Diagrammform wäre ebenso denkbar wie sinnvoll, nur etwas umständlicher umzusetzen, da das Datenvisualisierungsmodul von Qt nicht in der OpenSource Version enthalten ist. </div>
<div style="text-align: justify;">
<br /></div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-52412076138206962602014-05-22T16:19:00.003+02:002014-05-22T16:21:15.998+02:00Buchbesprechung: Neo4j 2.0 - Eine Graphdatenbank für alle<div style="text-align: justify;">
Das Buch "<a href="http://www.amazon.de/gp/product/3868021280/ref=as_li_ss_tl?ie=UTF8&camp=1638&creative=19454&creativeASIN=3868021280&linkCode=as2&tag=shed01-21">Neo4j 2.0 - Eine Graphdatenbank für alle</a><img alt="" border="0" src="http://ir-de.amazon-adsystem.com/e/ir?t=shed01-21&l=as2&o=3&a=3868021280" height="1" style="border: none !important; margin: 0px !important;" width="1" />
" von <a href="https://twitter.com/mesirii" target="_blank">Michael Hunger</a> führt in die Benutzung von <a href="http://www.neo4j.org/" target="_blank">Neo4j</a> ein. Graphendatenbanken sind besonders bei sozialen Fragestellungen ein geeignetes Instrument, Daten zu prozessieren. Des weiteren gibt es aber eine Vielzahl von anderen Anwendungsfälle dieser relativ neuen Technologie, die auch in dem Buch kurz vorgestellt werden. Dabei liegt der Fokus eher auf Anwendungen im Business Bereich.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Kurz und prägnant</h3>
<div style="text-align: justify;">
Wie schon der Hinweis "schnell + kompakt" auf der Umschlagseite und das Format (16 * 10 cm) erkennen lässt, ist das Ziel des Buches, einen kurzen und prägnanten Einstieg in die Verwendung der Graphendatenbank, und dessen Standard-Abfragesprache <a href="http://docs.neo4j.org/chunked/stable/cypher-query-lang.html" target="_blank">Cypher</a>, bereit zu stellen. Meiner Meinung nach, kann es als durchaus gelungen bezeichnet werden, wie der Autor Michael Hunger es meistert, Einführung, Benutzung, Anwendungsmöglichkeiten und sogar spezielle Problemstellungen auf so wenig Textraum unterzubringen. Der Schreibstil ist dementsprechend auch schnörkellos und gut verständlich. Natürlich wird hier viel auf Codebeispiele gesetzt, die meist auch für sich allein stehend gut nachvollziehbar sind. Durch die Vielzahl an Verbindungsmöglichkeiten mit Neo4j, werden für die hauptsächlichen eingesetzten Kommunikationswege (Datenbankabfragen, API´s, Treiber) jeweils Beispiele geliefert. Diese sind leider sehr auf Java ausgerichtet, was nicht verwundert, da Neo4j ja auch in der Sprache entwickelt wurde. Dennoch werden auch Anbindungen mit anderen Programmiersprachen zumindest erwähnt und auf vertiefende Informationsmöglichkeiten verwiesen.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Die Welt der Graphendatenbanken</h3>
<div style="text-align: justify;">
Kurz dargestellt, bestehen Graphendatenmodelle aus <b>Knoten</b> und <b>Verbindungen</b>. Aus der Geoinformatik sind solche Konzepte vor allem von Routenberechnungen bekannt. In den letzten Jahren entwickeln sich Graphendatenbanken im Zuge der Verbreitung von NoSQL immer mehr zu funktionalen Lösungen, um komplexe Zusammenhänge zu modellieren. Einerseits ist dafür die Notwendigkeit gegeben, da in einer stark vernetzten Welt, auch modellhafte Abbilder der Struktur von Verbindungen entsprechen sollte, andererseits sind besonders soziale Netzwerke im Web und andere webbasierten Dienste günstige Lieferanten von Datenstrukturen, die sich intuitiv als Netzwerk abbilden lassen - Stichwort <b>Big Data</b>. </div>
<div style="text-align: justify;">
Für sozialwissenschaftliche Analysen, aber auch für jeglich Anwendungen, welche soziale Zusammenhänge darstellen (vom Marketing, über Einkauf und Verkauf, bis hin zur Kundendatenbank), sind Lösungen mit Graphendatenbanken überaus geeignet. Die dafür erstellten Modelle sind skalierbar und performant. Der bedeutendste Vorteil liegt meiner Meinung nach aber in der intuitiven Abbildung der sozialen Realitäten. Momentan arbeite ich an einem Beispiel, welches die Möglichkeiten zur Analyse von sozialen Daten demonstrieren soll. Es wird auf diesem Blog dann vorgestellt werden, natürlich inklusive eines Beispielcodes (Anbindung an Neo4j mit Python).</div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-34611984575440874372014-05-19T22:24:00.000+02:002015-04-02T17:32:24.685+02:00Befragungs-App mit QtQuick und Python<div style="text-align: justify;">
Nachdem ich in letzter Zeit ein wenig mit <a href="http://qt-project.org/doc/qt-4.8/qml-intro.html" target="_blank">QtQuick</a> herum gespielt habe, war es an der Zeit einen funktionierenden <b>Prototypen</b> zu erstellen. Ich entschied mich, eine simple <b>Befragungs-App</b> zu entwickeln, die auf Tablets oder Touchscreens zum Einsatz kommen könnte.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Interaktion QtQuick mit Python</h3>
<div style="text-align: justify;">
Die Anwendung ist so aufgeteilt, dass der in <a href="http://de.wikipedia.org/wiki/QML" target="_blank">QML</a> geschriebene QtQuick Teil die User Interaktion übernimmt, Python die Anwendung beginnt (bzw. schließt) und die erhobenen Daten in eine Output-Datei prozessiert.</div>
<div style="text-align: justify;">
Grundsätzlich ist die Interaktion von QtQuick mit Python über <a href="http://en.wikipedia.org/wiki/PyQt" target="_blank">PyQt</a>- oder <a href="http://en.wikipedia.org/wiki/PySide" target="_blank">PySide</a>-Bindungen möglich. Gut dokumentierte Beispiele finden sich dafür im Web. Ein noch derzeit vorhandenes Problem dabei ist jedoch, dass QtQuick 2 derzeit nur in <a href="http://www.riverbankcomputing.co.uk/software/pyqt/download5" target="_blank">PyQt5</a> (und auch noch nicht in PySide) implementiert ist. Problematisch deswegen, weil dies zu einer Einschränkung für die Entwicklung der Anwendung führte, da PyQt5 aktuell noch nicht auf meinem <a href="http://fedoraproject.org/" target="_blank">Fedora 20</a> System verfügbar ist, weswegen ich gezwungen war, auf PyQt4 zurückzugreifen. Das wiederum unterstützt jedoch nur Bindungen an QtQuick 1 Versionen. Im konkreten Fall ärgerlich, da die Einbindung von QtQuick in PyQt5 umgestellt wurde und in der aktuellen Version <a href="http://pyqt.sourceforge.net/Docs/PyQt5/pyqt4_differences.html" target="_blank">natürlicher funktioniert</a> als mit dem PyQt4 <i>QDeclarativeView</i>.</div>
<div style="text-align: justify;">
Nichtsdestotrotz läuft die Anwendung so, dass über das Python Skript die App in einem Fenster gestartet wird. Danach übernimmt QtQuick und führt die Befragung durch. Daten werden nach jedem/r Befragten an die Python Anwendung geschickt. Diese übernimmt die Weiterverarbeitung und speichert die codierten Antworten in eine Output-Datei (zur erleichterten Prozessierung mit Statistik-Tools in eine <a href="http://de.wikipedia.org/wiki/CSV_(Dateiformat)" target="_blank">CSV-Datei</a>).</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Layout</h3>
<div style="text-align: justify;">
Da QML die Legung der einzelnen UI-Elemente in einem Grid-System begünstigt und flaches Design sowieso momentan wieder in Mode ist, habe ich mich für das <b>Boxen-Layout</b> als grafisches Paradigma entschieden. Dieses kommt auch dem möglichen Anwendungsfall auf mobilen Geräten mit Touch-Eingabe entgegen. </div>
<div style="text-align: justify;">
Auch hier wieder eine Einschränkung durch den Umstand, nicht PyQt5 verwenden zu können. Mit QtQuick 2 und dem Modul <i>Window 2.0</i> ist es unkompliziert möglich, auf die Breiten- und Höhenwerte des Displays zuzugreifen. Demnach kann das Layout mit ein wenig Aufwand so gelegt werden, dass es auf unterschiedlichen Ausgabegeräten sinnvoll dargestellt wird. Diesen Schritt habe ich bei meinem Prototypen ausgelassen, da mir eben der Zugriff auf das Modul nicht möglich war und der Mehraufwand für eine responsive Layoutlegung keinen Nuzten gebracht hätte. Demnach habe ich mich für eine fiktive Bildschirmauflösung von 1280 * 800 Pixel entschieden. Dies entspricht einigen älteren Tablets oder Laptop-Bildschirme, was für den Anwendungsfall einer mobilen Befragungsanwendung zumindest zu einem möglichen Einsatzsszenario passen würde.</div>
<div style="text-align: justify;">
Als Symbole werden Icons aus <a href="http://fortawesome.github.io/Font-Awesome/" target="_blank">Font Awesome</a> verwendet. Der Import von Zeichen aus dieser ikonografischen Schrift für <a href="http://getbootstrap.com/" target="_blank">Bootstrap</a> ist sehr gut auf <a href="http://kdeblog.mageprojects.com/2012/11/20/using-fonts-awesome-in-qml/" target="_blank">Marks's KDE Blog</a> beschrieben. Als Schriftart für Textelemente wird Verdana eingesetzt.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-yR9CZarzpLk/U3pYz_NeKRI/AAAAAAAAAV8/zif40aweEdY/s1600/Auswahl_004.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://3.bp.blogspot.com/-yR9CZarzpLk/U3pYz_NeKRI/AAAAAAAAAV8/zif40aweEdY/s1600/Auswahl_004.png" height="275" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Py_QML_Befrager</b>: Item <i>Selbstanbau</i></td></tr>
</tbody></table>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Thema "Selbstversorgung"</h3>
<div style="text-align: justify;">
Da mein Fokus hier nicht auf den Inhalt der App lag, habe ich mich für einfache Beispiel-Items zum Thema "Selbstversorgung mit Nahrungsmittel in Oberösterreich" entschieden. Diese sind jedoch so gewählt, dass sie mit gängigen Antworttypen zusammen passen, die sinnvoll im Boxen-Layout verpackt werden können. Die ersten drei Items sind demnach Beispiele welche Bedeutung (Skala von <i>sehr unwichtig</i> bis <i>sehr wichtig</i>) und Wünschbarkeit (<i>sehr unerwünscht</i> bis <i>sehr erwünscht</i>) von bzw. Zustimmung (<i>lehne stark ab</i> bis <i>stimme stark zu</i>) zu Aussagen auf jeweils 5-stufigen Skalen messen. Die Items zu Gemeindegröße und Alter wurden mit Kategorien operationalisiert, um dem Boxen-Layout gerecht zu werden. Das Geschlecht wird dichotom erhoben, wobei eine weitere Box als Antwortalternative den verbreiteten Genderdeterminismus in der Operationalisierung dieses Items aufzuhehen versucht oder zumindest eine weitere Auswahlmöglichkeit bereit stellt.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-C2ChCFqptzs/U3pbRObUJtI/AAAAAAAAAWI/J-JfdufZbsI/s1600/Auswahl_005.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://1.bp.blogspot.com/-C2ChCFqptzs/U3pbRObUJtI/AAAAAAAAAWI/J-JfdufZbsI/s1600/Auswahl_005.png" height="265" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Py_QML_Befrager</b>: Item <i>Geschlecht</i></td></tr>
</tbody></table>
<div>
<br /></div>
<h3>
Testen und Fazit</h3>
<div style="text-align: justify;">
Wer selbst mit der App ein wenig herum spielen möchte, der Quellcode und Ressourcendateien sind im <a href="https://github.com/donK23/shed01/tree/master/PyBeispiele" target="_blank">Python-Beispiele Repo</a> für diesen Blog auf Github unter dem Verzeichnis "PyQML_Box_Befrager" abgelegt.</div>
<div style="text-align: justify;">
Als <b>Fazit</b> bleibt, dass die Entwicklung von sozialwisschenschaftlich relevanten Anwendungen mit QtQuick und Python möglich ist. Zu hoffen bleibt diesbezüglich, dass die Verbreitung von PyQt5 demnächst weiter zunimmt. Das Boxen-Layout limiert zwar die Itemausgestaltung, hat jedoch auf mobilen Geräten wiederum seine Vorteile.</div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-21979590703780054552014-05-01T18:11:00.000+02:002014-05-01T18:11:14.527+02:00YouTube Kanal: IRiSSDas <a href="https://iriss.stanford.edu/" target="_blank">Institute for Research in the Social Sciences</a> der Stanford Universität hat einen eigenen <a href="https://www.youtube.com/user/stanfordiriss/videos" target="_blank"><b>YouTube Kanal</b></a>, auf den vor allem Konferenzbeiträge zu Themen der <b>computergestützen Sozialforschung</b> öffentlich zugänglich gemacht werden. In den Vorträgen werden neue Methoden und theoretische Zugänge zum Thema vorgestellt. Einige Vortragende sind auch von Online Kursen von <a href="https://www.coursera.org/" target="_blank">Coursera</a> bekannt, von <a href="https://ed.stanford.edu/faculty/mcfarland" target="_blank">Daniel A. McFarland</a> (<a href="https://www.coursera.org/course/organalysis" target="_blank">Oranizational Analysis</a>), <a href="http://www.ladamic.com/" target="_blank">Lada Adamic</a> (<a href="https://www.coursera.org/course/sna" target="_blank">Social Network Analysis</a>) und <a href="http://d.ucsd.edu/srk/" target="_blank">Scott Klemmer</a> (<a href="https://www.coursera.org/course/hciucsd" target="_blank">Human-Computer Interaction</a>) habe ich schon MOOCs absolviert, die ich jeweils sehr empfehlen kann.<br />
<br />
Wer also nach <b>Inspiration</b> für die Entwicklung von Anwendungen in der computergestützten Sozialforschung sucht, kann sich <a href="https://www.youtube.com/user/stanfordiriss/videos" target="_blank">hier</a> inspieren lassen.donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-57619731179157901652014-04-19T17:57:00.000+02:002014-04-19T17:58:25.620+02:00Buchbesprechung: Agile Data Science - Building Data Analytics Applications with Hadoop<div style="text-align: justify;">
<a href="http://twitter.com/rjurney" target="_blank">Russel Jurney</a> versucht Methoden der agilen Entwicklung auf Datenwissenschaften umzulegen. Sein Buch <a href="http://www.amazon.de/gp/product/1449326269/ref=as_li_ss_tl?ie=UTF8&camp=1638&creative=19454&creativeASIN=1449326269&linkCode=as2&tag=shed01-21">Agile Data Science</a><img alt="" border="0" src="http://ir-de.amazon-adsystem.com/e/ir?t=shed01-21&l=as2&o=3&a=1449326269" height="1" style="border: none !important; margin: 0px !important;" width="1" /> ist klar für Praktiker mit Vorkenntnissen in Informatik und Statistik ausgelegt. Es beschreibt agile Entwicklungsprinzipien und Toolsets anhand eines Beispiels, das sich durch den gesamten Text zieht.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Agilität in der Datenwissenschaft</h3>
<div style="text-align: justify;">
Datenanalyse und -visualisierung ist bislang ein eher statisches Feld - Spezialisten arbeiten abgeschlossen mit <i>komplexen</i> Tools an <i>noch komplexeren</i> Modellen. Ein bisschen Agilität könnte diesem Bereich gut tun und den eigenen Workflow ergänzen - war mein Gedanke, um dieses Buch anzuschaffen. Mit den Prinzipien der <a href="http://agilemanifesto.org/iso/de/" target="_blank">Agilen Entwicklung</a> hatte ich mich zuvor nur oberflächlich beschäftigt, aber Slogans wie Iterationen, Leichtgewichtigkeit, Interaktivität oder Skalierbarkeit würden doch auch gut zu Datenforschung passen.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="http://twitter.com/rjurney" target="_blank">Jurney</a> (eventuell bekannt von dem Blog <a href="http://datasyndrome.com/" target="_blank">datasysndrome</a>) beginnt sein Buch auch mit einer kurzen Einführung in agile Prinzipien und wie diese in einem Datenanalyseteam umgesetzt werden können. Besonders geht er auf Rahmenbedingungen für produktives Arbeiten ein und beschreibt prozessuale Veränderungen, welche durch die Verbreitung von Big Data nötig werden. Danach werden Tools vorgestellt, um agiles Entwickeln in einem Datenanalyseteam zu ermöglichen. Sein Toolset umfasst u.a. <a href="http://avro.apache.org/" target="_blank">Avro</a>, <a href="https://pig.apache.org/" target="_blank">Pig</a>, <a href="http://www.mongodb.org/" target="_blank">MongoDB</a> zur Datenverarbeitung und -analyse bzw. <a href="http://flask.pocoo.org/" target="_blank">Flask</a>, <a href="http://getbootstrap.com/" target="_blank">Bootstrap</a> oder <a href="http://d3js.org/" target="_blank">d3</a> zur Datenvisualisierung.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Wie ein <i>roter Faden</i> zieht sich das Beispiel der Analyse und Visualisierung der Daten des eigenen Email-Kontos durch das Buch. Um diesen Anwendungsfall auch nachzubilden, sind drei Voraussetzungen nötig:</div>
<div style="text-align: justify;">
</div>
<ul>
<li>Verstehen von Python-Code</li>
<li>rudimentäre Kenntnisse von JavaScript, und</li>
<li>ein <a href="http://www.google.com/intl/de/mail/help/about.html" target="_blank">GMail</a>-Konto.</li>
</ul>
<br />
<div style="text-align: justify;">
Damit (und möglicherweise einer virtuellen Maschine, die -mit den Anleitungen in den Dokumenten zum Buch- einfach zu installieren ist) wird das Beispiel <i>relativ</i> einfach nachvollziehbar. Aus didaktischer Sicht ist das Beispiel gut geeignet, da wie im Buch vorexerziert wird, alle Schritte der Datenanalyse und -visualisierung daran angewendet werden können. Negativ zu erwähnen dabei ist jedoch, dass es sich in die lange Liste der Beispiele in Tutorials oder Bücher zu Themen der Datenforschung einreiht, die wenig bis gar keine Relevanz für den nützlichen Gebrauch in der Realität aufweisen. Außerdem ist es mehr als fragwürdig, dass vor allem die letzten Kapitel des Buches großteils aus Code-Snippets bestehen und die Beschreibung des Vorgehens den Dokumentationen der Tools im Netz überlassen wird.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Zusammenfassung</h3>
<div style="text-align: justify;">
Für Einsteiger in die Welt der Datenanalyse ist <a href="http://twitter.com/rjurney" target="_blank">Russel Jurney</a>´s Buch <a href="http://www.amazon.de/gp/product/1449326269/ref=as_li_ss_tl?ie=UTF8&camp=1638&creative=19454&creativeASIN=1449326269&linkCode=as2&tag=shed01-21">Agile Data Science</a><img alt="" border="0" src="http://ir-de.amazon-adsystem.com/e/ir?t=shed01-21&l=as2&o=3&a=1449326269" height="1" style="border: none !important; margin: 0px !important;" width="1" /> ungeeignet. Für erfahrene Datenwissenschafter kann es (<i>aber muss es nicht</i>) neue Einsichten bereitstellen, die den Umgang mit Daten erleichtern oder verbessern. Im Großen und Ganzen hinterlässt das Buch bei mir ein großes Fragezeichen hinsichtlich der Nützlichkeit des Buches. Einerseits hätte ich mir mehr Erklärung (bzgl. Prozessgestaltung, oder auch Anwendung der Tools) gewünscht. Andererseits liefert es aber sehr gute Ansatzpunkte, um den eigenen Workflow agiler zu gestalten.</div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-45428338031485635502014-04-08T21:43:00.000+02:002014-04-09T12:05:55.231+02:00MOOC: The Data Scientist's Toolbox<div style="text-align: justify;">
Diese Woche habe ich wiedermal einen <i>MOOC</i> zum Thema <b>Data Science</b> begonnen. Dies ist der Einstiegskurs zu den, in einem <a href="http://shed01.blogspot.co.at/2014/01/courseras-data-science-specialization.html" target="_blank">früheren Post</a> erwähnten, Data Science Specialization Kursen von <a href="https://www.coursera.org/" target="_blank">Coursera</a>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Leider war aus der Kursbeschreibung nicht ersichtlich, dass es sich dabei um eine reine Einführung in (und Werbung für) diese neue Specialization-Schiene handelt und nicht etwa um eine umfassende Beschreibung von relevanten Werkzeugen, wie der Titel vermuten lassen könnte.</div>
<div style="text-align: justify;">
Thematisch handeln die Lektionen von der Installation nötiger Software (va. <a href="http://www.r-project.org/" target="_blank">R</a> für die Analyse und <a href="http://git-scm.com/" target="_blank">Git</a> zur Versionskontrolle) und ein wenig einführender Worte zur Arbeit mit Daten. Der Arbeitsaufwand ist entsprechend gering - aktuell, habe ich alle Erfordernisse, abgesehen von der Benotung der Peers, mit einem Zeitaufwand von ca. 4h hinter mich gebracht. Etwas dürftig für einen 4 wöchigen Kurs ;)</div>
<div style="text-align: justify;">
Der Kurs ist für Datenwissenschaften-Interessierte als Zeitverschwendung anzusehen. Immerhin sollte davon ausgegangen werden können, dass jemand, der/die sich datenanalytisch betätigen möchte, gut dokumentierte Programme installieren kann.</div>
<div style="text-align: justify;">
<br /></div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.comtag:blogger.com,1999:blog-3823882897670238823.post-52750646180008471682014-03-07T17:17:00.000+01:002014-03-15T15:47:31.955+01:00Erste Experimente mit ViziCities<div style="text-align: justify;">
Ein interessantes neues Projekt, mit großem Potential für die <b>Datenvisualisierung</b> ist <a href="http://vizicities.com/" target="_blank"><b>ViziCities</b></a>. Es setzt auf aktuellen Webtechnologien auf und hat den Anspruch, Arten und Möglichkeiten von Visualisierungen von Big Data auf städtischem Darstellungsniveau zu erweitern.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
3D Datenvisualisierung auf Stadtniveau</h3>
<div style="text-align: justify;">
Eine erste Vorveröffentlichung kann auf <a href="https://github.com/robhawkes/vizicities" target="_blank">Github</a> gefunden werden und umfasst, trotz des frühen Entwicklungsstadiums, schon einige nützliche Features. Grundsätzlich erzeugt <b>ViziCities</b> eine <b>3-dimensionale Stadtlandschaft </b>im <b>Web-Browser</b>, auf der <b>Daten visualisiert</b> werden können. Das Stadtmodell setzt auf vereinfachte Daten von <a href="http://www.openstreetmap.org/" target="_blank">OSM</a> auf, wobei die Gebäudehöhen derzeit noch halb-zufällig geschätzt werden. Ziel ist es, die steigende Anzahl an <a href="http://de.wikipedia.org/wiki/Open_Data" target="_blank"><b>offenen Daten</b></a> zu nutzen und diese im 3D-Raum darzustellen. Auch mit <b>Echtzeit-Daten</b> soll experimentiert werden.</div>
<div style="text-align: justify;">
In einem <a href="http://vimeo.com/66495599" target="_blank">Video</a> stellen <b>Peter Smart</b> und <b>Rob Hawkes</b> ihr Projekt vor und geben einen interessanten Einblick über <b>mögliche Verwendungszwecke</b>. </div>
<br />
<h3>
Erster eigener Versuch</h3>
<div style="text-align: justify;">
Die Installation verlief problemlos - auch Dank der guten Anleitung in der README Datei. Um einen ersten Eindruck zu bekommen, habe ich die Beispielanwendung so abgeändert (im Grunde waren nur die Koordinatenwerte zu ändern), dass eine 3D-Ansicht meiner Heimatstadt im Browser angezeigt wird.</div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-PqXLzCApFRk/UxngPwIJEqI/AAAAAAAAARw/8y9dyMdh10A/s1600/screenshot_viziCities_SR.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://1.bp.blogspot.com/-PqXLzCApFRk/UxngPwIJEqI/AAAAAAAAARw/8y9dyMdh10A/s1600/screenshot_viziCities_SR.png" height="345" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Screenshot</i>: ViziCities - Steyr</td></tr>
</tbody></table>
<div style="text-align: justify;">
<div style="text-align: left;">
Die Qualität des Modells hat mich grundsätzlich positiv überrascht, auch wenn einige Details fehlerhaft sind. So wird beispielsweise ein Kanal auf dem Screenshot nicht gerendert, was auf diesem Level of Detail verkraftbar ist. In einem anderen Bereich des Modells werden jedoch die OSM-Ways soweit vereinfacht, dass anstatt des Hauptflusses durch die Stadt, ein weiterer Stadtplatz dargestellt wird. Die oft in OSM fehlenden Höheninformationen wirken sich auf die Wirkung des Modells auch negativ aus, was vor allem bei Städten mit hoher Höhenvarianz ein Problem darstellt. Nichtsdestotrotz stellt die erste Vorveröffentlichung schon eine gute Basis dar, um Daten auf städtischem Darstellungsniveau im 3D-Raum zu visualisieren. Weitere Experimente mit <b>ViziCities</b> (dann auch mit Analysedaten) werden meinerseits definitiv folgen - und auf diesem Blog dokumentiert.</div>
</div>
donK23http://www.blogger.com/profile/11885343817607596949noreply@blogger.com