Posts mit dem Label Bootstrap werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Bootstrap werden angezeigt. Alle Posts anzeigen

2014/10/31

visualisierung mit bokeh: beliebte vornamen in OÖ

erste versuche mit Bokeh

Bokeh ist eine python bibliothek für interaktive visualisierungen und datenplots. entwickelt wird sie von Continuum Analytics, 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.

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 visualisierungs-beispiele repo 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.

als beispielanwendung habe ich mich auf eine simple visualisierung mittels einer heatmap festgelegt. da bokeh auch eine eigene methode und ein beispiel in der gallery bereit stellt. als zusätzliches ziel setzte ich mir die einbindung eines bokeh-plots in eine statische webseite.

thema: beliebte vornamen

als datenquelle für dieses projekt hat sich der vornamen datensatz des landes oö (über daten.gv.at) 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 Bokeh 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.

sobald die visualisierungen erstellt waren, wurden die plots in ein bootstrap template importiert. das vorgehen (im web-beispiele repo 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:


zusammenfassung

einbindung und verwendung der python visualisierung-bibliothek Bokeh sind einfach. das potential des projekts ist gross, aktuell gibt es jedoch noch einige mängel, va bezüglich der dokumentation.
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.

2014/08/22

reporting mit flask

um die möglichkeiten von flask zum erstellen eines reports zu testen, habe ich ein einfaches beispiel über wohnbautätigkeiten zusammen gestellt. zum ausprobieren der anwendung steht der code im python repo von diesem blog unter FlaskReporting zur verfügung.
image home screen
home screen

thema: wohnbautätigkeit in österreich

da es in dem beispiel eigentlich um die anwendung gehen sollte, habe ich datenzusammenstellung, -analyse und -visualisierung simpel gehalten. die daten stammen von statistik austria [ironiemodus an] DEM ansprechpartnerfür historische daten von österreich [ironiemodus aus] und bestehen aus 2 datensätze über die anzahl von fertiggestellten gebäuden mit wohnungen 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.
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.

flask 

mit ein wenig kenntnissen in python und einigen tutorials war es überaus einfach, mit geringem aufwand, eine einfache reporting app zu entwickeln. der code 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 pandas und der matplotlib) 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.

report

zusammenfassung

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.

2014/05/19

Befragungs-App mit QtQuick und Python

Nachdem ich in letzter Zeit ein wenig mit QtQuick herum gespielt habe, war es an der Zeit einen funktionierenden Prototypen zu erstellen. Ich entschied mich, eine simple Befragungs-App zu entwickeln, die auf Tablets oder Touchscreens zum Einsatz kommen könnte.

Interaktion QtQuick mit Python

Die Anwendung ist so aufgeteilt, dass der in QML geschriebene QtQuick Teil die User Interaktion übernimmt, Python die Anwendung beginnt (bzw. schließt) und die erhobenen Daten in eine Output-Datei prozessiert.
Grundsätzlich ist die Interaktion von QtQuick mit Python über PyQt- oder PySide-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 PyQt5 (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 Fedora 20 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 natürlicher funktioniert als mit dem PyQt4 QDeclarativeView.
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 CSV-Datei).

Layout

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 Boxen-Layout als grafisches Paradigma entschieden. Dieses kommt auch dem möglichen Anwendungsfall auf mobilen Geräten mit Touch-Eingabe entgegen. 
Auch hier wieder eine Einschränkung durch den Umstand, nicht PyQt5 verwenden zu können. Mit QtQuick 2 und dem Modul Window 2.0 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.
Als Symbole werden Icons aus Font Awesome verwendet. Der Import von Zeichen aus dieser ikonografischen Schrift für Bootstrap ist sehr gut auf Marks's KDE Blog beschrieben. Als Schriftart für Textelemente wird Verdana eingesetzt.
Py_QML_Befrager: Item Selbstanbau

Thema "Selbstversorgung"

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 sehr unwichtig bis sehr wichtig) und Wünschbarkeit (sehr unerwünscht bis sehr erwünscht) von bzw. Zustimmung (lehne stark ab bis stimme stark zu) 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.
Py_QML_Befrager: Item Geschlecht

Testen und Fazit

Wer selbst mit der App ein wenig herum spielen möchte, der Quellcode und Ressourcendateien sind im Python-Beispiele Repo für diesen Blog auf Github unter dem Verzeichnis "PyQML_Box_Befrager" abgelegt.
Als Fazit 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.