AWAREのモーションデータ(SQLite)をPythonで読み込み&可視化する方法

December 4, 2021 Yuuki Nishiyama 0 Comments

AWAREを使ってモーションデータを集めてみたが、次のステップとしてどのようにそのデータを処理すればいいのか?この記事ではAWAREで収集したモーションデータの簡単な下処理の方法を説明します。

必要ライブラリ

日付を操作するdatetimeと、データフレームを扱うpandas、そしてsqlite3のライブラリが必要になります。以下のサンプルコードのようにライブラリを読み込んでください。


from datetime import datetime, timezone, timedelta
import pandas as pd
import sqlite3 as sqlite

SQLiteからのデータの読み込み

次に、SQLiteに投げたクエリの結果を、pandasのデータフレームに保存するようにします。


sqlite_file = "AWARE_SENSOR-NAME.sqlite"
conn = sqlite.connect(sqlite_file)

df=pd.read_sql_query(
                    '''
                     select ZTIMESTAMP as timestamp, 
                            ZACC_X as x, 
                            ZACC_Y as y, 
                            ZACC_Z as z 
                     from ZAWARE_TABLE_NAME
                     order by ZTIMESTAMP
                    ''', conn)
df

UNIXタイムスタンプから時刻への変換

pandasto_datetimeメソッドを使って、UNIXタイムスタンプ(ミリ秒)のデータを日付形式のデータに変換し、データフレームのインデックスに設定します。UNIXタイムスタンプから日付への変換の際に、タイムゾーン情報が初期値では含まれないので注意すること。この場合、一旦 UTC時刻(世界標準時)としてUNIXタイムスタンプを日付に変換し、後から該当する時刻のタイムゾーンを設定する。


df['datetime'] = pd.to_datetime(df['timestamp'], unit='ms', utc=True)
df['datetime'] = df['datetime'].dt.tz_convert('Asia/Tokyo')
df = df.set_index('datetime')
df

データの範囲を指定して抜き出し

必要なデータの範囲を指定し、pandasqueryコマンドを使って必要な箇所のデータを抜き出します。下記の例では、2021-11-26T20:20:00+09:00から2021-11-26T20:22:00+09:00のデータを抜き出しています。

start = datetime.fromisoformat('2021-11-26T20:20:00+09:00')
end   = datetime.fromisoformat('2021-11-26T20:22:00+09:00')
df.query("index > @start and index < @end")[['x','y','z']].plot()

以上です。楽しいAWAREライフを!

Leave a Reply:

Your email address will not be published. Required fields are marked *