データフォーマット#
haniwers で収集・処理されたデータの構造を理解することは、効果的なデータ解析の第一歩です。
このドキュメントでは、生データから集計データまで、各段階でのカラム(列)の定義と意味を解説します。
データ処理パイプライン#
生データ (.csv)
↓ [前処理]
前処理後 (.csv.gz)
↓ [集計]
集計データ (.csv)
生データ(.csv)のカラム#
DAQで直接取得された生データのカラム定義です。
datetimeイベント発生時刻。ISO8601形式で記録されます。
YYYY-MM-DDTHH:mm:ss(tz-naive)YYYY-MM-DDTHH:mm:SSZ(tz-aware)
使用したDAQのバージョンによって形式が異なります。
top,mid,btm各シンチレーターのヒット検出。数値は光センサー(SiPM)からのシグナルの有無を表します。
> 0: ヒット検出あり= 0: ヒット検出なし
重要: ヒット判定は
値 > 0で行います。値の大きさ自体は物理的な意味はありません。
adc上段シンチレーターのADC値(光量に比例)
tmp気温(単位: ℃)
atm気圧(単位: Pa)
hmd湿度(単位: %)
データ例#
datetime,top,mid,btm,adc,tmp,atm,hmd
2024-10-21T10:30:45,450,380,410,2500,23.5,101325,45.2
2024-10-21T10:30:46,0,0,0,0,23.5,101325,45.2
2024-10-21T10:30:47,520,420,480,2800,23.6,101325,45.3
前処理後のデータ(.csv.gz)のカラム#
生データに対して以下の処理を適用した結果です:
- 生データのカラム
すべての生データカラムがそのまま含まれます。
hit_top,hit_mid,hit_btm各シンチレーターのヒット判定(0または1)
1:raw_value > 0でヒット0:raw_value = 0でノーヒット
hit_type3層シンチの同時検出パターンを8ビットで表現した十進数値
hit_top × 4 + hit_mid × 2 + hit_btm × 1
ヒットパターン一覧#
hit_type |
top |
mid |
btm |
検出パターン |
|---|---|---|---|---|
0 |
0 |
0 |
0 |
ノーヒット |
1 |
0 |
0 |
1 |
下層のみ |
2 |
0 |
1 |
0 |
中層のみ |
3 |
0 |
1 |
1 |
中層+下層 |
4 |
1 |
0 |
0 |
上層のみ |
5 |
1 |
0 |
1 |
上層+下層 |
6 |
1 |
1 |
0 |
上層+中層(宇宙線典型) |
7 |
1 |
1 |
1 |
全層検出(宇宙線典型) |
解析のヒント:
hit_type = 6またはhit_type = 7が宇宙線イベントの指標です。
集計データ(.csv)のカラム#
複数のイベントを時間窓ごとに集計した統計データです。
基本カラム#
time集計時間ウィンドウの開始時刻
eventsそのウィンドウ内のイベント総数
hit_typeウィンドウ内での各ヒットパターンの発生回数(0~7)
hit_top,hit_mid,hit_btm各シンチレーターのヒット回数
統計カラム#
adc_mean,adc_stdADC値の平均値と標準偏差
tmp_mean,tmp_std気温の平均値と標準偏差
atm_mean,atm_std気圧の平均値と標準偏差
hmd_mean,hmd_std湿度の平均値と標準偏差
レート計算カラム#
event_rate全イベントのレート(イベント/秒)
event_rate_top,event_rate_mid,event_rate_btm各シンチレーターのヒットレート(ヒット/秒)
メタデータカラム#
interval集計時間ウィンドウの間隔(秒)
days測定開始からの経過日数
seconds測定開始からの経過秒数
runidデータ取得実行の識別子
name測定セッションの名前
description測定条件などの説明文
解析ワークフローの例#
1. 生データの確認#
import pandas as pd
# 生データを読み込み
df = pd.read_csv("osechi_data_20241021.csv")
# 基本統計
print(df.describe())
# ヒット検出の確認
print(f"Total events: {len(df)}")
print(f"Top hits: {(df['top'] > 0).sum()}")
2. 前処理後のヒットパターン分析#
# 前処理後データを読み込み
df_processed = pd.read_csv("osechi_data_20241021.csv.gz")
# 宇宙線の可能性が高いイベント
cosmic_rays = df_processed[df_processed['hit_type'].isin([6, 7])]
print(f"Possible cosmic ray events: {len(cosmic_rays)}")
print(f"Percentage: {len(cosmic_rays) / len(df_processed) * 100:.2f}%")
3. 時系列解析#
# 集計データを読み込み
df_aggregated = pd.read_csv("aggregated_data_20241021.csv")
# イベントレートの時間変化
df_aggregated['time'] = pd.to_datetime(df_aggregated['time'])
df_aggregated.set_index('time').plot(y='event_rate')
よくある質問#
Q: hit_type はなぜ必要?
A: 3層検出器の同時検出パターンから宇宙線を識別できます。バックグラウンドノイズは通常1層のみの検出(hit_type = 1, 2, 4)ですが、宇宙線は複数層の同時検出(hit_type = 6, 7)の傾向があります。
Q: 生データと前処理後データの差は?
A: 前処理は主にヒット判定の二値化(0/1)と hit_type の計算を行います。元のアナログ値(top, mid, btm, adc)は保持されるため、あとで異なる条件で再処理することも可能です。
Q: 集計データはいつ使う? A: 長期間の測定データで全体的なトレンドや日次変動を分析する場合に有用です。一方、詳細なイベント解析には前処理後のデータを使用します。