Estudiamos los datos recopilados por Xiaomi Mi Band para el año

Introduccion


Las personas usan pulseras de fitness por varias razones, puedo asumir algunas de ellas:


  1. Para mantenerse en forma y cumplir los objetivos de la actividad;
  2. Porque es una cosita de moda;
  3. Para experimentar contigo mismo o para conocerte mejor.

Llevo un brazalete deportivo por la razón número 3. En este artículo quiero hablar sobre cómo puede extraer datos de un brazalete e intentar obtener algunas dependencias.


Los métodos para extraer estos datos funcionan para Mi Band 1 , 1S y posiblemente 2 (la aplicación para 2 parece ser la misma).


Extracción de datos


Para extraer datos del brazalete, en primer lugar, debe obtener la base de datos del teléfono SQLite en el que se almacenan las métricas recopiladas. En el caso de Android, esto se hace de manera extremadamente simple, vea el tema en el foro xda-developers , scripts para la base de datos actual :


  1. Conectamos un teléfono Android con depuración USB habilitado a una computadora;
  2. Hacemos una copia de seguridad de la aplicación: adb backup -f mi.ab -noapk -noshared com.xiaomi.hm.health ;
  3. Crear dd if=mi.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" > mi.tar dd if=mi.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" > mi.tar ;
  4. Descomprima el archivo de la base de datos: tar xvf mi.tar apps/com.xiaomi.hm.health/db/ 2>&1 | tee -a log tar xvf mi.tar apps/com.xiaomi.hm.health/db/ 2>&1 | tee -a log ;
  5. Copie la base de datos: cp -f apps/com.xiaomi.hm.health/db/origin_db* ./db/ .

Como resultado, obtenemos una base de datos SQLite con el nombre de archivo db/origin_db_[0-9]+$ , que almacena las métricas de Mi Band.


Carga de datos y análisis


Para estudiar los datos, en mi opinión, es conveniente usar el portátil IPython: Xiaomi_Mifit_miband_data.ipynb


Las métricas se almacenan en la tabla DATE_DATA:


 df = pd.read_sql_query("SELECT * from DATE_DATA", con) 

Columnas en la tabla que son de interés:


columnala descripcion
FECHAfecha
RESUMENJSON con datos procesados ​​para el día
DATOSdatos brutos por minuto por sueño [actividad1], actividad2, actividad3
DATA_HRdatos brutos de frecuencia cardíaca

Datos agregados diarios


Los datos agregados se almacenan como JSON:


 {"slp":{"usrEd":-1440,"lt":457,"st":1464376080,"wk":15,"dp":30,"usrSt":-1440,"ed":1464406200},"v":5,"goal":8000,"stp":{"rn":2,"cal":257,"runDist":256,"wk":69,"ttl":5244,"runCal":13,"dis":3817}} 

Los datos se dividen en 2 partes: suspensión ( slp ) y actividad ( stp ). Para el sueño, el tiempo de inicio y finalización se almacena - st, ed , así como el tiempo de sueño profundo y ligero en minutos - lt, dp . El tiempo de vigilia entre el comienzo y el final del sueño también se almacena - semana . Para la actividad, se almacena el número total de "pasos" ttl : la suma de las lecturas del sensor primario para el día y otras func(ttl, , ) derivadas func(ttl, , ) .


Datos sin procesar de actividad y frecuencia cardíaca


Los datos sin procesar de la actividad se almacenan cada minuto (por día 1440) y representan 3 valores por minuto. El primer valor es un sueño y un valor de 0 a 127 (pero en mi caso un máximo de 126), el segundo y el tercero son actividades con un valor de 0 a 255 (tengo un máximo de actividad2-199, actividad3-240).


El pulso se almacena cada minuto y varía de 0 a 255.


Cómo se agregan los datos sin procesar por día


El agregado más simple es el número de pasos por día: la suma de los valores de actividad3 por día. Es más difícil dormir: nunca aprendí cómo convertir los datos sin procesar del sueño en datos agregados. La idea se expresó en los foros de que el valor de la actividad1 == 4 es un sueño profundo y 5 es ligero, pero no es tan simple como con los pasos para establecer una relación entre los datos agregados y los datos sin procesar.


Análisis de datos


En primer lugar, cuánto dormí durante el año. Este valor resultó ser ~ (7 + - 1) horas. Todo parece estar bien con eso.


tiempo de dormir


Otra cosa obvia: duermo lo suficiente los fines de semana:


dormir vs día de la semana


Y si llama a la relación del sueño profundo con la calidad de la luz, resulta que tengo la mejor calidad de sueño el jueves, y al mismo tiempo, el sueño profundo es el 23% del tiempo total de sueño. Y el viernes, la peor calidad de sueño, me temo incluso adivinar por qué.


actividad vs día de la semana


El número máximo de "pasos" que hago los viernes y sábados:


actividad vs día de la semana


Al mismo tiempo, mi entorno es el día en que duermo poco y camino poco, no hay explicaciones obvias de la categoría "Trabajo desde casa", así que esto es algo nuevo para mí.


Espero que alguien de los propietarios de las populares pulseras de la banda Mi también quiera estudiar y contar sus características.

Source: https://habr.com/ru/post/464055/


All Articles