見出し画像

2022年1月6日関東地方南部の大雪時の湿球温度とアメダス気象観測データプロット図

2022年1月6日日中に、関東地方南部は大雪となりました。この時の湿球温度の変化とその分布による大雪に関する考察と、この時系列図や分布図を作成するコードを紹介します。

気象庁ホームページから取得できるJSON形式のアメダスデータから分布図を作成しています。紹介するコードはpythonで記述し、matplotlibやMetPyを利用しています。サンプルコードも掲載しています。興味のある方は使ってみてください。

2022年1月6日大雪時、東京の湿球温度の変化

湿球温度は降水粒子の温度に近いと言われています。このため、雨か雪か判別する際に、気温より湿球温度を利用した方が適切と考えられます。また、雨雪判別には気温と湿度の2つの値を利用した判別手法もあります。ただし、この手法は2つの値を利用するため、時系列や分布図で表現するには工夫が必要となります。ここでは、温度と湿球温度の雨雪判別をとりあげます。

気温や湿球温度と雨・雪の関係は、竹内ら*による調査によると、気温の場合は0.4度以下では雪、1.5度で雨と雪の割合がそれぞれ50%となっています。湿球温度の場合は、0.3度以下では雪、1.0度で雨と雪の割合がそれぞれ50%となっています。
*)竹内由香里他, 降水時の気温で配分した雨雪別降水量の算定 ;「森林総合研究所研究報告」(Bulletin of FFPRI) Vol.15 No.4 (No.440) 145 - 149 December 2016

図1に2022年1月6日の東京の気温(赤実線)・湿球温度(青点線)・10分間降水量・風の時系列を示します。緑の棒グラフは10分間降水量です。0.0mmで棒が表示されている時間は降水が降っていることを示しています。

図1 2022年1月6日 東京の気温・湿球温度・降水量・風の時系列

東京は5日夜から6日朝にかけて相対湿度は50%程度と乾燥していました。10時頃から降り始め、その時の気温は2度以上、湿球温度はマイナス1度程度となっています。その後気温は降水の影響で急速に低下し、13時頃には氷点下に達しています

降り始めの雨雪判別では、先程紹介した調査によると、気温は2度以上のため「雪より雨の可能性が高い」となりますが、湿球温度は氷点下のため「雪」となります。実際に東京虎ノ門周辺では雪が降っていました。このように、温度より湿球温度で判別する方がより適切に判別できます。

降水により気温が氷点下まで下がり、この影響で雪水比(雨量1mmに対して降雪量何cm)が大きくなり、東京では6.5mmの降水量で10cmの積雪となり、雪水比は約1.5となりました。以上から、この事例において大雪となった要因の一つとして、降水が降り始める前に空気が乾燥していたため、降水により気温が氷点下まで低下したことが挙げられます。

今回の大雪は降雪量に対して降水量は少なく、乾いた雪であったため積雪してすぐ、凍りついていない状況であれば除雪は比較的楽だったと思います。ただし、気温が氷点下と低く、踏み固められて凍りついたことなどから、翌日にかけてもスリップ事故や転倒が多く発生したとみています。

図1で使用した、JupyterNotebookのコードとCSV形式のデータを下に掲載しておきます。このコードは、「アメダス気象観測データの時系列図」で紹介したコードを一部変更・追加したものです。このコードの一部の解説を、この記事の最後に示しています。

湿球温度の分布

図2に、1月6日9時における、アメダス地点の風(矢羽)、気温(左上)、露点温度(左下)、海面気圧(右上)、湿球温度(右下)をプロットした図を示します。湿球温度の計算には、気圧が必要なため観測できる地点数は気温より少なくなっています。このプロット図に等圧線を黒色、等温度線を橙色で、等湿球温度線を紫色で解析しています。

図2 2022年1月6日9時 アメダスプロット図
風(矢羽)、気温(左上)、露点温度(左下)、海面気圧(右上)、湿球温度(右下)

9時は東京で雪が降り始める前の時刻です。千葉県から神奈川県の沿岸部では、気温はほぼ3度、湿球温度はほぼ0度となっています。気温のみを考慮すると降り始めは雨の可能性があり、天気予報では「雪か雨」または「雨か雪」となるでしょう。しかし湿球温度がほぼ0度以下となっていることから、天気予報では「雪」または「雪か雨」とするのが適切と言えるのではないでしょうか。

図2の作図で使用した、JupyterNotebookのコードを下に掲載します。利用したデータについて次節で説明します。

<ファイル修正:2023年6月3日> アメダスで矢羽がある条件の時に表示しないバグがあり、修正版を追加します。下にある"plot_amedas_obs.ipynb"はバグがあります。ご留意ください。

作成する時刻と地図エリアを指定するには、下のコードの部分をコメント行に従って変更してください。ただし、表示時刻を手動設定する場合は、10日以上前のデータは取得できないので作図できません。ご注意ください!

## set_date ;; 0:最新のデータを表示する場合 1:直近の正時データ 10:手動指定
set_date = 1
#
## 手動設定 set_date = 10の場合
year=2022
month=1
day=6
hour=9
min=0
#
############  途中略  ##############
#
## 地図関連
# 地図の中心位置を指定
(lat_center, lon_center) = (35.5, 140.0)   # 関東付近

JSON形式のアメダス観測データ

図2のプロット図を作成するために利用したデータについて、説明します。

気象庁ホームページにあるアメダス表示では、JSON形式のアメダス観測データを読み取って表示しています。このJSON形式のファイルには、全国分のアメダス観測データが格納されていて、10分毎に作成されています。

2021年12月30日9時0分のこのJSONのURLは次の通りです。
https://www.jma.go.jp/bosai/amedas/data/map/20211230090000.json

このファイルのデータの例として、東京(地点番号:44132)のデータを次に示します。1つの観測値は[(観測値), (品質フラグ)]で表現されているようです。「品質フラグ」が0の場合、観測値は正常のようです。

'44132': {'pressure': [1003.8, 0], 'normalPressure': [1006.8, 0], 
'temp': [5.0, 0], 
'humidity': [56, 0], 'snow': [0, 0], 'snow1h': [0, 0], 'snow6h': [0, 0], 
'snow12h': [0, 0], 'snow24h': [0, 4], 'sun10m': [10, 0], 'sun1h': [1.0, 0],
'precipitation10m': [0.0, 0], 'precipitation1h': [0.0, 0], 
'precipitation3h': [0.0, 0], 'precipitation24h': [0.0, 0], 
'windDirection': [15, 0], 'wind': [1.3, 0]}, 

観測データの種類は、現地気圧・海面気圧・気温・湿度・積雪・1時間降雪量・6時間降雪量・12時間降雪量・24時間降雪量・10分間日照時間・1時間日照時間・10分間降水量・1時間降水量・3時間降水量・24時間降水量・16方位の風向・風速です。

また、アメダス地点の緯度や経度などの情報は、次のJSONのファイルから入手しています。
https://www.jma.go.jp/bosai/amedas/const/amedastable.json

湿球温度の計算

図1の時系列図作図コードにおける、湿球温度算出に関するコードを下に示します。ここではCSVファイルをdataframe形式に変換する関数(pd.read_csv())を利用しています。

## CSV File 読み込み
df = pd.read_csv(fn)
#print(df)
#
## 時刻  文字列をdatetimeに変換
dt_ary = np.empty(len(df['時刻']),dtype=datetime)
for ind in range(len(df['時刻'])):
    str = df['時刻'][ind].split(':')
    if int(str[0]) < 24:
        dt_ary[ind] = datetime(year,month,day,int(str[0]),int(str[1]))
    elif int(str[0]) == 24:
        dt_ary[ind] = datetime(year,month,day,0,int(str[1])) + timedelta(days=1)
#
## 気温
temp = df['気温'].to_numpy(dtype=float)
temp = units.Quantity(temp, "degC")
#
## 湿度
hum = df['相対湿度'].to_numpy(dtype=float)
hum = units.Quantity(hum, "percent")
#
## 露点温度計算
dp_temp = mpcalc.dewpoint_from_relative_humidity(temp, hum)
#
## 現地気圧
gpre = df['現地気圧'].to_numpy(dtype=float)
gpre = units.Quantity(gpre, "hPa")
#
## 湿球温度計算
wb_temp = mpcalc.wet_bulb_temperature(gpre, temp, dp_temp)

MetPyの露点温度や湿球温度を計算する関数は、dataframe形式のデータセットを直接扱えないため、numpyの配列に変換しています。この変換は、
   temp =df['気温'].to_numpy(dtype=float)
のように、to_numpy()を利用しています。その後に、データの単位を与える必要があり、
   temp = units.Quantity(temp, "degC")
のように、単位はCelsiusであることを変数に情報付与しています。

この準備することで、MetPy.cals にある露点温度や湿球温度を算出する関数を、次の通り利用できます。
  dp_temp = mpcalc.dewpoint_from_relative_humidity(temp, hum)
  wb_temp = mpcalc.wet_bulb_temperature(gpre, temp, dp_temp)

参考のために、mpcalc.wet_bulb_temperature()の説明リンクを下に掲載しておきます。

今回は、以上です。最後まで、読んでいただいてありがとうございます。




いいなと思ったら応援しよう!