Jupyterで使いそうな操作をメモ
前提
import asammdf
# MDFファイルを読み込む
mdf = asammdf.MDF('path/to/mdf/file')
シグナル名を部分一致検索
[c for c in mdf.channels_db if "xxx" in c.lower()]
特定のシグナル名のメッセージ名を調べる
[mdf.groups[gi].channel_group.acq_name for gi, _ in mdf.channels_db['xxx']]
特定のシグナルのソースを調べる
どのCAN から取得したとか。取得方法によっては格納されてないこともありそう。
その場合、sourceが Noneになるので、エラー処理が必要
[mdf.groups[gi].channels[ci].source.path for gi, ci in mdf.channels_db['xxx']]
特定のシグナルから全部調べる(おまけ)
[(mdf.groups[gi].channel_group.acq_name, mdf.groups[gi].channels[ci].name, mdf.groups[gi].channels[ci].source.path) for gi, ci in mdf.channels_db['xxx']]
シグナルの値(Signal class)を取得する
シグナル名が重複しない場合
mdf.select(['xxx'])
シグナル名が重複する場合
mdf.select([(None, gi, ci) for gi, ci in mdf.channels_db['xxx']])
シグナルの値(pandas)を取得する
シグナル名が重複しない場合
mdf.to_dataframe(['xxx'])
シグナル名が重複する場合
取得はできるが、カラム名が xxx, xxx_1, xxx_2, ...
となるので、いけてない。
mdf.to_dataframe([(None, gi, ci) for gi, ci in mdf.channels_db['xxx']])
シグナルの値を取得する際の便利そうなオプション
- use_interpolation=False
- 欠損値を補完しない
- ignore_value2text_conversions=True
- テキストへの変換をせず、数字のままにしてくれる
- raster=0.5
- 0.5秒ごとにリサンプリングする