Pendahuluan
Orang memakai gelang kebugaran karena berbagai alasan, saya dapat mengasumsikan beberapa di antaranya:
- Agar tetap bugar dan memenuhi tujuan kegiatan;
- Karena itu adalah hal kecil yang modis;
- 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 :
- Kami menghubungkan ponsel Android dengan debugging USB yang diaktifkan ke komputer;
- Kami membuat cadangan aplikasi:
adb backup -f mi.ab -noapk -noshared com.xiaomi.hm.health
; - 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
; - 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
; - 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:
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.

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

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.

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

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.