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.
Öffnen Sie Healthcare in der iPhone-App und tippen Sie oben rechts auf das Profilsymbol.
Tippen Sie auf Ihrer Profilseite auf "Gesundheitsdaten exportieren". Tippen Sie im Bestätigungsdialog auf "Exportieren".
Tippen Sie auf den Dienst, für den Sie Gesundheitsdaten exportieren möchten.
Wenn Sie iCloud Drive auswählen, wird das Archiv im Ordner iCloud Drive des synchronisierten PCs mit dem Dateinamen "Exported Data.zip" gespeichert.
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:])
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