Apples Health Daten mit Spark analysieren

Nicht alle Fitnesstracker verweigern den Export der Daten ihrer Besitzer. Seit dem iPhone 5s zeichnet der M6-Chip jeden Schritt seines Nutzers auf. Um an diese Daten zu gelangen und daraus ein paar nette Erkenntnisse zu ziehen, ist nicht viel Aufwand nötig. Um an die Daten zu kommen müssen diese aus der App mit dem Herz im Logo, exportiert werden. Dies erfolgt am einfachsten als Email in folgenden Schritten:

Zuerst muss man die Aktivitäts App öffnen und auf das Icon oben rechts mit dem Kopf im Kreis klicken

apple-health-001

Daraufhin erscheint das eigenen Profil und die Daten lassen sich über den Link Daten exportieren am unseren Rand exportieren.

apple-health-002apple-health-003apple-health-004

Die EMail enthält, je nach Zeit, eine mehrere Megabyte große ZIP-Datei mit. Ausgepackt enthält diese zwei XML-Dateien. Die größere von beiden enthält die relevanten Bewegungsdaten. Um die Daten einfach verarbeiten zu können, lohnt sich die Konvertierung in eine CSV-Datei. Da es sich um XML-Daten handelt liegt die Idee nahe, dass man diese am besten auch als XML-Objekt einliesst. Doch Vorsicht: Der resultierende DOM kann, je nach Datenmenge, sich zu einem beachtlichen Monster im Hauptspeicher aufblasen. Besser funktioniert es mit Lösungen die zeilenbasiert vorgehen. Ich habe die Lösung von Kristian Desch etwas adaptiert und einen CSV-Export integriert. Das Python Skript kommt gänzlich ohne zusätzliche Pakete aus und kann mit Hilfe von

bildschirmfoto-2017-01-07-um-14-00-12

von meinen GitHub-Account herunter geladen werden. Das Skript schaut in das lokale Verzeichnis nach der Datei Exportieren.xml und wandelt diese in eine Datei mit Namen AppleHealthData.csv um. Sind die Daten in dieses Format erst einmal konvertiert, kann die Verarbeitung innerhalb einer geeigneten Python- und Spark-Umgebung erfolgen. Am einfachsten besorgt man sich diese Umgebung als Docker-Container von DockerHub. Bewährt hat sich der Spark- und Jupyter-Docker-Container von Peter Parente.

bildschirmfoto-2017-01-07-um-14-02-32

Damit die CSV-Daten verarbeiten können müssen diese in den Docker-Container kopiert werden. Dies geht wieder über einen Kommandozeilen-Aufruf mit

$ docker cp AppleHealthData.csv pyspark-notebook:/home/jovyan/work/.

Innerhalb eines neuen Jupyter-Notizbuchs kann die CSV-Datei in ein Spark DataFrame geladen werden.

bildschirmfoto-2017-01-07-um-14-06-48

Das Spark-Dataframe ermöglicht die Verarbeitung der Daten über einfache Funktionen. So ermöglicht die Funktion printSchema() die Ansicht des Schematas der CSV-Daten:

bildschirmfoto-2017-01-07-um-14-11-01

Die Daten enthalten 4 Spalten. In der ersten Spalte steht der Zeitstempel der Aktivität, in der zweiten Spalte der Quelle (z.B. iPhone, Apple Watch etc.), in der dritten Spalte der so genannte HealthType und in der letzten Spalte der so genannte HealthValue. Schauen wir uns den HealthType mal etwas genauer an

bildschirmfoto-2017-01-07-um-14-14-15

Wie zu erkennen ist, stehen in den Daten ganz unterschiedliche Arten von Gesundheitsdaten. Schauen wir uns einmal die Daten eines bestimmten HealthTypes an

bildschirmfoto-2017-01-07-um-14-15-49

Zu sehen sind die Schritt-Messungen meines iPhones aus dem November 2015 auf Sekundenbasis. Aber auch andere Daten sind interessant. Mit Hilfe des HealthTypes KQuantityTypeIdentifierHeartRate wurde die Herzfrequenz mit Hilfe der Apple Watch gemessen.  Den Durchschnittswert aller Messwerte, das Minimum und das Maximum liefert folgende Abfrage

bildschirmfoto-2017-01-07-um-14-20-07

Möchte man lieber die SQL-Notation für die Abfrage der Daten nutzen, so lässt sich dies über den SqlContext von Spark realisieren.

bildschirmfoto-2017-01-07-um-14-23-11

Ich hoffe, die gezeigten Beispiele konnten einen ersten Überblick darüber geben, wie einfach es ist mit Hilfe von Python und Spark, die Gesundheitsdaten von Apples iPhone zu verarbeiten und zu analysieren.

Schreibe einen Kommentar


(required)