一所懸命に手抜きする

監査の仕事をしています。ITを利用し、良い意味で「手抜き」することは効率化と精度アップに役立つと思うんです。部下への引き継ぎのためにまずは諸々頭から引っ張り出そうとブログを始めました。

[ Main ]  [ 別館 ]
当ブログで取り上げられている事案やデータベース、人物等はすべてフィクションです。

Mi Band Master のデータをRで読み込む方法

Mi Band Master のデータをRで読み込む

 Mi Band 2 のデータはCloudにあるらしいのですが、公式アプリ Mi Fit を使ってもCSVなどに落とすことはできないようです。一方、Mi Band Master というアプリは取得したデータを、SQLite形式の db.sqlite として出力してくれます。今回はこれをRで読み込みたいと思います。
 RでSQLiteを扱うには、RSQLite パッケージが必要です。私は、あれもこれもとインストールしたくはないのですが、sqldfを使っているため、すでにRSQLiteはインストールされています。

コード例

 例としてc:/wrk/db.sqlite のテーブル sleep からデータを抽出してみます。

db.sqlite からデータを抽出する例
library("RSQLite")
con = dbConnect(SQLite(), "C:/wrk/db.sqlite", synchronous="off")
dbListTables(con)
dbGetQuery(con, 
"select datetime(start_time,'unixepoch','localtime') as Time1,
        datetime(end_time,'unixepoch','localtime') as Time2,
        awake,deep,light,stages from sleep")
dbDisconnect(con)
実行結果
実行結果

> library("RSQLite")
> con = dbConnect(SQLite(), "C:/wrk/db.sqlite", synchronous="off")
> dbListTables(con)
 [1] "alarm"               "android_metadata"    "app_notification"   
 [4] "call_notification"   "event_notification"  "func_button_action"
 [7] "func_button_profile" "heartrate"           "settings"           
[10] "sleep"               "sms_notification"    "sqlite_sequence"    
[13] "stats"               "steps"  

> dbGetQuery(con,
+ "select datetime(start_time,'unixepoch','localtime') as Time1,
+ datetime(end_time,'unixepoch','localtime') as Time2,
+ awake,deep,light,stages from sleep")
                 Time1               Time2 awake deep light                                             stages
1  2018-01-01 00:48:00 2018-01-01 06:05:00     0  182   135   10L25D41L42D10L12D17L44D3L18D7L12D13L12D6L17D28L
2  2018-01-02 00:09:00 2018-01-02 06:08:00     0  142   217             14L33D26L20D62L43D44L17D7L14D10L15D54L
3  2018-01-02 23:53:00 2018-01-03 06:10:00     0  187   190        10L24D4L20D21L39D20L69D31L13D5L11D83L11D16L

> dbDisconnect(con)
>

 ご覧の通り、簡単にデータを抽出できます。sqlite.db には複数のテーブルが含まれるので、テーブル一覧を確認してから、そのテーブルからデータを取得しています。この日付時刻はUNIX時刻なので、JSTに変換の上、yyyy-mm-dd形式に変換しています。
SQLUNIX時刻→JST a-habakiri.hateblo.jpSQLiteシェルで sqlite.db を処理する a-habakiri.hateblo.jp ▼Mi Band Master でMi Bandのデータを抽出する a-habakiri.hateblo.jp