Kami mempelajari data yang dikumpulkan oleh Xiaomi Mi Band untuk tahun ini

Pendahuluan


Orang memakai gelang kebugaran karena berbagai alasan, saya dapat mengasumsikan beberapa di antaranya:


  1. Agar tetap bugar dan memenuhi tujuan kegiatan;
  2. Karena itu adalah hal kecil yang modis;
  3. Bereksperimen dengan diri sendiri atau mengenal diri sendiri lebih baik.

Saya memakai gelang kebugaran untuk alasan nomor 3. Dalam artikel ini saya ingin berbicara tentang bagaimana Anda dapat mengekstrak data dari gelang dan mencoba untuk mendapatkan beberapa dependensi.


Metode untuk mengekstraksi data ini berfungsi untuk Mi Band 1 , 1S , dan mungkin 2 (aplikasi untuk 2 tampaknya sama).


Ekstraksi data


Untuk mengekstrak data dari gelang, pertama-tama, Anda perlu mendapatkan database dari telepon SQLite tempat metrik yang dikumpulkan disimpan. Dalam kasus Android, ini dilakukan dengan sangat sederhana, lihat topik di forum xda-developer , skrip untuk database saat ini :


  1. Kami menghubungkan ponsel Android dengan debugging USB yang diaktifkan ke komputer;
  2. Kami membuat cadangan aplikasi: adb backup -f mi.ab -noapk -noshared com.xiaomi.hm.health ;
  3. Buat 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. Buka paket arsip dari database: 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. Salin basis data: cp -f apps/com.xiaomi.hm.health/db/origin_db* ./db/ .

Hasilnya, kami mendapatkan database SQLite dengan nama file db/origin_db_[0-9]+$ , yang menyimpan metrik Mi Band.


Pemuatan dan analisis data


Untuk mempelajari data, menurut pendapat saya, nyaman untuk menggunakan notebook IPython: Xiaomi_Mifit_miband_data.ipynb


Metrik disimpan dalam tabel DATE_DATA:


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

Kolom dalam tabel yang menarik:


kolomdeskripsi
DATEtanggal
RINGKASANJSON dengan data yang diproses untuk hari itu
DATAdata mentah per menit per tidur [aktivitas1], aktivitas2, aktivitas3
DATA_HRdata detak jantung menit mentah

Data Teragregasi Harian


Data teragregasi disimpan sebagai 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}} 

Data dibagi menjadi 2 bagian: tidur ( slp ) dan aktivitas ( stp ). Untuk tidur, waktu mulai dan berakhir disimpan - st, ed , serta waktu tidur nyenyak dan dalam hitungan menit - lt, dp . Waktu terjaga antara awal dan akhir tidur juga disimpan - minggu . Untuk aktivitas, jumlah total "langkah" ttl disimpan - jumlah pembacaan sensor utama untuk hari itu dan jumlah turunan lainnya func(ttl, , ) .


Aktivitas mentah dan data detak jantung


Data aktivitas mentah disimpan setiap menit (per hari 1440), dan mewakili 3 nilai per menit. Nilai pertama adalah mimpi dan nilai dari 0 hingga 127 (tetapi dalam kasus saya maksimum 126), yang kedua dan ketiga adalah aktivitas dengan nilai dari 0 hingga 255 (saya memiliki maksimum activity2 - 189, activity3 - 240).


Denyut nadi disimpan setiap menit dan berkisar dari 0 hingga 255.


Bagaimana data mentah menjadi teragregasi per hari


Agregat paling sederhana adalah jumlah langkah per hari - jumlah nilai activity3 per hari. Lebih sulit tidur: Saya tidak pernah belajar cara mengubah data tidur mentah menjadi data agregat. Gagasan itu diungkapkan dalam forum bahwa nilai activity1 == 4 adalah tidur nyenyak, dan 5 ringan, tetapi tidak sesederhana dengan langkah-langkah untuk membangun hubungan antara data agregat dan data mentah.


Analisis data


Pertama, berapa banyak saya tidur sepanjang tahun. Nilai ini ternyata ~ (7 + - 1) jam. Segalanya tampak baik-baik saja dengan itu.


waktu tidur


Hal lain yang jelas - saya cukup tidur di akhir pekan:


tidur vs hari minggu


Dan jika Anda menyebut hubungan tidur nyenyak dengan kualitas cahaya, ternyata saya memiliki kualitas tidur terbaik pada hari Kamis, dan pada saat yang sama, tidur nyenyak adalah 23% dari total waktu tidur. Dan pada hari Jumat - kualitas tidur terburuk, saya takut untuk menebak mengapa.


aktivitas vs hari kerja


Jumlah maksimum "langkah" yang saya buat pada hari Jumat dan Sabtu:


aktivitas vs hari kerja


Pada saat yang sama, lingkungan saya adalah hari ketika saya tidur sedikit dan berjalan sedikit, tidak ada penjelasan yang jelas dari kategori "Saya bekerja dari rumah", jadi ini adalah sesuatu yang baru bagi saya.


Saya berharap bahwa seseorang dari pemilik gelang Mi band yang populer juga ingin belajar sendiri dan menceritakan tentang fitur mereka.

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


All Articles