segyio について
segyioは、SEG-Y地震データの読み取り、確認、変更、作成に使うPythonライブラリです。トレースやヘッダーに加え、3D測量データの形状に沿ったスライスにも対応します。
主な機能
- 01トレースとヘッダーの読み取り
- 02インライン・クロスラインのスライス取得
- 033D測量データ形状の確認
- 04SEG-Yファイルの作成と変更
活用シーン
- 01トレースや3Dスライスの抽出
- 02測量ヘッダーと形状の確認
- 03処理データのSEG-Yへの書き込み
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ steadfastasart/ geoscience-skills --skill segyioインストール後、Claude Code で/segyioを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/header_fields.mdtroubleshooting.mdscripts/extract_subset.pyinspect_segy.py詳細
segyio - SEG-Y 地震データ
クイックリファレンス
import segyio
# Read
with segyio.open('seismic.sgy', 'r') as f:
print(f.tracecount, len(f.samples))
trace0 = f.trace[0] # Single trace as numpy array
data = segyio.tools.collect(f.trace[:]) # All traces
# 3D access (specify inline/xline byte locations)
with segyio.open('seismic.sgy', 'r', iline=189, xline=193) as f:
inline_100 = f.iline[100] # 2D array (xlines x samples)
cube = segyio.tools.cube(f) # Full 3D cube
# Write
spec = segyio.spec()
spec.samples = samples
spec.tracecount = n_traces
with segyio.create('output.sgy', spec) as f:
f.trace[0] = data
主なアクセス方法
| モード | 説明 |
|---|---|
f.trace[i] | インデックスによるトレースへの順次アクセス |
f.header[i] | トレースヘッダーへのアクセス(辞書形式) |
f.iline[n] | インラインスライス(3D 調査) |
f.xline[n] | クロスラインスライス(3D 調査) |
f.depth_slice[n] | 水平の時間/深度スライス |
f.text[0] | テキストヘッダー(3200 バイト) |
f.bin | バイナリヘッダー |
基本操作
開いて内容を確認する
with segyio.open('seismic.sgy', 'r') as f:
print(f"Traces: {f.tracecount}")
print(f"Samples: {len(f.samples)}")
print(f"Sample interval: {f.samples[1] - f.samples[0]} ms")
if f.ilines is not None:
print(f"Inlines: {f.ilines}")
print(f"Crosslines: {f.xlines}")
トレースヘッダーを読み込む
with segyio.open('seismic.sgy', 'r') as f:
header = f.header[0]
print(header[segyio.TraceField.INLINE_3D])
print(header[segyio.TraceField.CDP_X])
# Get all values for one field
inlines = f.attributes(segyio.TraceField.INLINE_3D)[:]
3D データを読み込む
with segyio.open('seismic.sgy', 'r', iline=189, xline=193) as f:
inline_data = f.iline[100] # Shape: (n_xlines, n_samples)
xline_data = f.xline[200] # Shape: (n_ilines, n_samples)
time_slice = f.depth_slice[250] # Shape: (n_ilines, n_xlines)
cube = segyio.tools.cube(f) # Shape: (ilines, xlines, samples)
非構造化データを読み込む
# For 2D lines or unsorted data
with segyio.open('seismic.sgy', 'r', ignore_geometry=True) as f:
data = segyio.tools.collect(f.trace[:])
新しい SEG-Y を作成する
import numpy as np
spec = segyio.spec()
spec.samples = np.arange(500) * 4 # 4ms sample rate
spec.tracecount = 100
spec.format = 1 # IBM float
with segyio.create('output.sgy', spec) as f:
for i in range(100):
f.trace[i] = data[i]
f.header[i] = {
segyio.TraceField.TRACE_SEQUENCE_LINE: i + 1,
}
既存ファイルを変更する
with segyio.open('seismic.sgy', 'r+') as f:
f.trace[0] = f.trace[0] * 2.0
f.header[0][segyio.TraceField.CDP] = 999
データ形式
| コード | 形式 |
|---|---|
| 1 | IBM 4 バイト浮動小数点数 |
| 2 | 4 バイト符号付き整数 |
| 3 | 2 バイト符号付き整数 |
| 5 | IEEE 4 バイト浮動小数点数 |
| 8 | 1 バイト符号付き整数 |
代替ツールとの使い分け
| ツール | 最適な用途 |
|---|---|
| segyio | 高速な SEG-Y の入出力、3D インライン/クロスラインへのアクセス、ヘッダー操作 |
| obspy | より幅広い地震学用途:FDSN アクセス、波形処理、イベント解析 |
| segysak | xarray ベースの SEG-Y ワークフロー、NetCDF 変換、ラベル付き次元 |
segyio を使う場合:トレース、ヘッダー、3D スライスの読み込みや、プログラムによる新しい SEG-Y ファイルの作成など、SEG-Y ファイルへの高速かつ低レベルなアクセスが必要な場合です。
代わりに obspy を使う場合:ファイル入出力にとどまらない地震学的処理、すなわち機器応答の除去、FDSN データの取得、地震解析が必要な場合です。
代わりに segysak を使う場合:ラベル付き次元(インライン、クロスライン、時間)を備えた xarray との統合や、NetCDF/Zarr への簡単な変換が必要な場合です。
よくあるワークフロー
3D 地震データを読み込み、内容を確認して抽出する
- [ ] Open file with `segyio.open()`, specify `iline=` and `xline=` byte positions
- [ ] Inspect geometry: trace count, sample count, inline/crossline ranges
- [ ] Read headers to verify coordinate and survey metadata
- [ ] Extract target inline/crossline slices or full cube
- [ ] Apply amplitude scaling or subset extraction as needed
- [ ] Write results to new SEG-Y or export as numpy arrays
よくある問題
| 問題 | 解決策 |
|---|---|
| ジオメトリが検出されない | バイト位置を iline= と xline= で指定します |
| 3D スライスを読み込めない | 非構造化データには ignore_geometry=True を使用します |
| インライン/クロスラインのバイト位置が正しくない | f.header[0] でヘッダーを確認し、正しいバイト位置を特定します |
| ファイルを開けない | ファイルパス、権限、SEG-Y 形式の妥当性を確認します |
参考資料
- トレースヘッダーフィールド - ヘッダーフィールドの完全なリファレンス(バイト、型)
- トラブルシューティング - よくある問題と解決策
スクリプト
- scripts/inspect_segy.py - SEG-Y ファイルの構造とジオメトリを確認します
- scripts/extract_subset.py - トレースまたはインラインのサブセットを抽出します
コメント
Markdown 対応