台風の進路はどうなっているのでしょう

 明日以降、特に週末は台風 14 号の影響がありそうですね。毎年何度かは、台風の大きな被害に関するニュースで流れますが、今回もひどいことにならないことを祈るばかりです。

  台風の進路は個々に違いますが、大まかには太平洋高気圧の西縁を回るように進む、ということになると思います。実際には、それぞれどんな進路を辿っているのか、描画を試みました。

目次

1.台風位置表

2.台風の進路を描画

3.ついでに進路を回帰分析してみる

4.結果はこんな感じ

5.Code はこんな感じです

6.まとめ

 

1.台風位置表

 気象庁の 過去の台風資料を見ていると、2001 年以降に発生した台風の中心位置、気圧最大風速等が 6 時間ごとに記録された、「台風位置表」というデータがありました。今回もそれを 10 年分お借りして、Numpy に投げ込みます。

www.data.jma.go.jp

2.台風の進路を描画

 csv フォーマットで配信されているようでしたので、今回は、2010 年から 19 年の 10 年にわたり、10 月のみを対象にしてみました。ひとまずどんなデータなのか読み込んでみます。

import pandas as pd
import numpy as np
pd.set_option('display.max_columns', None)

yrs = [10,11,12,13,14,15,16,17,18,19]
df=pd.DataFrame()

for yr in yrs :
loadnm = 'table20'+str(yr)+'.csv'
dl = pd.read_csv(loadnm, encoding="ms932")
df = df.append(dl)

mnth = 10
df = df[df["月"] == mnth]

df.head()
時(UTC 台風番号 台風名 階級 緯度 経度 中心気圧 最大風速 50KT長径方向 50KT長径 50KT短径 30KT長径方向 30KT長径 30KT短径 上陸
351 2010 10 13 0 1013 MEGI 2 11.9 141.4 1006 0 0 0 0 0 0 0 0
352 2010 10 13 6 1013 MEGI 2 12.0 141.2 1004 0 0 0 0 0 0 0 0
353 2010 10 13 12 1013 MEGI 3 12.0 140.9 1002 35 0 0 0 9 120 120 0
354 2010 10 13 18 1013 MEGI 3 12.1 140.6 1000 35 0 0 0 9 120 120 0
355 2010 10 14 0 1013 MEGI 3 12.3 139.8 996 40 0 0 0 9 120 120 0

 今回は緯度経度のみを、Cartopy で図示してみます。

3.ついでに進路を回帰分析してみる

 そもそも、台風の平均進路のようなものはあるのでしょうか。また、進路を何らかの手段で傾向分析したら、何か有用な経路が出るのでしょうか。昨今の状況から、手段はいろいろ有りそうですが、一番オーソドックスに Numpy.polyfit を使って試してみました。

4.結果はこんな感じ

f:id:ohigehige:20201006233357p:plain

 10 月と言っても、実に色々な進路を辿ることが分かります。回帰分析については、2 次か 3 次で十分かな、という適当な目論見の下描画してみましたが…、台風の平均進路というよりは、要するに太平洋高気圧の西縁平均を記述したということになるのでしょうか。とはいえ、台風は太平洋高気圧を回り込むように進行する、という事実は確かに抽出されたと言えそうです。

5.Code はこんな感じです

# 最小二乗法
a_oct = df['経度'].to_numpy()
b_oct = df['緯度'].to_numpy()
z_oct2 = np.polyfit(b_oct, a_oct, 2)   
z_oct3 = np.polyfit(b_oct, a_oct, 3)

p_oct2 = np.poly1d(z_oct2)
p30_oct2 = np.poly1d(np.polyfit(b_oct, a_oct, 30))
xp_oct2 = np.linspace(3,60,100)
p_oct3 = np.poly1d(z_oct3)
p30_oct3 = np.poly1d(np.polyfit(b_oct, a_oct, 30))
xp_oct3 = np.linspace(3,60,100)

# 描画
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature

land_10m = cfeature.NaturalEarthFeature('physical', 'land', '10m',
edgecolor='face', facecolor=cfeature.COLORS['land'])

fig = plt.figure()
plt.figure(figsize=(12,8))

ax = plt.subplot(111, projection=ccrs.PlateCarree())
ax.set_extent([95, 180, 0, 65],ccrs.PlateCarree())
ax.add_feature(land_10m)
ax.coastlines(resolution='10m', lw=1)
ax.gridlines(linestyle='-', color='gray')
ax.set_title("Typhoon Tracks in October between 2010-2019", fontsize=16)

ty = {}
lon = {}
lat = {}
for nr, group in df.groupby(df['台風番号']):
ty[nr] = group
lon[nr] = ty[nr].経度
lat[nr] = ty[nr].緯度
ax.plot(lon[nr], lat[nr], linewidth=1, color="steelblue")

ax.plot(p_oct2(xp_oct2), xp_oct2, linewidth=4, linestyle="--", color="coral", label="2 degs of\n the fitting polynominal")
ax.plot(p_oct3(xp_oct3), xp_oct3, linewidth=5, linestyle=":", color="maroon", label="3 degs")
ax.legend(fontsize=12)

plt.show()

6.まとめ

  Cartopy を使い、過去10 年にわたる 10 月の台風の進路を描画してみました。ついでに、Numpy.polyfit を使って、最小二乗法により、台風の進路の回帰分析をしたところ、太平洋高気圧の西縁平均が抽出されたような感じとなりました。

 ですが、これでは個別に台風の進路を予測することにはほど遠そうですね。やっぱり、観測の頻度を増やし、こまめに予報を更新し続けることが近道なのかもしれませんね。現業の方には頭が下がります。

 

最後までお付き合いありがとうございました。