1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

bsod2 ラジオゾンデ観測データ品質管理ツール

1
Last updated at Posted at 2026-06-04

bsod2とは

明星電気のラジオゾンデ観測ソフトウェアMGPS_R, MGPS2で出力されるデータにした処理を実行するCommand Line Interface(CLI)・Pythonパッケージです。
GPL-3.0-onlyで公開しています。

小生が過去に作成した「bsod」を修正・発展させたライブラリです。
bsodで見つかったエラー・バグを修正してbsod2に実装しています。
bsodは現在、更新を行っていないため、bsod2への移行を推奨します。

インストール

PyPIレポジトリからダウンロードすることができます。

pip install bsod2

ソースから導入する際は、プロジェクトルートにて以下を実行します。

pip install .

使い方

コマンドラインから実行

bsod2コマンドで、プレーンテキスト形式の生データ(例:F2024061806S1101771.CSV)に対して品質管理を行い、csv形式で出力します。

$ bsod2 input output
  • 最初の位置引数inputには単一の生データファイルのファイルパスの他、生データが含まれるディレクトリパスを指定できます。ディレクトリパスが指定された場合、含まれるすべての生データファイルに対して品質管理を実行します。
  • 2番目の位置引数outputには、品質管理後のcsvファイルを出力するディレクトリパスを指定します。

bsod2コマンドの詳しい使い方はhelpオプション(-h)で確認できます。

bsod2 --help
usage: bsod2 [-h] [--interp {p,z}] input output

Quality control command for radiosonde data.

positional arguments:
  input           Path to the input radiosonde data file or directory.
  output          Path to save the quality-controlled data directory.

options:
  -h, --help      show this help message and exit
  --interp {p,z}  If specified, interpolate along pressure ('p') or height ('z').

Pythonで実行

モジュールbsod2は、ゾンデデータを扱うクラスであるSondesetを提供します。

初期化

Sondesetクラスは

  • 単一の生データのファイルパス
  • 生データのディレクトリパス
    で初期化されます。
from pathlib import Path
from bsod2 import Sondeset

ss = Sondeset(Path("Seisuimaru2407/raw_data/F2024061806S1101771.CSV"))
print(ss)
>>> N=1, sonde_no=["1101771"]
ss = Sondeset(Path("Seisuimaru2407/raw_data"))
print(ss)
>>> N=8, sonde_no=["1101771", "1101323", "1101386", "1101322", "1101327", "1101772", "1101388", "1101326"]

読み込んだファイルの情報を表示(print, len)

print()関数で、読み込んだデータの数とsonde No.(各ゾンデ固有の番号)を表示できます。
また読み込んだデータの数はlen()関数で表示することもできます。

len(ss)
>>> 8

各変数(気温、湿度、風など)を取得

各変数はアクセッサで得られる。
一部を除き、pint.Quantityクラスで返す。

Accessor units Description Example
df None 品質管理後の pandas.DataFrame ss[0].df
time None 時刻 ss[0].time
lat units("deg") 緯度 ss[0].lat
lon units("deg") 傾度 ss[0].lon
x units("m") 放球地点からの東向きの変位 ss[0].x
y units("m") 放球地点からの北向きの変位 ss[0].y
z units("m") 高度 ss[0].z
p units("hPa") 気圧 ss[0].p
t units("degC") 気温 ss[0].tss
rh units("percents") 相対湿度 ss[0].rh
td units("degC") 露点温度 ss[0].td
wd units("deg") 風向 ss[0].wd
ws units("m/s") 風速 ss[0].ws
u units("m/s") 風のu成分 ss[0].u
v units("m/s") 風のv成分 ss[0].v

インデクシング(indexing)

Sondesetクラスに含まれる単一の観測はインデクシングで呼び出すことができます。

print(ss[0])
>>> Sonde(sonde_no=1101771, launch_time=2024-06-18 06:01:42, product_name=iMS-100 , num_records=4174)

品質管理後のファイルをcsv形式で保存

save_dfメソッドで、品質管理後のデータをcsv形式で保存できます。

ss[0].save_df(Path("output.csv"))

高度/気圧補間

Sondesetを初期化する際、interpオプションにより高度(z)または気圧(p)軸による補間を実行する。

ss = Sondeset(DIR_PATH,interp="p")

補間の範囲・間隔のデフォルトは以下の通り。

Argument Description Default
interp Name of the interpolation axis. If None, interpolation is not performed. None
interp_pmin Minimum value of the interpolated pressure axis (hPa) 50
interp_pmax Maximum value of the interpolated pressure axis (hPa) 1100
interp_dp Step size of the interpolated pressure axis (hPa) 1
interp_zmin Minimum value of the interpolated height axis (m) 0
interp_zmax Maximum value of the interpolated height axis (m) 20000
interp_dz Step size of the interpolated height axis (m) 10

補間・結合したxarray.Dataset

Sondesetinterpオプションにpまたはzを指定して初期化した場合、読み込んだ生データを放球時刻方向に結合したxarray.Datasetをアクセッサdsにより得られる。

ss = Sondeset(Path("Seisuimaru2407/raw_data", interp="z"))
print(ss.ds)
>>> 
xarray.Dataset> Size: 785kB
Dimensions:      (n: 8, z: 2001)
Coordinates:
  * n            (n) <U7 224B '1101771' '1101323' ... '1101388' '1101326'
  * z            (z) float64 16kB 0.0 10.0 20.0 ... 1.998e+04 1.999e+04 2e+04
Data variables:
    p            (n, z) float64 128kB nan 1.007e+03 1.005e+03 ... nan nan nan
    tmp          (n, z) float64 128kB nan 18.76 18.93 19.0 ... nan nan nan nan
    wd           (n, z) float64 128kB nan 270.4 252.9 250.7 ... nan nan nan nan
    ws           (n, z) float64 128kB nan 2.426 2.09 2.16 ... nan nan nan nan
    rh           (n, z) float64 128kB nan 89.21 89.78 90.21 ... nan nan nan nan
    launch_time  (n) datetime64[us] 64B 2024-06-18T06:01:42 ... 2024-06-18T14...
    time         (n, z) datetime64[ns] 128kB 2024-06-18T06:01:42 ... 2024-06-...

サンプルスクリプト

GitHubページにて、jupyter notebook(.ipynb)形式のサンプルスクリプトを公開している。
サンプルデータは2024年度三重大学陸海空・環境科学実習にて観測された。

おわりに

お気づきの点がありましたら、こちらまで。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?