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
Sondesetをinterpオプションに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年度三重大学陸海空・環境科学実習にて観測された。
おわりに
お気づきの点がありましたら、こちらまで。