haniwers.v0.preprocess#

Module Contents#

Functions#

get_fnames

測定データの一覧を取得

read_data_with_pandas

pd.DataFrameに変換

read_data_with_polars

pl.DataFrameに変換

read_data

測定データをデータフレームに変換

add_time

timeカラムを追加

add_hit

hitカラムを追加

add_hit_type

hit_typeカラムを追加

resample_data

測定データをリサンプル

resample_data_with_hit_type

測定データをリサンプル

preprocess_data

測定データを前処理する

raw2csv

測定データを指定してデータフレームに変換する

run2csv

ランを指定してデータフレームに変換する

API#

haniwers.v0.preprocess.get_fnames(read_from: str, search_pattern: str) list[pathlib.Path]#

測定データの一覧を取得

測定データのファイル名の一覧を取得します。 ファイル名はPathオブジェクトに変換しています。 リストはファイル名で昇順ソートします。

Args:
  • read_from (str): 測定データがあるパス

  • search_pattern (str): ファイル名の検索パターン

Returns:
  • fnames (list[Path]): 測定データの一覧

Example:

fnames = get_fnames(
    read_from="../data/raw_data/20240601_run80",
    search_pattern="osechi_data_*.csv")
haniwers.v0.preprocess.read_data_with_pandas(fnames: list[pathlib.Path]) pandas.DataFrame#

pd.DataFrameに変換

複数の測定ファイルを読み込んでpd.DataFrameに変換します。 測定ファイルの拡張子は.dat.csvに限定しています。

Args:
  • fnames (list[Path]): 測定データのファイル名のリスト

Exception:
  • .dat / .csv以外の拡張子の場合は中断(break)

Returns:
  • merged (pd.DataFrame): 結合したデータフレーム

haniwers.v0.preprocess.read_data_with_polars(fnames: list[pathlib.Path]) pandas.DataFrame#

pl.DataFrameに変換

複数のファイルを読み込んでpl.DataFrameに変換します。 polarsで読み込んだ方が、少し処理が速くなります。

ただし、そのままpl.DataFrameを返すと、あとの処理がうまくいかないので、 最後にpl.DataFrameからpd.DataFrameに変換しています。

Args:
  • fnames (list[Path]): 測定データのファイル名のリスト

Returns:
  • merged (pd.DataFrame): 結合したデータフレーム

haniwers.v0.preprocess.read_data(fnames: list[pathlib.Path]) pandas.DataFrame#

測定データをデータフレームに変換

read_data_with_polarsを使ってデータフレームに変換します。

Example:

fnames = get_fnames(
    read_from=...,
    search_pattern=".csv"
    )
data = read_data(fnames)
haniwers.v0.preprocess.add_time(data: pandas.DataFrame, offset: int, timezone: str) pandas.DataFrame#

timeカラムを追加

測定データのデータフレームにtimeカラムを追加します。 timeカラムはdatetimeカラムをタイムゾーン付き日時オブジェクトに変換したものです。 また、offset(秒)の分、測定時刻を正しい時刻に修正します。

Args:
  • data (pd.DataFrame): 測定データ

  • offset (int): 測定時刻のオフセット(秒)

Returns:
  • data (pd.DataFrame): timeカラムを追加した測定データ

Example:

data = read_data(fnames)
data = add_time(data)

注意

Raspberry Pi 4はRTCを内蔵していません。電源を切ると時計がストップします。 測定を開始する前に、ネットワークに接続してNTPから時刻を自動取得するか、 dateコマンドなどで時刻を手動設定する必要があります。 その作業を忘れてしまった場合のために、offsetオプションがあります。

haniwers.v0.preprocess.add_hit(data: pandas.DataFrame) pandas.DataFrame#

hitカラムを追加

各シンチのレイヤーにヒットがあったかどうかを確認し、hit_レイヤー名カラムを追加します。 ヒットがある場合は1、ヒットがない場合は0です。

Args:
  • data (pd.DataFrame): 測定データ

Returns:
  • data (pd.DataFrame): hitカラムを追加したデータフレーム

Example:

data = read_data(fnames)
data = add_time(data)
data = add_hit(data)
haniwers.v0.preprocess.add_hit_type(data: pandas.DataFrame) pandas.DataFrame#

hit_typeカラムを追加

レイヤーごとのヒット情報から、ヒットの種類を計算します。 ヒット情報が計算できてない場合は、警告を表示し、元のデータを返します。

Args:
  • data (pd.DataFrame): add_hitしたあとの測定データ

Returns:
  • data (pd.DataFrame): hit_typeを追加したデータフレーム

Example:

data = read_data(fnames)
data = add_time(data)
data = add_hit(data)
data = add_hit_type(data)
haniwers.v0.preprocess.resample_data(data: pandas.DataFrame, interval: int)#

測定データをリサンプル

dataに指定した測定データをpandas.DataFrame.resampleでリサンプルします。 データは前処理済みのデータを指定してください。 再集計したデータをさらに、再集計することもできます。

Note:
  • 入力データに必要なカラム: ["time", "hit_type", "hit_top", "hit_mid", "hit_btm", "adc", "tmp", "atm", "hmd"]

  • 出力データに追加されるカラム: ["interval", "event_rate", "event_rate_top", "event_rate_mid", "event_rate_btm"]

Args:
  • data (pd.DataFrame): 前処理済みのデータフレーム

  • interval (int): リサンプル間隔(秒)

Returns:
  • merged (pd.DataFrame): 再集計後のデータフレーム

haniwers.v0.preprocess.resample_data_with_hit_type(data: pandas.DataFrame, interval: int) pandas.DataFrame#

測定データをリサンプル

ヒット種類(hit_type)ごとにリサンプルします。

Args:
  • data (pd.DataFrame): hit_typeを持つデータフレーム

  • interval (int): リサンプルの間隔(秒)

Returns:
  • resampled (pd.DataFrame): hit_typeごとにリサンプルしたデータフレーム

haniwers.v0.preprocess.preprocess_data(data: pandas.DataFrame, interval: int, datetime_offset: int, timezone: str) tuple[pandas.DataFrame, pandas.DataFrame]#

測定データを前処理する

Args:
  • data (pd.DataFrame): 測定データ

  • interval (int): リサンプル間隔(秒)

  • datetime_offset (int): 時刻のオフセット(秒)

  • timezone (str): タイムゾーン情報

Returns:
  • data (pd.DataFrame): 前処理したあとのデータ

  • resampled (pd.DataFrame): リサンプルしたデータ

haniwers.v0.preprocess.raw2csv(fnames: list[pathlib.Path], interval: int, datetime_offset: int, timezone: str) tuple[pandas.DataFrame, pandas.DataFrame]#

測定データを指定してデータフレームに変換する

Args:
  • fnames (list[Path]): 前処理するファイル名のリスト

  • interval (int): リサンプル間隔(秒)

  • datetime_offset (int): 時刻のオフセット(秒)

  • timezone (str): タイムゾーン情報

Returns:
  • data (pd.DataFrame): 前処理したあとのデータ

  • resampled (pd.DataFrame): リサンプルしたデータ

haniwers.v0.preprocess.run2csv(run: haniwers.v0.config.RunData) tuple[pandas.DataFrame, pandas.DataFrame]#

ランを指定してデータフレームに変換する

Args:
  • run (RunData): RunDataオブジェクト

Returns:
  • data (pd.DataFrame): 前処理したあとのデータ

  • resampled (pd.DataFrame): リサンプルしたデータ

Example:

run = RunData(...)
data, resampled = run2csv(run)
print(f"gzip={len(data)}")
print(f"csv ={len(resampled)}")