[PYTHON] Retour sur iOS'Healthcare App '2019

Cet article est le 9ème jour du calendrier Docomo Dovent.

C'est Yamamoto de Docomo. Dans mon travail, je suis engagé dans la recherche et le développement liés aux soins de santé. Dans cet article, nous vous présenterons comment utiliser les données acquises par l'application iPhone Healthcare.

■ Présentation

□ Personne cible

・ Je suis intéressé par les soins de santé utilisant des appareils portables ・ Je veux voir les données de l'application iOS Healthcare ・ Ceux qui ont atteint cet article

□ Que faire

・ Comment extraire les journaux collectés par iOS "Healthcare App" ・ Introduction des journaux extraits ・ Retour sur le journal de l'application Healthcare 2019

■ Qu'est-ce que l '«App Santé» iOS?

L'application Healthcare compte automatiquement vos pas, la distance de marche et le kilométrage. De plus, si vous possédez une Apple Watch, l'Apple Watch enregistrera automatiquement vos données d'activité pour vous. Vous pouvez également saisir des informations sur la catégorie Santé et récupérer les données de vos applications et appareils de tous les jours qui prennent en charge les applications Healthcare. Référence: HP officiel (https://www.apple.com/jp/ios/health/)

En bref, c'est une application qui peut être utilisée pour la confirmation et les soins personnels en collectant et en agrégeant diverses données de santé. Si vous utilisez un iPhone, vous pouvez commencer à l'utiliser en appuyant sur l'icône de l'application Santé comme indiqué dans la figure ci-dessous et en complétant rapidement les paramètres initiaux. Si vous démarrez l'application de soins de santé et appuyez, par exemple, sur l'analyse du sommeil, le temps de sommeil acquis dans «Application de l'horloge> Heure du coucher» sera affiché sur une base hebdomadaire ou mensuelle. En appuyant sur «Afficher toutes les données de santé», vous pouvez également vérifier des données telles que le volume du casque, l'activité et la fréquence cardiaque.

health_app.png

■ Sortie des données collectées par "Healthcare App"

Il y a une icône humanoïde dans le coin supérieur droit de l'écran de l'application Healthcare. Si vous appuyez ici, la page passera à celle affichée à gauche, faites donc défiler l'écran vers le bas. Ensuite, il est dit "Exporter toutes les données de santé", alors appuyez ici. Selon la quantité de données, l'écriture prend un peu de temps (j'ai pris quelques minutes à quelques dizaines de minutes). Lorsque je déplace le fichier zip exporté vers un PC et que je vérifie le contenu,

Il existe deux types de fichiers .xml et diverses données de santé sont stockées dans "export.xml".

out_xml.png

■ Vérifiez les données de "Healthcare App"

Lorsque vous ouvrez export.xml avec un éditeur, les données sont les suivantes.

type = 'hoge' est le type de données acquises (par exemple, les données de nombre de pas ou les données de fréquence cardiaque), startDate = 'hoge' est la date et l'heure de début d'acquisition (UTC), endDate = 'hoge' est la date et l'heure de fin d'acquisition (UTC), value = Il semble que les valeurs mesurées (par exemple, le nombre de pas effectués et la fréquence cardiaque mesurée) soient stockées dans «oge ».

<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="Soins de santé" 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="Soins de santé" 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="***"/>

Comme il est difficile à gérer tel quel, créez un DataFrame.

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)

###Accord temps du monde(UTC)➡︎ Heure standard japonaise(JST)Conversion en
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')

###Je veux agréger par jour, alors créez une colonne de date
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)

Voici le DataFrame créé. value stocke la valeur réellement mesurée.
dataframe.png

En vous concentrant sur le type, vous pouvez le limiter au journal de vie que vous souhaitez voir. Veuillez vous reporter au site officiel (https://developer.apple.com/documentation/healthkit/data_types?language=objc) pour les données de chacun.

■ Rétrospective basée sur le journal de vie ~ 2019

L'application Healthcare présente également divers résultats d'analyse, mais analysons et vérifions votre propre journal de vie. Dans cet article, nous nous limiterons aux données de comptage de pas et aux données de distance de déplacement.

(Il y avait des données pour 1339 jours du 16 mars 2016 au 15 novembre 2019 ... !!!)

###Nombre d'étapes###
df_StepCount = health_df.loc[health_df['type']=='HKQuantityTypeIdentifierStepCount',:].reset_index(drop=True)
df_StepCount = df_StepCount.sort_values(['startDate_date'])

###Distance de marche / course###
df_DistanceWalkingRunning = health_df.loc[health_df['type']=='HKQuantityTypeIdentifierDistanceWalkingRunning',:].reset_index(drop=True)
df_DistanceWalkingRunning = df_DistanceWalkingRunning.sort_values(['startDate_date'])


###Agréger quotidiennement###
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'}) 

Tout d'abord, visualisons-le.

[En haut] Figure de gauche: distance parcourue (axe * x *: date, axe * y *: km), chiffre de droite: étapes (axe * x *: date, axe * y *: étapes) [Milieu] Figure de gauche: distance parcourue (axe * x *: km, axe * y *: fréquence), figure de droite: étapes (axe * x *: étapes, axe * y *: fréquence) [Bas] Tableau de gauche: Statistiques de la distance parcourue, Figure de droite: Statistiques des étapes

distance_walk.png

Vous avez peut-être remarqué quelque chose d'inattendu lorsque vous le visualisez.

・ Le nombre de pas (distance parcourue) pendant la fin d'année et le nouvel an est faible chaque année. Je me demande si la nouvelle année 2020 sera de deux ans et sera active.

・ De juillet à octobre, le nombre de pas (distance de déplacement) change radicalement chaque jour ➡︎ Parce que c'est une période active pour voyager et aller aux festivals de musique‼ ︎

・ En 2019, il y aura plusieurs jours où le nombre de pas sera proche de 0. ➡︎ Si vous êtes fatigué, vous passerez bien sûr votre temps à la maison. Au contraire, étais-je si actif dans le passé?

・ Au fur et à mesure que les jours 2017 → 2018 → 2019 passent, le nombre de pas (distance parcourue) a tendance à diminuer ➡︎ C'est surprenant. Il y a 1600 pas il y a moins de deux ans ... Est-ce l'effet des changements du cadre de vie? Le fait que le lieu de travail ait déménagé à Tokyo au début de 2018 peut également avoir un effet. Je creuserai un peu plus loin plus tard.

・ La distance totale parcourue au 15 novembre 2019 (limitée à 2019) 1603 km est presque la même que la course à pied de 1521 km d'Aomori à Shimonoseki, qui traverse Honshu. Le record pour la première place de ce tournoi est de 5 heures et 38 minutes le 18 de 2017, cela signifie donc qu'il y a un homme de fer qui peut finir de courir en 3 semaines sur la façon dont j'ai marché pendant 10 mois ...

・ La distance totale parcourue de 7081 km pendant 4 ans est la distance qui peut traverser les Amériques (San Francisco-Los Angeles-Las Vegas-Miami-New York-Boston, distance totale d'environ 7533 km). Les étudiants qui envisagent de traverser les États-Unis lors de leur voyage de fin d'études, veuillez vous y référer lol Au fait, en traversant l'océan Pacifique, la distance entre Tokyo et San Francisco est d'environ 8800 km, donc je n'ai pas encore atteint les États-Unis avec ma distance de voyage.

J'ai été surpris que le nombre de pas (distance de déplacement) diminue d'année en année, je vais donc creuser un peu plus. Le résultat du traçage du nombre d'étapes [étapes / jour] pour chaque année en unités de jours est le suivant. [En haut à gauche: 2016, en haut à droite: 2017, en bas à gauche: 2018, en bas à droite: 2019]

step_year.png

De 2017 à 2019, vous pouvez voir la diminution du nombre de pas, en particulier les samedis et dimanches.

[En haut] Figure de gauche: étapes du samedi, Figure de droite: étapes du dimanche [Bas] Tableau de gauche: comparaison du nombre de pas du samedi (valeur p), tableau de droite: comparaison du nombre de pas du dimanche (valeur p)

sat_sun.png

Le facteur majeur de la diminution du nombre de pas semble être la façon de passer les samedis et dimanches. Quand je travaille, j'ai une vie un peu régulière en semaine, et il semble qu'il n'y ait pas beaucoup de changement avec le temps. D'autre part, les jours où vous pouvez passer votre journée librement comme les samedis et dimanches, vous pouvez vivre une vie extrême comme ne pas sortir du tout. (Personnellement, c'est assez stressant de rester à la maison tout le temps, alors je sors le samedi et le dimanche.) Il peut être important de revoir ma vie du point de vue des soins de santé lors d'une journée aussi libre. ..

Si vous visualisez le journal de vie de cette manière et que vous le regardez objectivement, vous pouvez voir que c'était possible avant, mais maintenant ce n'est pas le cas. L'auto-prise en charge dans la gestion de la santé réexamine d'abord objectivement sa situation actuelle, puis revient sur sa vie, par exemple pourquoi le nombre de pas a diminué chaque année et comment c'était le samedi et le dimanche. Je pense que c'est important. En prêtant un peu d'attention à mon état de santé, j'ai soudain pensé: «Faisons un détour par la gare aujourd'hui et rentrons à pied» ou «Allons nous étirer et nous détendre avant d'aller au lit». Je pense que cela entraînera un changement de comportement.

■ Résumé

Une variété d'applications de soins de santé sont fournies dans le Google Store et l'App Store, et c'est en train de devenir un monde où les individus peuvent facilement enregistrer leurs journaux de vie et les utiliser pour prendre soin d'eux-mêmes. Pourquoi n'analysez-vous pas votre journal de vie comme première étape pour examiner votre état de santé, pas seulement pour enregistrer votre journal de vie? Il peut y avoir des découvertes inattendues.

Merci de rester avec nous jusqu'à la fin. Que 2020 soit également une année saine.

Recommended Posts

Retour sur iOS'Healthcare App '2019
Retour sur ABC155
Retour sur 2016 dans le langage Crystal
Retour sur la création d'un service Web avec Django 1
Retour sur la création d'un service Web avec Django 2
Déployer l'application Masonite sur Heroku 2020
[Python] Rétrospective de ce que j'ai enseigné aux débutants en programmation à partir des fonctions
Implémenter l'application Django sur Hy
Détecter les versions d'applications dans l'App Store
Déployer l'application Flask sur heroku (amer)
Déployez l'application Flask sur Heroku
Utilisez ndb.tasklet avec Google App Engine
Déployez l'application Flask sur heroku
Retour sur les 10 mois avant qu'un débutant en programmation ne devienne un expert Kaggle