Hacking Sebastian – Teil 2 – Umsetzung

Hacking Sebastian – Teil 2 – Umsetzung

 10.07.2014,  02.01.2020 -  Sebastian Pech -  ~4 Minuten

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

Funktionen

  • Daten importieren
  • Daten erfassen
  • Daten auflisten
  • Analyse

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

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

Analyse

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 .