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タイムスタンプから時刻への変換
pandas
のto_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
データの範囲を指定して抜き出し
必要なデータの範囲を指定し、pandas
のquery
コマンドを使って必要な箇所のデータを抜き出します。下記の例では、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ライフを!
Categories: