Estudamos os dados coletados pelo Xiaomi Mi Band para o ano

1. Introdução


As pessoas usam pulseiras de fitness por várias razões, posso assumir algumas delas:


  1. Para manter a forma e cumprir os objetivos da atividade;
  2. Porque é uma coisinha elegante;
  3. Experimentar consigo mesmo ou se conhecer melhor.

Uso uma pulseira de fitness pelo motivo número 3. Neste artigo, quero falar sobre como você pode extrair dados de uma pulseira e tentar obter algumas dependências.


Os métodos para extrair esses dados funcionam para o Mi Band 1 , 1S e possivelmente 2 (o aplicativo para 2 parece ser o mesmo).


Extração de dados


Para extrair dados da pulseira, primeiro você precisa obter o banco de dados no telefone SQLite no qual as métricas coletadas estão armazenadas. No caso do Android, isso é feito de maneira extremamente simples. Consulte o tópico no fórum xda-developers , scripts para o banco de dados atual :


  1. Conectamos um telefone Android com a depuração USB ativada a um computador;
  2. Fazemos um backup do aplicativo: adb backup -f mi.ab -noapk -noshared com.xiaomi.hm.health ;
  3. Crie 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. Descompacte o arquivo tar xvf mi.tar apps/com.xiaomi.hm.health/db/ 2>&1 | tee -a log do banco de dados: 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 o banco de dados: cp -f apps/com.xiaomi.hm.health/db/origin_db* ./db/ .

Como resultado, obtemos um banco de dados SQLite com o nome de arquivo db/origin_db_[0-9]+$ , que armazena as métricas do Mi Band.


Carregamento e análise de dados


Para estudar os dados, na minha opinião, é conveniente usar o notebook IPython: Xiaomi_Mifit_miband_data.ipynb


As métricas são armazenadas na tabela DATE_DATA:


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

Colunas na tabela que são de interesse:


colunaa descrição
DATEdata
RESUMOJSON com dados processados ​​para o dia
DADOSdados brutos por minuto por sono [atividade1], atividade2, atividade3
DATA_HRdados brutos da frequência cardíaca em minutos

Dados agregados diários


Os dados agregados são armazenados 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}} 

Os dados são divididos em 2 partes: sono ( slp ) e atividade ( stp ). Para o sono, o horário de início e término é armazenado - st, ed , bem como o tempo de sono profundo e leve em minutos - lt, dp . O tempo de vigília entre o início e o fim do sono também é armazenado - sem . Para a atividade, o número total de "etapas" ttl é armazenado - a soma das leituras do sensor primário para o dia e outras quantidades derivadas func(ttl, , ) .


Dados brutos de atividade e frequência cardíaca


Os dados brutos da atividade são armazenados a cada minuto (por dia 1440) e representam 3 valores por minuto. O primeiro valor é um sonho e um valor de 0 a 127 (mas, no meu caso, um máximo de 126), o segundo e o terceiro são atividades com um valor de 0 a 255 (eu tenho um máximo de atividade2 - 189, atividade3 - 240).


O pulso é armazenado a cada minuto e varia de 0 a 255.


Como os dados brutos se agregam por dia


O agregado mais simples é o número de etapas por dia - a soma dos valores da atividade3 por dia. É mais difícil dormir: nunca aprendi como transformar dados brutos do sono em dados agregados. Nos fóruns, foi expressa a idéia de que o valor da atividade1 == 4 é sono profundo e 5 é leve, mas não é tão simples quanto nas etapas para estabelecer um relacionamento entre dados agregados e dados brutos.


Análise de dados


Em primeiro lugar, o quanto eu dormi durante o ano. Esse valor acabou sendo ~ (7 + - 1) horas. Tudo parece estar bem com isso.


hora de dormir


Outra coisa óbvia - durmo o suficiente nos fins de semana:


sono vs dia da semana


E se você chama a relação de sono profundo com qualidade de luz, acontece que eu tenho a melhor qualidade de sono na quinta-feira e, ao mesmo tempo, sono profundo é 23% do tempo total de sono. E na sexta-feira - a pior qualidade de sono, tenho medo de adivinhar o porquê.


dia da semana vs atividade


O número máximo de "etapas" que eu faço na sexta e no sábado:


dia da semana vs atividade


Ao mesmo tempo, meu ambiente é o dia em que durmo pouco e ando pouco, não há explicações óbvias na categoria "trabalho em casa", então isso é algo novo para mim.


Espero que alguém dos proprietários das populares pulseiras da banda Mi também queira se estudar e contar sobre suas características.

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


All Articles