[PYTHON] Rückblick auf die iOS'Healthcare App '2019

Dieser Artikel ist der 9. Tag des Docomo Dovent-Kalenders.

Dies ist Yamamoto von Docomo. In meiner Arbeit beschäftige ich mich mit Forschung und Entwicklung im Gesundheitswesen. In diesem Artikel wird die Verwendung der von der iPhone Healthcare App erfassten Daten vorgestellt.

■ Einführung

□ Zielperson

・ Sie interessieren sich für die Gesundheitsversorgung mit mobilen tragbaren Geräten ・ Ich möchte die Daten der iOS Healthcare App sehen ・ Diejenigen, die diesen Artikel erreicht haben

□ Was ist zu tun?

・ So extrahieren Sie von iOS gesammelte Protokolle "Healthcare App" ・ Einführung extrahierter Protokolle ・ Rückblick auf das Healthcare App Log 2019

■ Was ist die iOS "Healthcare App"?

Die Healthcare App zählt automatisch Ihre Schritte, Gehentfernung und Kilometerleistung. Wenn Sie über eine Apple Watch verfügen, zeichnet die Apple Watch Ihre Aktivitätsdaten automatisch für Sie auf. Sie können auch Informationen zur Kategorie Gesundheitswesen eingeben und Daten von Ihren alltäglichen Apps und Geräten abrufen, die Apps für das Gesundheitswesen unterstützen. Referenz: Offizielle HP (https://www.apple.com/jp/ios/health/)

Kurz gesagt, es handelt sich um eine App, die zur Bestätigung und Selbstversorgung verwendet werden kann, indem verschiedene Gesundheitsdaten gesammelt und aggregiert werden. Wenn Sie ein iPhone verwenden, können Sie es verwenden, indem Sie auf das Healthcare App-Symbol tippen (siehe Abbildung unten) und die anfänglichen Einstellungen schnell vornehmen. Wenn Sie die Healthcare-App starten und beispielsweise auf Schlafanalyse tippen, wird die unter "Uhr-App> Schlafenszeit" erfasste Schlafzeit wöchentlich oder monatlich angezeigt. Durch Tippen auf "Alle Gesundheitsdaten anzeigen" können Sie auch Daten wie Kopfhörerlautstärke, Aktivität und Herzfrequenz überprüfen.

health_app.png

■ Ausgabe der von "Healthcare App" gesammelten Daten

In der oberen rechten Ecke des Bildschirms der Healthcare App befindet sich ein humanoides Symbol. Wenn Sie hier tippen, wechselt die Seite zu der links gezeigten. Scrollen Sie also den Bildschirm nach unten. Dann heißt es "Alle Gesundheitsdaten exportieren". Tippen Sie hier. Je nach Datenmenge dauert das Schreiben etwas (ich habe einige Minuten bis einige zehn Minuten gebraucht). Wenn ich die exportierte Zip-Datei auf einen PC verschiebe und den Inhalt überprüfe,

Es gibt zwei Arten von XML-Dateien, und verschiedene Gesundheitsdaten werden in "export.xml" gespeichert.

out_xml.png

■ Überprüfen Sie die Daten der "Healthcare App"

Wenn Sie export.xml mit einem Editor öffnen, lauten die Daten wie folgt.

type = 'hoge' ist der Typ der erfassten Daten (z. B. Schrittzählungsdaten oder Herzfrequenzdaten), startDate = 'hoge' ist das Startdatum und die Uhrzeit der Erfassung (UTC), endDate = 'hoge' ist das Datum und die Uhrzeit der Erfassung (UTC), value = Es scheint, dass die gemessenen Werte (zum Beispiel die Anzahl der durchgeführten Schritte und die gemessene Herzfrequenz) in "Hoge" gespeichert sind.

<HealthData locale="ja_JP">
 <ExportDate value="2019-11-15 12:51:14 +0900"/>
 <Me HKCharacteristicTypeIdentifierDateOfBirth="***" HKCharacteristicTypeIdentifierBiologicalSex="HKBiologicalSexMale" HKCharacteristicTypeIdentifierBloodType="HKBloodTypeNotSet" HKCharacteristicTypeIdentifierFitzpatrickSkinType="HKFitzpatrickSkinTypeNotSet"/>
 <Record type="HKQuantityTypeIdentifierHeight" sourceName="Gesundheitswesen" sourceVersion="10.0.1" unit="cm" creationDate="2016-09-22 09:57:08 +0900" startDate="2016-09-22 09:57:08 +0900" endDate="2016-09-22 09:57:08 +0900" value="***"/>
 <Record type="HKQuantityTypeIdentifierBodyMass" sourceName="Gesundheitswesen" sourceVersion="10.0.1" unit="kg" creationDate="2016-09-22 09:57:08 +0900" startDate="2016-09-22 09:57:08 +0900" endDate="2016-09-22 09:57:08 +0900" value="***"/>

Erstellen Sie einen DataFrame, da dies schwierig zu handhaben ist.

import pandas as pd
from dateutil.parser import parse
import argparse
import datetime as dt

parser = argparse.ArgumentParser()
columns = ['type', 'unit', 'startDate', 'endDate', 'value']
parsed = objectify.parse(open('export.xml'))
root = parsed.getroot()
data = []
for r in root.Record:
    data.append({c: t for c, t in r.attrib.items() if c in columns})
health_df = pd.DataFrame(data)

###Vereinbarung Weltzeit(UTC)➡︎ Japanische Standardzeit(JST)Umstellung auf
health_df.index = pd.to_datetime(health_df['startDate'], utc=True)
health_df['startDate'] = health_df.index.tz_convert('Asia/Tokyo')
health_df.index = pd.to_datetime(health_df['endDate'], utc=True)
health_df['endDate'] = health_df.index.tz_convert('Asia/Tokyo')

###Ich möchte nach Tag aggregieren, also eine Datumsspalte erstellen
health_df['startDate_date'] = health_df['startDate'].dt.date
health_df['endDate_date'] = health_df['endDate'].dt.date

health_df = health_df.reset_index(drop=True)

Hier ist der erstellte DataFrame. value speichert den tatsächlich gemessenen Wert.
dataframe.png

Wenn Sie sich auf den Typ konzentrieren, können Sie ihn auf das gewünschte Lebensprotokoll beschränken. Die jeweiligen Daten entnehmen Sie bitte dem offiziellen (https://developer.apple.com/documentation/healthkit/data_types?language=objc).

■ Rückblick basierend auf dem Lebensprotokoll ~ 2019

Die Healthcare App präsentiert auch verschiedene Analyseergebnisse, aber lassen Sie uns Ihr eigenes Lebensprotokoll analysieren und überprüfen. In diesem Artikel beschränken wir uns auf Schrittzähldaten und Reisedistanzdaten.

(Es gab Daten für 1339 Tage vom 16. März 2016 bis 15. November 2019 ... !!!)

###Anzahl der Schritte###
df_StepCount = health_df.loc[health_df['type']=='HKQuantityTypeIdentifierStepCount',:].reset_index(drop=True)
df_StepCount = df_StepCount.sort_values(['startDate_date'])

###Geh- / Laufstrecke###
df_DistanceWalkingRunning = health_df.loc[health_df['type']=='HKQuantityTypeIdentifierDistanceWalkingRunning',:].reset_index(drop=True)
df_DistanceWalkingRunning = df_DistanceWalkingRunning.sort_values(['startDate_date'])


###Täglich aggregieren###
df_StepCount_date = df_StepCount.loc[:,['startDate_date', 'value']].groupby(['startDate_date']).sum()
df_StepCount_date = df_StepCount_date.rename(columns={'value': 'StepCount'}) 

df_DistanceWalkingRunning_date = df_DistanceWalkingRunning.loc[:,['startDate_date', 'value']].groupby(['startDate_date']).sum()
df_DistanceWalkingRunning_date = df_DistanceWalkingRunning_date.rename(columns={'value': 'DistanceWalkingRunning'}) 

Lassen Sie es uns zunächst visualisieren.

[Oben] Linke Abbildung: Fahrstrecke (* x * Achse: Datum, * y * Achse: km), Rechte Abbildung: Schritte (* x * Achse: Datum, * y * Achse: Schritte) [Mitte] Linke Abbildung: Fahrstrecke (* x * Achse: km, * y * Achse: Frequenz), Rechte Abbildung: Schritte (* x * Achse: Schritte, * y * Achse: Frequenz) [Unten] Linke Tabelle: Statistik der zurückgelegten Strecke, rechte Abbildung: Statistik der Schritte

distance_walk.png

Möglicherweise haben Sie bei der Visualisierung etwas Unerwartetes bemerkt.

・ Die Anzahl der Schritte (Bewegungsentfernung) zum Jahresende und Neujahr ist jedes Jahr gering. Ich frage mich, ob das neue Jahr 2020 zwei Jahre dauern und aktiv sein wird.

・ Von Juli bis Oktober ändert sich die Anzahl der Schritte (Bewegungsentfernung) jeden Tag drastisch. ➡︎ Weil es eine aktive Zeit für Reisen und Musikfestivals ist.‼ ︎

・ Im Jahr 2019 wird es mehrere Tage geben, an denen die Anzahl der Schritte nahe bei 0 liegt. ➡︎ Wenn Sie müde sind, verbringen Sie Ihre Zeit natürlich zu Hause. War ich in der Vergangenheit eher so aktiv?

・ Mit den Tagen 2017 → 2018 → 2019 nimmt die Anzahl der Schritte (Bewegungsentfernung) tendenziell ab. ➡︎ Dies ist überraschend. Es sind 1.600 Schritte weniger als vor zwei Jahren ... Ist es die Auswirkung von Veränderungen im Lebensumfeld? Die Tatsache, dass der Arbeitsplatz Anfang 2018 nach Tokio verlegt wurde, kann ebenfalls Auswirkungen haben. Ich werde später etwas tiefer graben.

・ Die Gesamtfahrstrecke zum 15. November 2019 (begrenzt auf 2019) von 1603 km entspricht fast der Entfernung zum 1521 km langen Fußrennen von Aomori nach Shimonoseki, das durch Honshu führt. Der Rekord für den ersten Platz in diesem Turnier liegt am 18. 2017 bei 5 Stunden und 38 Minuten. Das bedeutet, dass es einen Eisenmann gibt, der in 3 Wochen auf dem Weg, den ich 10 Monate lang gelaufen bin, fertig laufen kann ...

・ Die Gesamtreisedistanz von 7081 km für 4 Jahre ist die Entfernung, die Amerika überqueren kann (San Francisco-Los Angeles-Las Vegas-Miami-New York-Boston, Gesamtreisedistanz von ca. 7533 km). Studenten, die daran denken, die Vereinigten Staaten auf ihrer Abschlussreise zu überqueren, beziehen sich bitte darauf lol Übrigens beträgt die Entfernung zwischen Tokio und San Francisco beim Überqueren des Pazifischen Ozeans etwa 8800 km, sodass ich die Vereinigten Staaten mit meiner Reisedistanz noch nicht erreicht habe.

Ich war überrascht, dass die Anzahl der Schritte (Bewegungsentfernung) von Jahr zu Jahr abnimmt, deshalb werde ich etwas tiefer graben. Das Ergebnis der Darstellung der Anzahl der Schritte [Schritte / Tag] für jedes Jahr in Einheiten von Tagen ist wie folgt. [Oben links: 2016, oben rechts: 2017, unten links: 2018, unten rechts: 2019]

step_year.png

Von 2017 bis 2019 ist ein Rückgang der Anzahl der Schritte zu beobachten, insbesondere samstags und sonntags.

[Oben] Linke Abbildung: Samstagsschritte, Rechte Abbildung: Sonntagsschritte [Unten] Linke Tabelle: Vergleich der Samstagsschrittanzahl (p-Wert), Rechte Tabelle: Vergleich der Sonntagsschrittanzahl (p-Wert)

sat_sun.png

Der Hauptfaktor für die Verringerung der Anzahl der Schritte scheint zu sein, wie man Samstage und Sonntage verbringt. Wenn ich arbeite, habe ich an Wochentagen ein etwas normales Leben, und es scheint, dass sich im Laufe der Zeit nicht viel ändert. Auf der anderen Seite können Sie an Tagen, an denen Sie den Tag frei verbringen können, wie Samstag und Sonntag, ein extremes Leben führen, z. B. überhaupt nicht ausgehen. (Persönlich ist es ziemlich stressig, die ganze Zeit zu Hause zu bleiben, deshalb gehe ich samstags und sonntags aus.) Es kann wichtig sein, mein Leben an einem so freien Tag aus der Perspektive der Gesundheitsversorgung zu überprüfen. ..

Wenn Sie das Lebensprotokoll auf diese Weise visualisieren und objektiv betrachten, können Sie sehen, dass es vorher möglich war, jetzt aber nicht. Bei der Selbstversorgung im Gesundheitsmanagement überprüfe ich zunächst objektiv meine aktuelle Situation und blicke auf mein Leben zurück, warum die Anzahl der Schritte jedes Jahr abnahm und wie ich die alten Samstage und Sonntage verbracht habe. Ich denke das ist wichtig. Indem ich ein wenig auf meinen Gesundheitszustand achtete, dachte ich plötzlich: "Machen wir heute einen Umweg vom Bahnhof und gehen nach Hause" oder "Dehnen wir uns und entspannen wir uns vor dem Schlafengehen". Ich denke, das wird zu Verhaltensänderungen führen.

■ Zusammenfassung

Im Google Store und im App Store werden verschiedene Apps für das Gesundheitswesen bereitgestellt. Es wird zu einer Welt, in der Einzelpersonen ihre Lebensprotokolle einfach aufzeichnen und zur Selbstversorgung verwenden können. Warum analysieren Sie Ihr Lebensprotokoll nicht als ersten Schritt, um Ihren Gesundheitszustand zu untersuchen, und nicht nur, um Ihr Lebensprotokoll aufzuzeichnen? Es kann unerwartete Entdeckungen geben.

Vielen Dank, dass Sie bis zum Ende bei uns bleiben. Mai 2020 ist auch ein gesundes Jahr.

Recommended Posts

Rückblick auf die iOS'Healthcare App '2019
Rückblick auf ABC155
Rückblick auf 2016 in der Crystal-Sprache
Rückblick auf die Erstellung eines Webdienstes mit Django 1
Rückblick auf die Erstellung eines Webdienstes mit Django 2
Stellen Sie die Masonite-App auf Heroku 2020 bereit
[Python] Rückblickend auf das, was ich Programmieranfängern aus Funktionen beigebracht habe
Implementieren Sie die Django-App auf Hy
Erkennen Sie App-Releases im App Store
Stellen Sie die Flask-App für Heroku bereit (bitter)
Stellen Sie die Flask-App auf Heroku bereit
Verwenden Sie ndb.tasklet mit Google App Engine
Stellen Sie die Flask-App auf Heroku bereit
Rückblick auf die 10 Monate, bevor ein Programmieranfänger ein Kaggle-Experte wird