GWexpy 機能一覧 (GWpyユーザー向け)
本ドキュメントでは、GWexpy で GWpy に対して拡張・追加された機能を網羅的にリストアップします。
ここに含まれる機能は、gwexpy をインポートすることで利用可能になります。
1. GWpy既存クラスの機能拡張 (軽微なもの)
TimeSeries, FrequencySeries, Spectrogram 等の基本クラスに対する、利便性向上のためのメソッド追加や機能強化です。
基本メソッドの拡張 (TimeSeries / FrequencySeries / Spectrogram)
位相・角度:
.phase(unwrap=False): 位相の計算.angle(unwrap=False):.phase()のエイリアス.radian(unwrap=False): ラジアン単位での位相.degree(unwrap=False): 度数法での位相np.unwrapのサポート
リサンプリング・補間・編集:
.interpolate(new_times, method='linear'): データの補間.resample(rate):scipyまたはobspy(Lanczos) バックエンドを用いたリサンプリングの強化.decimate(factor): 間引き.tail(n): 末尾nサンプルの抽出.crop(start, end): (gwexpy.time.to_gpsによる柔軟な時刻指定をサポート).append(other): 結合処理の強化
前処理 (Preprocessing):
.impute(method=...): 欠損値補完 (線形補間, ffill, bfill)。max_gap制約なども指定可能。.standardize(): 標準化 (Z-score normalization).whiten(method='pca'|'zca'): 白色化 (Whitening)。return_model=Trueでモデルを取得可能。
ピーク検出:
.find_peaks(...): 信号内のピーク検出 (scipy.signal.find_peaksラッパー)
GPS Time 関連
GPS時刻のベクトル演算やフォーマット変換をサポートするユーティリティ群 (
gwexpy.time,gwexpy.plot.gps等で利用可能)。
描画関連 (Plotting)
日時軸: プロット時の横軸を自動的に日時 (datetime) 形式にフォーマットする機能。
一括描画:
Spectrogram.plot_summary()などによる、スペクトログラムと時間平均ASDの同時プロット。地図・全天図:
gwexpy.plot.GeoMap,gwexpy.plot.SkyMapによる地図上へのデータプロット機能。PairPlot:
gwexpy.plot.PairPlotによる多変量データのペアプロット(散布図行列/相関図)。
コレクションクラスの拡張 (TimeSeriesList / TimeSeriesDict)
GWpyに存在する TimeSeriesList, TimeSeriesDict に対しても、一括処理機能を追加拡張しています。
一括信号処理:
.fft_time_all(),.resample_all(rate),.filter_all(*args)一括スライス:
.sel_all(...),.isel_all(...)算術演算のブロードキャスト
2. 新規クラスの導入
多チャンネルデータ、行列データ、物理場などを扱うための新しいデータ構造です。
新規コレクション (New Collections)
GWpyには標準実装されていない、周波数・時間周波数データのためのコレクションクラスです。GWpyの TimeSeries に対する TimeSeriesList, TimeSeriesDict の立ち位置になります。
FrequencySeriesList,FrequencySeriesDictSpectrogramList,SpectrogramDict
マトリックス (SeriesMatrix)
データを「行列」の要素として持つ多次元データ構造です (Row, Col, Axis…)。
TimeSeriesMatrix: (Rows, Cols, Time)FrequencySeriesMatrix: (Rows, Cols, Frequency)SpectrogramMatrix: (Rows, Cols, Time, Frequency)
特徴・機能:
行列演算: 要素ごとの行列積 (
@)、逆行列 (.inv())、行列式 (.det())、トレース (.trace())、シュア補行列 (.schur())。MIMOシステムの伝達関数解析などに強力。統計処理: 行・列方向の平均・分散演算 (
.mean(axis),.std(axis)等) により、センサーアレイ全体の統計量を一括計算。バッチ処理: 各要素に対する信号処理(フィルタリング、リサンプリング、白色化など)の一括適用。
物理フィールド (Fields)
4次元 (時間/周波数 + 3次元空間/波数) の物理場を扱うクラスです。
ScalarField/VectorField/TensorField
特徴・機能:
ドメイン管理: 時間/周波数軸 (
axis0) と空間/波数軸 (space_domain) の状態を管理し、相互変換 (.fft_time,.fft_space) をサポート。空間抽出:
.extract_points()により任意の空間座標での時系列データを抽出・補間。ベクトル・テンソル解析: 内積、外積、発散、回転などの物理演算と、座標変換(デカルト座標系など)。
シミュレーション:
gwexpy.noise.fieldと連携したノイズ場の生成(等方性ノイズ、平面波など)。
その他
BifrequencyMap: 2つの周波数軸を持つマップデータ (STLTGram等)。
3. 高度な解析メソッド (単チャンネル)
ノイズシミュレーション (gwexpy.noise)
from_asd(asd, ...): ASD (振幅スペクトル密度) からの時系列生成colored_noise(psd, ...): 有色ノイズの生成field.simulate(...): ノイズ場の生成pygwinc連携:gwexpy.noise.gwinc_を通じた干渉計ノイズバジェットモデルの利用。
時系列解析 (TimeSeries)
.hilbert(): ヒルベルト変換(解析信号).envelope(): 包絡線 (abs(hilbert)).demodulate(f): ロックインアンプ・復調.arima(order, ...): AR/MA/ARMA/ARIMAモデル解析 (statsmodels,pmdarimaラッパー).ar(p),.ma(q),.arma(p, q): AR/MA/ARMAのショートカット.hurst(): ハースト指数の計算.skewness(): 歪度 (Skewness).kurtosis(): 尖度 (Kurtosis)
周波数スペクトル解析 (FrequencySeries)
.differentiate(),.integrate(): 周波数ドメインでの微分・積分.differentiate_time(),.integrate_time(): 周波数ドメインでの時間微分・積分(Displacement ↔ Velocity ↔ Acceleration 変換等).group_delay(): 群遅延の計算
時間周波数解析 (Spectrogram / Special Transforms)
GWpyのスペクトログラムとQ変換に加えて、様々な時間周波数解析手法を提供します。
hht(): ヒルベルト・ファン変換 (HHT)。EMD (Empirical Mode Decomposition) によるIMF分解と瞬時周波数解析。stlt(): 短時間ラプラス変換 (Short-Time Laplace Transform)。減衰定数 \(\sigma\) を考慮した解析。cepstrum(): ケプストラム解析 (倒周波数)。cwt(): 連続ウェーブレット変換 (pywtラッパー)。
統計的推定・フィッティング
Fitting (
gwexpy.fitting):FitResult,Model: iminuitによるchi-square Fitting (実数、複素数) とMCMC解析TimeSeries,FrequencySeriesにも.fit()等のメソッドがMixされています。
Bootstrap:
bootstrap_spectrogram: スペクトログラムのブートストラップ推定
4. 高度な解析メソッド (多チャンネル)
成分分析 (gwexpy.timeseries.decomposition)
PCA: 主成分分析ICA: 独立成分分析ZCA: 白色化 (.whiten(method='zca')として利用)
相関・統計解析
相関指標:
dCor: 距離相関 (Distance Correlation)MIC: 最大情報係数 (Maximal Information Coefficient)Pearson,Kendall: 基本的な相関係数
Bruco:
多チャンネルコヒーレンス探索によるノイズ源特定ツール (
gwexpy.analysis.bruco)
システム解析・制御
MIMO / 状態空間モデル:
python-control連携:TimeSeries.from_control(response),to_control_frdなどによる制御系設計ライブラリとの相互変換。行列クラス (
SeriesMatrix) を用いたMIMO伝達関数・時系列解析
雑音注入試験解析:
gwexpy.analysis.response: 伝達関数推定や結合係数算出のための実験データ解析ツール
行列演算:
逆行列 (
.inv())、行列式 (.det())、トレース (.trace())、シュア補行列 (.schur()) などの基本操作。
5. 外部ツール連携 (Interop)
外部ライブラリとのオブジェクト相互変換機能です (.to_*() / .from_*())。
Deep Learning / Array Libraries:
PyTorch(Tensor,Dataset/DataLoader):to_torch,to_torch_dataset等TensorFlow(Tensor):to_tfJAX(Array):to_jaxCuPy(ndarray):to_cupyDask(dask.array):to_daskZarr:to_zarr/from_zarr
Data Structures:
pandas(Series/DataFrame):to_pandas,to_pandas_dataframexarray(DataArray):to_xarraypolars(Series/DataFrame):to_polars_seriesSQLite,JSON: 軽量な保存・読み込み
Domain Specific:
Obspy(Seismology):Trace,StreamMNE(EEG/MEG):Raw,RawArray(to_mne)Neo(Electrophysiology):AnalogSignal(to_neo)Librosa/Pydub(Audio): 音声データ変換SimPEG(Geophysics):Dataオブジェクトpython-control:FrequencyResponseData(FRD) 等ROOT(CERN):TGraph,TH1D,TH2D,TMultiGraphSpecutils:Spectrum1D(to_specutils)Pyspeckit:Spectrum(to_pyspeckit)Astropy:TimeSeries(to_astropy_timeseries)Quantities:Quantity(to_quantity)
データフォーマットI/O拡張
GWpyが標準サポートする形式に加え、以下に対応(または拡張)しています。
ATS(Metronix MTデータ)GBD(GRAPHTEC データロガー)アナログCHはヘッダのアンプレンジ(例:
20mV等)を用いてcount -> Vに換算します。Alarm/AlarmOut/Pulse*/Logic*はデジタル/ステータスとして扱い、値を 0/1 に正規化し unit を dimensionless にします。必要に応じて
TimeSeriesDict.read(..., format="gbd", digital_channels=[...])でデジタル扱いするチャンネル名を上書きできます。
TDMS(LabVIEW / NI)MiniSEED,SAC,GSE2(地震波データ, Obspy連携)WIN(地震波データ)0.5バイト(4bit差分)/ 3バイト差分の復号について、ObsPyの既知の不具合・注意点を踏まえた実装になっています。
参考: 中川茂樹・加藤愛太郎「WINフォーマットデータをObsPyで読み込む新しいモジュール」(東京大学地震研究所技術研究報告 No.26, 2020)。
gwexpyの実装:
gwexpy/timeseries/io/win.py(4bit差分の下位ニブル処理・奇数差分の末尾ニブルスキップ、24bit差分の符号付き復元など)。
DTTXML(LIGO Diagnostic Test Tools)SDB(気象計 Davis データ)Midas(PSI/DAQフォーマット)Parquet,Feather,Pickle(pandas連携)WAV(Audio, 拡張サポート)ROOTfile (.root)
Pickle / shelve に関する注意
[!WARNING] 信頼できないデータを
pickle/shelveで読み込まないでください。ロード時に任意コード実行が起こり得ます。
gwexpy の pickle は、可搬性を優先して unpickle 時に GWpy 型を返す設計になっています (つまり、読み込み側に gwexpy が無くても gwpy があれば復元できます)。
import pickle
import numpy as np
from gwexpy.timeseries import TimeSeries
ts = TimeSeries(np.arange(10.0), sample_rate=1.0, t0=0, unit="m")
obj = pickle.loads(pickle.dumps(ts))
# obj は gwpy.timeseries.TimeSeries
互換性メモ:
TimeSeries/FrequencySeries/Spectrogram-> unpickle 時に GWpy オブジェクトTimeSeriesDict/TimeSeriesList-> unpickle 時に GWpy のコレクションFrequencySeriesDict/List/SpectrogramDict/List-> unpickle 時に builtins のdict/list(中身はGWpyオブジェクト)Matrix系やField系など gwexpy 独自型は、この可搬性契約の対象外です
保持されるもの(ベストエフォート):
数値データ(
.value)軸情報(
times/frequencies)GWpy側で一般的に扱えるメタデータ(
unit,name,channel,epoch)
保持されないもの:
gwexpy独自の内部属性(例:
_gwex_*)や、gwexpyで追加した振る舞い
6. GUI アプリケーション
pyaggui (
gwexpy.gui.pyaggui):DTT diaggui (C++, ROOT) を模したpyqt5ベースのGUIアプリケーション。