Hacking Sebastian – Teil 3 – Analyse

Wie entwickelt sich das Körpergewicht, mit einem Döner in der Hand, bei 33°C Außentemperatur?! Der Fokus dieses dritten Teils der Quantified Self Serie, liegt in der Präsentation einer Reihe von unterschiedlichen Analysen. In den vorherigen Teilen der Serie wurden die Datenquellen und der Import beschrieben. Die Analyse bildet somit den Kernbereich des Projektes. Zusätzlich beinhaltet der Artikel, Denkanstöße und Ausblicke für tiefer gehende Analysemöglichkeiten. Diese weiteren Ansätze werden möglicherweise die Basis für weitere Artikel sein.

Gewicht, Körperfett, Wasseranteil, Muskelmasse

Gewicht, Körperfett, Wasseranteil und Muskelmasse Übersicht
Gewicht, Körperfett, Wasseranteil und Muskelmasse Übersicht

Im ersten Teil erwähnte ich bereits kurz meine Lebensumstellung. Dadurch lässt sich ein schöner Verlauf des Körpergewichts erkennen. Zusätzlich ist der fallende Anteil des Körperfetts erkennbar, bei gleichzeitigem Zuwachs von Muskelmasse und dem Wasseranteil. Die Werte sind mit einer handelsüblichen Waage ermittelt worden. Insbesondere der Fettanteil ist damit nicht unbedingt korrekt, für einen Trend aber ausreichend. Die Darstellung erfolgt als einfaches Flächendiagramm, auf Basis der Pivot-Tabellen in Excel.

Ernährung

Die Analyse der Ernährung übernimmt MyFitnesPal bereits sehr gut. Die Standardreports, von der Webseite, sind in Excel leicht nachbaubar. Über den Umfang der normalen Reports hinweg, hatte ich weiteren Informationsbedarf. Die erste Analyse umfasst die Kalorien je Monat. Hierbei lassen sich Monate mit einem erhöhten Bedarf an Kalorien erkennen. Nebenbei ermöglicht der Bericht das Verfolgen und Vorbeugen von vermehrtem Kalorienkonsum. Steigt die Summe jeden Monat an, ist dies möglicherweise ein Warnsignal. Hohe Abweichungen sind auch ein Indiz für viele Geburtstage oder Partys. Die Grafik berücksichtigt bei den Summen nicht die unterschiedliche Anzahl von Tagen im Monat. Der Mittelwert konnte hier nicht genutzt werden, da die Datenbasis einzelne Speisen summiert und nicht die Tage. Somit wäre der Wert abhängig von der Anzahl der Nahrungsmittel je Tag gewesen. Für den Mittelwert müsste eine Datenbank View auf Basis der Summe eines Tages angelegt werden.

Kalorien je Monat
Kalorien je Monat

Eine weitere Analyse ist die Verteilung der Kalorien auf die einzelnen Mahlzeiten des Tages. Hieraus lässt sich erkennen, dass die Snacks, also Mahlzeiten vom Vormittag und Nachmittag, einen großen Teil des Tages ausmachen. Unter die Snacks fallen bei mir auch die ungesunden Ausrutscher im Monat (Eis, …).  Die dritte Analyse umfasst die Makronährstoffe je Mahlzeit. Hiermit kann beispielsweise ermittelt werden, ob die Kohlenhydrate am Anfang oder am Ende des Tages zugeführt wurden.

Verteilung der Kalorien
Verteilung der Kalorien
Makros nach Mahlzeiten
Makros nach Mahlzeiten

Training

Die Analyse des Trainings ist extrem umfangreich. Runtastic bietet hier einen enormen Schatz an Statistiken, insbesondere als Gold Member. Laufanalysen und Kilometer genauer Aufschlüsselung können ebenso wie die aktivsten Tageszeiten ermittelt werden. Meine erste Analyse umfasst die historische Betrachtung der Leistung einzelner Kraftsportübungen. Mit einer einfachen Kurve ist der Zuwachs beim Bankdrücken, Kreuzheben und anderen Übungen schnell erkennbar.

Training Gewicht
Training Gewicht

Die zweite Grafik zeigt die einzelnen Sportarten, nach der Dauer der bisherigen Ausübung, auf. Hieraus kann die überproportionale Häufigkeit von Kampfsport im Gegensatz zu Joggen, Reiten und Tanzen erkannt werden. Vorstellbar ist auch eine historische Sicht, wie sich diese Verteilung verändert.  Die beiden letzten Grafiken stellen die gesamte Ausübung von Sport pro Wochentag und historisch da. Hier ist eine relativ homogene Verteilung der Zeiten in der ersten Analyse sichtbar. Im Gegensatz zu einer, sich verschiebenden Aufteilung, in der zweiten Sicht.

Sport nach Tagen
Sport nach Tagen
Sport nach Wochen
Sport nach Wochen

Weitere

Die im ersten Teil der Serie vorgestellten Bereiche, sind im oberen Bereich des Artikels noch nicht in aller Gänze beschrieben. Hier folgen einige Ideen und Überlegungen für mögliche weitere Analysen auf Basis der Quantified Self Idee.

PC Nutzung

Im Wesentlichen sind die Informationen bereits aus dem Tool ablesbar. Anhand der vorgefertigten Reports lässt sich erkennen, dass ein guter Teil meiner Freizeit, die ich vor dem PC verbringe, auf sozialen Plattformen wie Facebook und Twitter vertrödelt wird. Zusätzlich mischen sich Foren und Newsseiten dazu. Der Rest ist dann spezifisch für die Aufgaben des Tages (Softwareentwicklung, Fotobearbeitung, …). Die Nutzung in der Firma verteilt sich auf Outlook und Ticketsysteme. Mittags und am frühen Morgen gesellen sich Newsseiten und Technologieforen dazu.

Orte – Schlaf

Bisher sind noch nicht genügend Daten zusammengekommen, damit eine relevante Quantified Self Analyse möglich ist. Lediglich eine durchschnittliche Zeit von 7,09 Stunden Schlaf pro Nacht ist ablesbar.

Konten

Das Auswerten der Kontenbewegung ist eine spannende Tätigkeit. Die Kernfragen dazu lauten „Wo kommt mein Geld her?“, was sich naheliegend mit „vom Arbeitgeber“ beantworten lässt und der Frage „Wohin verschwindet das ganz Geld denn wieder?“. Für die Aufschlüsselung clustere ich die einzelnen Zahlungsempfänger. Ob nun 70 Euro zu Tankstelle A und 60 Euro zu Tankstelle B gehen ist nicht relevant, wohl aber die Aussage, 130 Euro für das Tanken gezahlt zu haben. Die genaue Aufstellung meiner Konten ist hier natürlich nicht aufgelistet. Allerdings gehören neben den Barentnahmen am Geldautomaten und Einkäufe im Supermarkt, auch Amazon und Tankstellen zu den Top Ausgaben.

Mails, Wetter, Kopfschmerzen

Mails: Das Auslesen der Mails ist noch nicht umgesetzt. Wetter: Hier fehlen mir noch Ansätze für sinnvolle Korrelationen. Kopfschmerzen: Hier fehlt ebenfalls eine aussagekräftige Datenbasis. Viele der Grafiken sind um die Achsenbeschriftungen und Legenden, aus Platzgründen, beschnitten. Anregungen und Ideen für weitere Quantified Self Analysen bitte gerne an mich.

Hacking Sebastian – Teil 2 – Umsetzung

Quantified Self oder wie Kopfschmerzen in der Datenbank aussehen und welche Webseiten diese verursachen. Hauptziel des Projektes ist die Auswertung meiner persönlichen Daten. Die Tools zur Erfassung, Verarbeitung und Darstellung von Daten müssen daher so einfach wie nötig und so mächtig wie möglich sein. Aufgrund meiner umfangreichen Softwareentwicklungserfahrung habe ich mich für die Programmiersprache C# entschieden. Als Frontend wird eine Webseite mittels ASP.NET MVC erstellt. Das Framework erlaubt die schnelle Generierung von Webseiten auf Basis bestehender Datenmodelle. Komplexe Bearbeitungsdialoge entfallen somit und die automatische Generierung übernimmt den größten Teil der Arbeit. Als Entwicklungsumgebung kommt Microsoft Visual Studio Express 2013 for Web zum Einsatz. Die Daten werden in einer Microsoft SQL Server Datenbank gespeichert. Die Applikation lässt sich in vier Bereiche aufteilen.

Code
Code

Funktionen

  • Daten importieren
  • Daten erfassen
  • Daten auflisten
  • Analyse
Hacking Sebastian Homepage
Hacking Sebastian Homepage

Das Importieren der Daten ermöglicht es CSV, TCX und andere Dateiformate automatisch in die Datenbank zu übernehmen. Daten die nicht in anderen Applikationen und Webseiten erfasst werden benötigen eine eigene Eingabemaske für die Erfassung. Zur Überprüfung der erfassten und importieren Daten hilft die Auflistung. Die Analyse ist das Herzstück der Applikation. Hier werden die Quantified Self Informationen in Korrelation gesetzt und wichtige Erkenntnisse gewonnen (oder bunte Bilder erstellt ;-)).

Tabellen (Database first)

Der Einfachheit halber erstelle ich zuerst alle Tabelle in der Datenbank. Aus den Tabellen generiert Visual Studio die Model Klasse, die im Anschluß für die Importer nutzbar sind. Anhand der generierten Klassen können auch die Controller und Views automatisch erstellt werden. Die Dialoge benötigen danach keinerlei Überarbeitung mehr. Validierung und Security entfallen weil die Applikation nicht im Internet erreichbar sein wird.

Import – CSV (FullFitness, Geofency, …)

CSV Dateien sind extrem einfach zu parsen. Ein gutes Framework ermöglicht das Spezifizieren der Trennzeichen und möglicher Anführungszeichen. Die Klasse Microsoft.VisualBasic.FileIO.TextFieldParser ist hier hervorragend geeignet. Obwohl diese aus dem VisualBasic Namespace stammt, kann sie einfach eingebunden werden. Beispiel:

using (TextFieldParser parser = new TextFieldParser("Geofency.csv")) {
    parser.SetDelimiters(",");
    parser.HasFieldsEnclosedInQuotes = true;
    while (!parser.EndOfData) {
        parser.ReadFields();
        ...
    }
}

Die Felder sind danach direkt in die generierten Model Klassen übertragbar.

Import – TCX (Runtastic)

Training Center XML (TCX) is a data exchange format introduced in 2007 as part of Garmin’s Training Center product. The XML is similar to GPX since it exchanges GPS tracks, but treats a track as an Activity rather than simply a series of GPS points. TCX provides standards for transferring heart rate, running cadence, bicycle cadence, calories in the detailed track. It also provides summary data in the form of laps. (Wikipedia)

Mit der Klasse System.Xml.XmlDocument sind die XML Dateien leicht lesbar. Wichtig ist die Einbindung des XmlNamespaceManager, er ermöglicht Zugriff auf die Garmin Datei für XPath Abfragen. Beispiel:

XmlDocument doc = new XmlDocument();
doc.Load(file.FullName);
XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(doc.NameTable);
xmlnsManager.AddNamespace("x", "http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2");
var node = doc.SelectNodes("//x:Activity", xmlnsManager).Item(0);
...

Import – Web (MyFitnessPal)

Leider ist die Druckversion kein valides XML. Mit Hilfe des HtmlAgilityPack können HTML Dokumente ausgelesen und analog zu XML Dateien verarbeitet werden. Beispiel:

HtmlDocument doc = new HtmlDocument();
doc.Load(file.FullName, System.Text.UnicodeEncoding.UTF8);
var days = doc.DocumentNode.SelectNodes("//h2[@id='date']");
...

Erfassen (Kopfschmerzen)

Hacking Sebastian Input
Hacking Sebastian Input

Bei der Erstellung von Standardformularen und Eingabemasken kommt die größte Stärke des ASP.NET MVC Frameworks zum Tragen. Visual Studio ermöglich die Generierung eines Controllers für bestehende Model Klasse. Zusätzlich werden die Views für Auflisten, Anlegen, Bearbeiten und Löschen (CRUD) erstellt. Somit lässt sich die Bearbeitungsmaske für die Kopfschmerzen mit einem Dialog erstellen.

Auflisten

Das Auflisten funktioniert analog zum Erfassen. Mit einem Klick kann der Controller erstellt werden, inklusive aller CRUD Views. Die überflüssigen Views lassen sich einfach löschen.

Auflistung
Auflistung

Analyse

Excel Export/Import
Excel Export/Import

Zur Auswertung der Daten ermöglichen diverse Tools unzählige Möglichkeiten. Am einfachsten ist Excel einsetzbar. Durch die native Einbindung des SQL Servers ist ein direkter Zugriff auf die Tabellen möglich. JavaScript in HTML5 erlaubt die Erstellung von interaktiven Grafiken. Beispielsweise mit Highcharts. Statische Analysen sind durch Sprachen wie R möglich. Die eingesetzten Tools hängen von den Daten ab und führen zu den Ergebnissen der Analyse.

Ergebnisse der Analyse

Im nächsten Teil der Quantified Self Serie.

Hacking Sebastian – Teil 1 – Daten (Quantified Self)

„Hacking Sebastian“ oder warum Döner und Kopfschmerzen vielleicht im Zusammenhang stehen. Seit einigen Jahren beschäftige ich mich bereits damit, Daten über mich selber zu sammeln. Mittlerweile habe ich viele unterschiedliche Quellen und die Daten liegen überall verstreut. Auf Basis einer Webapplikation mit Microsoft SQL Server Datenbanken ist hier der Versuch beschrieben, alle Daten zu sammeln und aufzubereiten. Das Projekt läuft unter dem Namen „Hacking Sebastian“. Es wird eine Reihe von Artikeln beinhalten, die in der Übersicht aufgelistet sind.

Die Idee hinter der Sammlung und Auswertung der Daten gibt die Info Webseite, der deutschen Quantified Self Bewegung, sehr gut wieder: […]Ähnlich einem Spiegel liefern Daten über uns selbst eine Möglichkeit, uns zu reflektieren und zu erkennen, was bessere, informiertere Entscheidungen erlaubt. Die dabei eingesetzten Verfahren umfassen Selbst-Experimente, Verhaltens-Beochachtung, Lifelogging, die Erfassung biometrischer Informationen, Psychologische Tests, Dienste zur medizinischen Selbstdiagnose, Genomsequenzierung und vieles mehr.

Datenquellen ermitteln

Im ersten Schritt musste ich mir die Frage beantworten welche potentiellen Datenquellen ich gerne nutzen möchte. Dabei bin ich auf die nachfolgende Liste gekommen.

  • Gewicht, Körperfett, Wasseranteil, Muskelmasse
  • Ernährung
  • PC Nutzung
  • Training
  • Orte
  • Konten
  • Mails
  • Wetter
  • Sonstige: Kopfschmerzen, ToDo Listen, …

Datenquellen nutzen

Für jede Datenquelle stellt sich dann die Frage, wie ich an diese Daten komme und wie diese Daten erhoben werden. Hierzu stelle ich meine derzeitigen Lösungen und Überlegungen dazu vor.

Gewicht, Körperfett, Wasseranteil, Muskelmasse

MyFitnessPal Gewicht
MyFitnessPal Gewicht

Die wichtigsten Körperdaten erfasse ich seit meiner Lebensumstellung jeden Sonntag. Alle Daten trage ich dann in unterschiedlichen Portalen und meinen Excel-Tabellen ein. Diese Daten sind somit sehr einfach in das Portal zu übernehmen und dort auszuwerten.

Ernährung

Meine Essgewohnheiten trage ich täglich bei MyFitnessPal ein. Hier können alle Mahlzeiten zu Frühstück, Mittagessen, Abendbrot und alle Snacks ermittelt werden. Dabei sind für mich die Kalorien, Fette, Proteine und Kohlenhydrate relevant. Leider gibt es auf der Webseite keinen direkten Export, in einem sinnvollen Format. Für die Auswertung werde ich daher die Druckversion des Tagebuchs auslesen und in die Datenbank schreiben.

PC Nutzung

ManicTime Screenshot
ManicTime Screenshot

Die Software ManicTime läuft auf meinen Computern im Hintergrund und protokolliert somit den ganzen Tag das Nutzungsverhalten. Eine Aufteilung auf Programme, Dokumente und Webseiten ist hier möglich. Zusätzlich können die Zeiten in denen der PC gesperrt ist mit einem Tag versehen werden. Die Kennzeichnung ermöglicht eine Auswertung der Abwesenheit. ManicTime speichert die Daten lokal in einer eigenen Datenbank. Hier ist zu prüfen ob diese genutzt werden kann.

Training

FullFitness
FullFitness

Mein Training erfasse ich in unterschiedlichen Programmen. Als zentrale Stelle, für eine Übersicht aller Sportarten, nutze ich Runtastic. Beim Joggen werden die relevanten Informationen dort automatisch eingetragen, sofern ich mit dem Smartphone laufe. Runtastic ist nun leider nicht unbedingt dafür bekannt, die gesammelten Daten herzugeben. Mittels eines Scripts, für Greasemonkey, im Firefox, können aber alle Trainings als TCX Dateien exportiert werden. Einfacher ist das Verfolgen des Krafttrainings. Mit der App „Full Fitness“ für das iPhone kann ich alle Trainingseinheiten präzise dokumentieren. Das Programm ermöglicht das Verschicken von CSV Dateien. Diese lassen sich einfach in die Datenbank importieren.

Orte

Die App „Geofency“ ermöglicht das automatisierte Verfolgen von Standorten mittels Geofencing. Dazu werden für wichtige Orte GPS Daten eingetragen. Immer wenn das Smartphone in den Bereich kommt, erfasst die App die Anwesenheit. Für die Arbeit und mein Zuhause habe ich diese Daten eingetragen. Um zu ermitteln wie oft und lange ich im Auto sitze habe ich dort einen iBeacon angebracht. Das iBeacon sendet per Bluetooth Low Energy ständig Daten. Das iPhone erkennt die Anwesenheit und protokollierte diese ebenfalls. Die Geofency App ermöglicht das Verschicken der Daten als CSV Datei. Mit der App „ATracker“ können manuell weitere Zeiten erfasst und ebenfalls per CSV Datei verschickt werden. Leider funktioniert der Versand nur in der Pro Version.

Geofency
Geofency

Konten

Der Verlauf der Zahlungseingänge und aller Ausgaben kann über das Portal der Sparkasse eingesehen und in beliebigen Formanten exportiert werden.

Mails

Sämtliche E-Mails lassen sich einfach per IMAP abrufen. Hier sind die Antwortzeiten der E-Mails interessanter. Mit Hilfe der Daten lassen sich produktive Zeiten erkennen. Dazu hat Stephen Wolfram in seinem Blog einen interessanten Artikel (The Personal Analytics of My Life) verfasst.

Wetter

Mein Raspberry Pi zeichnet bereits alle Wetterdaten auf. Allerdings gibt es auch genügend Quellen im Internet. Mögliche Korrelationen muss ich hierzu aber noch finden.

Kopfschmerzen

Leider habe ich hin und wieder Kopfschmerzen. Ein Webformular erstelle ich für das Erfassen eines Kopfschmerztagebuchs.

Umsetzung

Im nächsten Teil der Serie.

Gefahren

Ein Wort der Warnung zum Abschluss. Insbesondere Informationen, wie die Ankunft und Abwesenheit von Zuhause sollten nicht (als Liste) veröffentlicht werden. Damit lässt sich andernfalls ermitteln wann die Wohnung leer ist. Für jeden Wert und jeden Datensatz sollte eine Bewertung der potentiellen gefahren erfolgen. Aus diesem Grund ist das „Hacking Sebastian“ Portal auch nicht im Internet erreichbar!

Raspberry Pi Gesichtserkennung

Auf adafruit.com gibt es einen spannenden Artikel zum Thema Gesichtserkennung mit dem Raspberry Pi. In dem Artikel geht es darum eine Holzkiste zu verschließen bzw. zu öffnen, wenn das korrekte Gesicht erkannt wird.

Ein anderer Artikel ermöglicht die gezielte Differenzierung von Gesichtern.

Als Ausblick werde ich versuchen die Entwicklung als Basis für eine Hausautomatisierung zu nutzen. Ein Update folgt bald.

Um die Playstation Eye Camera zu nutzen gibt es einen weiteren Artikel.

iBeacon für die Haussteuerung

Das Leuchtfeuer im eigenen Haus. Die iBeacon erfreuen sich nicht nur im Einzelhandel wachsender Beliebtheit. Das eigene Haus und das Auto profitieren auch vom digitalen Leuchtfeuer.

Technisches Prinzip

Das Prinzip der iBeacons ist einfach wie genial. In regelmäßigen Abständen sendet das Gerät eine 16 Byte Unique ID, sowie eine jeweils 2 Byte lange Major und Minor ID (Quelle: Apple Developer. Entwickler haben die Möglichkeit diese IDs abzufragen und entsprechend darauf zu reagieren. Im Einzelhandel beispielsweise durch das Anzeigen von Tagesangeboten wenn der Kunde in einem bestimmten Bereich des Marktes steht (und er die App des Händlers/Kette installiert hat).

Geofency

Für die Hausautomatisierung bietet sich eine fertige App wie Geofency an. Geofency erlaubt das Anlegen von GPS Bereichen und das Tracken von iBeacons. Für jeden Ort kann eine eigene Webadresse aufgerufen werden. Hier sind nun unzählige Szenarien denkbar. Mit einem iBeacon im Auto lässt sich die eigene Anwesenheit im Auto erkennen, wird dieser Wert mit dem Heimatort verbinden, dann kann das Garagentor geöffnet werden. Ein iBeacon im Sportraum ermöglicht das automatisch Einschalten von Beleuchtung und Musik beim Betreten (Geofency ruft beim Erkennen des iBeacon eine URL auf, hinter der sich die Haussteuerung befindet. Diese aktiviert dann die Funktsteckdosen).

FHEM und Anwesenheitserkennung

FHEM beinhaltet mittlerweile ein Modul für die Anwesenheitserkennung. Das Modul kann mittels des folgenden Aufrufs aktiviert werden.

define geofancy GEOFANCY geo

Die einmalige Einrichtung ist etwas umfangreicher aber hervorragend auf der FHEM Wiki Webseite dokumentiert.

 

Bildquelle: https://itunes.apple.com/app/id615538630