haniwers.v0.dataset#

解析用データ読み込みのモジュール

TODO:

作りはじめてみましたが、config.RunManagerに統合できそうな気がしてきました。 できることを比べながら、こちらを削除する予定にします。

Module Contents#

Classes#

PathSettings

データセットのパス設定

Run

ラン設定

Functions#

reformat_datetime

日時を変換する

load_raw_data

(削除予定)DAQで取得したデータ形式を pd.DataFrame に変換して読み込む

load_files

(削除予定)複数のファイルを読み込み、単一のデータフレームに変換する

API#

class haniwers.v0.dataset.PathSettings(/, **data: typing.Any)#

Bases: pydantic.BaseModel

データセットのパス設定

TODO:

  • データセットの配置を変更したら、パスのデフォルト値を変更する

Initialization

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

drive: str#

‘.’

測定データがあるルートディレクトリ。デフォルトは.(カレントディレクトリ)

_get_path(path: str) pathlib.Path#

(プライベート関数)データのパスを取得

drivepathを使って読み込みたいデータのパスを取得します。

Args:
  • path (str): パス名

Exception:
  • 指定したパスが存在しない場合はdriveに設定

Returns:
  • p (Path): データのパス

raw_data_path(path: str = 'raw_data') pathlib.Path#

測定データのパス

Args:
  • path (str, optional): パス名. Defaults to “raw_data”.

Returns:
  • p (Path): 測定データのパス

preprocessed_data_path(path: str = 'parsed') pathlib.Path#

前処理したデータのパス

Args:
  • path (str, optional): パス名. Defaults to “parsed”.

Returns:
  • p (Path): 前処理したデータのパス

resampled_data_path(path: str = 'parsed') pathlib.Path#

リサンプルしたデータのパス

class haniwers.v0.dataset.Run(/, **data: typing.Any)#

Bases: haniwers.v0.dataset.PathSettings

ラン設定

Examples:

run = Run(run_id=65, date="20240521")
data1 = run.preprocessed_data()
data2 = run.resample_data()
data3 = run.ondotori_data()

実行する場所からデータセットまでのパスをdriveで変更できます。

run = Run(run_id=65, date="20240521", drive="../data")
data = run.resample_data()

Initialization

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

run_id: int#

None

ラン番号

date: str#

None

測定日

name: str | None#

None

ファイル名

model_post_init(__context: Any) None#
_stem() str#

(プライベート関数)ファイル名のstemを取得する

_osechi_raw_data(search_pattern='osechi_data_*.csv') list[pathlib.Path]#

(プライベート関数)前処理したファイル名のリストを取得する

_osechi_preprocessed_data() list[pathlib.Path]#

(プライベート関数)前処理したファイル名のリストを取得する

_osechi_resampled_data() list[pathlib.Path]#

(プライベート関数)リサンプルしたファイル名のリストを取得する

_ondotori_raw_data() list[pathlib.Path]#

(プライベート関数)おんどとりのデータを取得する

_threshlod_logs_data() list[pathlib.Path]#

(プライベート関数)スレッショルド設定のログを取得する

_threshold_scan_data(search_pattern) list[pathlib.Path]#

(プライベート関数)スレッショルド測定のデータを取得する

_to_dataframe(fnames, **kwargs) pandas.DataFrame#

(プライベート関数)すべてのファイルをデータフレームに変換する

Args:

  • fnames (list[Path]): ファイル名のリスト

  • **kwargs: pd.DataFrameのオプション

Returns:

  • data (pd.DataFrame): データフレーム

preprocessed_data() pandas.DataFrame#

前処理したデータフレーム

resampled_data() pandas.DataFrame#

リサンプルしたデータフレーム

ondotori_data() pandas.DataFrame#

おんどとりのデータフレーム

threshold_logs() pandas.DataFrame#

スレッショルド設定のデータフレーム

threshold_scan(search_pattern, **kwargs) pandas.DataFrame#

スレッショルド測定のデータフレーム

__str__()#
haniwers.v0.dataset.reformat_datetime(datetime: str) str#

日時を変換する

Examples:

>>> reformat_datetime("2022-05-18T20:48:14")
2022-05-18T20:48:14

>>> reformat_datetime("2022-06-02T18:52:36.442190+09:00")
2022-06-02T18:52:36
haniwers.v0.dataset.load_raw_data(fname: pathlib.Path, **kwargs) pandas.DataFrame#

(削除予定)DAQで取得したデータ形式を pd.DataFrame に変換して読み込む

Args:

  • fname (Path): 測定データのファイル名

  • **kwargs: pd.read_csvのオプション

Returns:

  • data (pd.DataFrame): データフレーム

Notes:

  • ファイルの保存形式(=拡張子)で pd.read_csv の引数をちょっと変える必要がある。拡張子は .dat / .csv だけOKにしてあり、それ以外の場合は sys.exit する。

  • .csv はそのままカンマ区切り、.dat はスペース区切り( sep=" " )として、 pd.read_csv する。

  • ファイル内のカラム名は適当だったり、なかったりする。適切なカラム名を付与する。カラム名はこの関数内にハードコードしている。

  • イベント時刻( time )は pd.datetime オブジェクトに変換する。使ったDAQのバージョンによって記録された日時の形式が異なるので、それを内部で変換している。

  • 各レイヤーのヒットの有無( True / False )を確認して、ヒット用のカラム( hit_top / hit_mid / hit_btm )に保存する。現在、各レイヤーの値自体には意味がない。そのうち光量など意味を持たせる可能性はあるかも?

  • ヒットのあったレイヤーのパターンを計算して 8ビット で表現する。hit_type = hit_top * 4 + hit_mid * 2 + hit_btm * 1

haniwers.v0.dataset.load_files(fnames: list[pathlib.Path]) pandas.DataFrame#

(削除予定)複数のファイルを読み込み、単一のデータフレームに変換する

Args:

  • fnames (list[Path]): 測定データのファイルの一覧

Returns:

  • data (pd.DataFrame): すべてのファイルを結合したデータフレーム

Notes:

  • fnames で列挙されたファイルごとに、データフレームに変換する

  • ファイル名の一覧が空の場合は終了する

  • 個々のデータフレームを結合して単一のデータフレームを作成する

  • 結合したデータフレームは、時刻(time)でソートしておく