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

観測

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

インストール

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クラスで返す。

AccessorunitsDescriptionExample
dfNone品質管理後の pandas.DataFramess[0].df
timeNone時刻ss[0].time
latunits("deg")緯度ss[0].lat
lonunits("deg")傾度ss[0].lon
xunits("m")放球地点からの東向きの変位ss[0].x
yunits("m")放球地点からの北向きの変位ss[0].y
zunits("m")高度ss[0].z
punits("hPa")気圧ss[0].p
tunits("degC")気温ss[0].tss
rhunits("percents")相対湿度ss[0].rh
tdunits("degC")露点温度ss[0].td
wdunits("deg")風向ss[0].wd
wsunits("m/s")風速ss[0].ws
uunits("m/s")風のu成分ss[0].u
vunits("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")

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

ArgumentDescriptionDefault
interpName of the interpolation axis. If None, interpolation is not performed.None
interp_pminMinimum value of the interpolated pressure axis (hPa)50
interp_pmaxMaximum value of the interpolated pressure axis (hPa)1100
interp_dpStep size of the interpolated pressure axis (hPa)1
interp_zminMinimum value of the interpolated height axis (m)0
interp_zmaxMaximum value of the interpolated height axis (m)20000
interp_dzStep 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年度三重大学陸海空・環境科学実習にて観測された。

おわりに

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

コメント