[PYTHON] Aggregieren Sie die Anzahl der Schritte pro Tag aus den iPhone-Gesundheitsdaten, um eine CSV-Datei zu erstellen

Ich habe es genossen, Android Wear und Apple Watch zu tragen, als sie herauskamen, aber ich möchte die Uhr immer noch so verwenden, wie ich es mag, also verwende ich sie nicht mehr als Aktivitätsanzeige. Auf dem iPhone ist standardmäßig eine App installiert, mit der Gesundheitsdaten aufgezeichnet werden können, die Sie jeden Tag ohne Aktivitätsmesser mit sich herumtragen. Da die Daten gesammelt wurden, möchte ich sie vom iPhone exportieren und für die Datenanalyse verwenden.

Exportieren Sie Gesundheitsdaten vom iPhone

Öffnen Sie Healthcare in der iPhone-App und tippen Sie oben rechts auf das Profilsymbol.   health-1.png

Tippen Sie auf Ihrer Profilseite auf "Gesundheitsdaten exportieren".   health-2.png   Tippen Sie im Bestätigungsdialog auf "Exportieren".   health-3.png

Tippen Sie auf den Dienst, für den Sie Gesundheitsdaten exportieren möchten.   health-4.png

Wenn Sie iCloud Drive auswählen, wird das Archiv im Ordner iCloud Drive des synchronisierten PCs mit dem Dateinamen "Exported Data.zip" gespeichert.

CSV-Konverter

Gesundheitsdaten sind eine XML-formatierte "exportierte data.xml" -Datei in der "exportierten data.zip". Da die Schrittzählungsdaten von Excel verwaltet werden, habe ich ein Skript geschrieben, um sie in CSV zu konvertieren, damit sie leicht kopiert und eingefügt werden können.     Um es zu verwenden, klonen Sie zuerst das Repository von hier.

$ git clone https://github.com/masato/health-data-csv.git
$ cd health-data-csv

Kopieren Sie die exportierte Datei data.zip in das geklonte Verzeichnis. Für macOS befindet sich iCloud Drive im folgenden Verzeichnis. Doppelte Anführungszeichen, da der Pfad ein halbes Feld enthält.

$ cp "$HOME/Library/Mobile Documents/com~apple~CloudDocs/Exportierte Daten.zip" .

convert.py ist ein Python-Skript, das das XML von Gesundheitsdaten aus der Zip-Datei extrahiert, die Anzahl der Schritte pro Tag aggregiert und in eine CSV-Datei ausgibt. Nur die Schrittzähldaten werden aus dem Element "Record" extrahiert, indem "type" in "HKQuantityTypeIdentifierStepCount" angegeben wird. Ich studiere Einführung in die Datenanalyse mit Python-Datenverarbeitung mit NumPy und Pandas, also das Datenanalysetool pandas Lassen Sie uns die Aggregation implementieren und mit (/ //pandas.pydata.org/) in CSV exportieren.   Gemäß dem Artikel Umgang mit einer Zip-Datei mit einem japanischen Dateinamen in Python 3 entspricht der japanische Dateiname "Exported data.xml". Es scheint von cp437 entschlüsselt zu werden.

convert.py


# -*- coding: utf-8 -*-

from lxml import objectify
import pandas as pd
from pandas import DataFrame
from dateutil.parser import parse
from datetime import datetime
import zipfile
import argparse
import sys, os

def main(argv):

    parser = argparse.ArgumentParser()
    parser.add_argument('-f', '--file',
                        default='Exportiert.zip',
                        type=str,
                        help='Name der Zip-Datei(Exportiert.zip)')
    parser.add_argument('-s', '--start',
                        action='store',
                        default='2016-01-01',
                        type=str,
                        help='Anfangsdatum(2016-12-01)')

    args = parser.parse_args()

    if not os.path.exists(args.file):
        print('Bitte geben Sie den Namen der Zip-Datei an.')
        parser.print_help()
        sys.exit(1)

    zipfile.ZipFile(args.file).extractall()

    parsed = objectify.parse(open('apple_health_export/Exportierte Daten.xml'
                                  .encode('utf-8').decode('cp437')))

    root = parsed.getroot()

    headers = ['type', 'unit', 'startDate', 'endDate', 'value']

    data = [({k: v for k, v in elt.attrib.items() if k in headers})
            for elt in root.Record]

    df = DataFrame(data)
    df.index = pd.to_datetime(df['startDate'])

    #Nur die Anzahl der Schritte
    steps = df[df['type'] == 'HKQuantityTypeIdentifierStepCount'].copy()
    steps['value'] = steps['value'].astype(float)

    #In Scheiben schneiden, wenn das Startdatum in gutem Zustand ist
    if args.start:
        steps = steps.loc[args.start:]

    #Nach Tag gruppieren und aggregieren
    steps_sum = steps.groupby(pd.TimeGrouper(freq='D')).sum()

    steps_sum.T.to_csv('./steps_{0}.csv'.format(datetime.now().strftime('%Y%m%d%H%M%S')),
                       index=False, float_format='%.0f')

if __name__ == '__main__':
    main(sys.argv[1:])

Führen Sie das Python-Skript aus

Verwenden Sie zum Ausführen des Skripts continuumio / anaconda3 für das Docker-Image. Ein Docker-Image, das Anaconda für die Datenanalyse verwendet. Jupyter ist ebenfalls installiert.   Das Python-Skript verwendet das Flag "-f", um den Namen der Zip-Datei im aktuellen Verzeichnis anzugeben, das aus Healthcare exportiert wurde. Mit dem Flag "-s" können Sie das Startdatum des Datensatzes angeben, der in CSV konvertiert werden soll.

$ docker pull continuumio/anaconda3
$ docker run -it --rm \
  -v $PWD:/app \
  -w /app \
  continuumio/anaconda3 \
  python convert.py -f Exportierte Daten.zip -s 2016-12-01

Im aktuellen Verzeichnis wurde eine CSV-Datei wie "step_xxx.csv" erstellt, die die Anzahl der Schritte pro Tag aggregiert.

$ cat steps_20161212013800.csv
2016-12-01,2016-12-02,2016-12-03,2016-12-04,2016-12-05,2016-12-06,2016-12-07,2016-12-08,2016-12-09,2016-12-10,2016-12-11
7217,8815,2260,1828,3711,6980,7839,5079,7197,7112,2958

Recommended Posts

Aggregieren Sie die Anzahl der Schritte pro Tag aus den iPhone-Gesundheitsdaten, um eine CSV-Datei zu erstellen
Python-Skript, das eine JSON-Datei aus einer CSV-Datei erstellt
Erstellen Sie eine Dummy-Datendatei
So erstellen Sie eine Konfigurationsdatei
[Python] Speichern einer CSV-Datei als eindimensionale Array-Daten
So erstellen Sie mit Faker eine CSV-Dummy-Datei mit Japanisch
So erstellen Sie einen Klon aus Github
Erstellen Sie eine Deb-Datei aus einem Python-Paket
So erstellen Sie ein Repository aus Medien
Skript zum Erstellen einer Mac-Wörterbuchdatei
Lassen Sie Code Day6 ab Null beginnen "1342. Anzahl der Schritte, um eine Zahl auf Null zu reduzieren"
Ich habe ein Paket erstellt, um eine ausführbare Datei aus dem Hy-Quellcode zu erstellen
Erstellen von CSV-Beispieldaten mit Hypothese
Bearbeiten Sie Excel in Python, um eine Pivot-Tabelle zu erstellen
Lesen einer CSV-Datei mit Python 2/3
So erstellen Sie ein Funktionsobjekt aus einer Zeichenfolge
Erstellen Sie einen Datensatz, indem Sie zufällig MNIST-Daten auswählen
So erstellen Sie eine JSON-Datei in Python
Schritte zum Erstellen eines Twitter-Bots mit Python
Lesen Sie mit Python Zeile für Zeile aus der Datei
Versuchen Sie, mit matplotlib aus den Daten von "Schedule-kun" eine Kampfaufzeichnungstabelle zu erstellen.
Verwendung der NUITKA-Utilities-Hinweis-Kompilierung zum einfachen Erstellen einer ausführbaren Datei aus einem Python-Skript
Python - Lesen Sie Daten aus einer numerischen Datendatei und berechnen Sie die Kovarianz
Schritte von der Installation von Python 3 bis zur Erstellung einer Django-App
So speichern Sie eine von Python gekratzte Tabelle in CSV
Ich habe versucht, Daten aus einer Datei mit Node.js zu lesen.
Python - Lesen Sie Daten aus einer numerischen Datendatei, um die verteilte, gemeinsam verteilte Matrix, Eigenwerte und Eigenvektoren zu finden
Konvertieren Sie aus SpriteUV2 exportierte Netzdaten in ein Format, das von Spine importiert werden kann
Erstellen Sie einen Datenrahmen aus den erfassten Textdaten des Bootsrennens
Ich habe ein Tool erstellt, um eine Wortwolke aus Wikipedia zu erstellen
Erstellen Sie eine KI, die Zuckerbergs Gesicht mit tiefem Lernen identifiziert learning (Datenlernen)
Ein Python-Skript, das Oracle-Datenbankdaten in CSV konvertiert
Verarbeiten Sie die aus einem bestimmten Kassensystem entnommenen Daten, um eine Übersichtstabelle nach Produkt und Zeit zu erstellen
Ich habe versucht, einen Power BI-Bericht zu erstellen, indem ich CSV / JSON-Protokolle mit Azure Databricks verarbeitet habe