台風の経路と勢力を眺める

## はじめに

気象庁では、過去の台風の経路や位置が提供されています。その中には、平成13年（2001年）以降に発生した台風の位置表も含まれており、台風の各位置における勢力（中心気圧や最大風速等）を簡単に確認できるようになっています。

今回は、この位置表を使って、2001年以降の台風について、位置と勢力の関係を概観してみることにします。

## 気象庁から台風位置表 CSV を取得し、加工する
気象庁では、以下のページで、各年ごとに位置表が提供されています。

https://www.data.jma.go.jp/yoho/typhoon/position_table/index.html

PDF の他、CSV でも提供されていますが、これは各台風の位置毎に１レコードとなっている[整然データ/tidy data](https://ja.wikipedia.org/wiki/Tidy_data)  となっており、加工しやすくなっております。

今回は、上記ページからダウンロードした各年ごとの CSV を一つの CSV にまとめて、次の作業に使っていきたいと思います。１つの CSV にまとめる作業は R で行いました。作業フォルダに、ダウンロードした各年の台風位置表 table2001.csv ～ table2023.csv を格納し、以下のスクリプトでまとめることができます。

```R
flist <- list.files("./", pattern="table")
df <- NULL
for( file in flist ){
  d <- read.csv(file(file, encoding = "cp932"), header=TRUE)
  df <- rbind(df, d)
}
write.csv(df, "typhoon-ichihyo-2001-22.csv", row.names = FALSE)
```
:::note warn
投稿時点で、2023年の台風は1号までのデータが提供されていました。
:::

## 相関を観察する
台風の位置（経度・緯度）や勢力（中心気圧や最大風速、暴風域）をプロットし、関係性を観察してみます。

```R
# 台風位置表を一つにまとめた CSV を読み込み
df <- read.csv("typhoon-ichihyo-2001-22.csv", header=TRUE)
# 最大風速34kt以上のみを対象
tdf <- subset(df, df[,11]>0) 
# 以下の中から選択した項目について、マルチプロットを行う
# 1:年 2:月 3:日 4:時（UTC） 5:台風番号 6:台風名	
# 7:階級 8:緯度 9:経度 10:中心気圧 11:最大風速	
# 12:50KT長径方向 13:50KT長径 14:50KT短径	
# 15:30KT長径方向 16:30KT長径 17:30KT短径  18:上陸
pairs(tdf[,c(2,8,9,10,11,13)], panel = panel.smooth)
```
![マルチプロット_34kt以上.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842832/bd012688-f46d-0aa2-4980-c6974e0dd67e.png)

ちなみに、上陸・通過時点の位置のみに絞った場合、以下のようになります。

```R
# 「上陸（再上陸を含む）または通過の直前」の位置のみを対象
tdf <- subset(df, df[,18]==1)
pairs(tdf[,c(2,8,9,10,11,13)], panel = panel.smooth)
```
![マルチプロット_上陸のみ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842832/1d4e2096-3e1f-db70-521a-bc13d391b52b.png)

上記２つの図を見てみると、中心気圧が低いほど最大風速も大きい傾向がありそうです。また、暴風域の目安として見ている50ノット長径はばらつきがありますが、一応、見た目上は、中心気圧や最大風速と相関がありそうです。

:::note warn
なお、今回プロットに利用している位置は、各台風毎に時系列データとなっていますので、独立性は保証されていないと考えるのが自然でしょう。そのため、単純に単回帰分析等を当てはめることは避けています。
:::

また、緯度と中心気圧の関係を詳しく見てみようともう一つ図を作りました。
```R
pcol = tdf[,2] # 年ごとに色を変更
plot(tdf[,8], tdf[,10], col=pcol, main="緯度と中心気圧の関係")
abline(v=35.5, col="red") # 東京横浜
abline(v=33.5, col="red") # 紀伊半島
abline(v=31, col="red") # 大隅半島
abline(v=26.2, col="red") # 那覇市
abline(h=911.8, col="red") # 室戸台風
abline(h=929.6, col="red") # 伊勢湾台風
```
![緯度と中心気圧.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842832/741560fc-8302-3fb9-9b1b-b3dbccaeac95.png)

こちらは、最大風速34ノット以上の位置の情報をすべてプロットしたのでごちゃごちゃしていますが、「プロットがされていない領域」があります。すなわち、紀伊半島の先端部（北緯約33.5度）以北では、伊勢湾台風（1959年、上陸時中心気圧 929.6 hPa）級以上の台風は、**2001年以降に限れば**、経験がないということが分かります。なお、**今後も来ないとは言っていない**です（気象学的にどうなのかは気になります）。

大隅半島（北緯約31度）以南では、伊勢湾台風級以上～室戸台風（1930年、上陸時最低気圧 911.8 hPa）級の勢力となったケースは何度かあるようです（必ずしも日本に上陸したわけではなく、同じ台風のものも複数含みます）。

伊勢湾台風、室戸台風の情報は以下の内閣府のページを参照しています。

https://www.bousai.go.jp/kyoiku/kyokun/kyoukunnokeishou/rep/1959_isewan_typhoon/index.html

## 台風の経路を地図上に表示する
台風の経路については、ウェブ地図上で表示できるように以下のページを作成しました。台風位置表のデータは GeoJSON に加工しています（詳細は、後述のレポジトリを参照してください）。ウェブ地図ライブラリは [Maplibre GL JS](https://github.com/maplibre/maplibre-gl-js) を用いています。

https://mghs15.github.io/typhoon-route-overview/

GeoJSON データには、「`{年}T{台風番号}_{台風名}` 形式の識別コード」と「上陸等したときの位置と勢力」の情報を持たせており、文字列のマッチング等により、年、台風番号、台風名、日本への上陸有無で、地図上に表示する台風経路をフィルタ出来るようにしています。

例えば、以下は、2019年に日本に上陸した台風です。
![台風上陸_2019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842832/5eb1bba5-cda1-19fb-d6de-08a726c2687e.png)
以下は、2001～2023年の各年の台風１号です。
![各年の台風1号.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842832/2bbba81d-6e11-01cc-ddd9-88b8b8e14c30.png)

:::note warn
背景は、国土地理院の最適化ベクトルタイルを用いていますが、日本以外が格納されていません。台風を示す場合は、他国もあったほうが良いので、別のデータを利用した方が良かったかもしれません。
:::

## 台風のランキング
台風の勢力について、簡単なランキングを作ってみました。当初、上記サイトに実装しようと思いましたが、せっかく整然データとなっているので、MS Excel のピボットテーブルという非常にパワフルな機能を使ったほうが、より柔軟に分析ができます。

今回の台風位置表については、「台風番号」が年と台風番号の組み合わせになっており、各台風を一意に識別できます。こちらをキーとして、各値の最大・最小値を並び変えることで台風単位のランキングを作成できます。

なお、どのランキングも**2001年以降の台風に限る**という点にはご注意ください。

以下、ランキングとなりますが、5～10位程度をめどに、同順位が多くなった時点で記載を打ち切っています。

### 中心気圧ランキング（全台風）
中心気圧の最低値を昇順に並べると以下の通りになります。
|台風番号|年|台風名|最小 / 中心気圧|
|:-:|:-:|:-:|:-:|
|1013|2010|MEGI|885|
|1614|2016|MERANTI|890|
|2102|2021|SURIGAE|895|
|1330|2013|HAIYAN|895|
|1216|2012|SANBA|900|
|1601|2016|NEPARTAK|900|
|1513|2015|SOUDELOR|900|
|1826|2018|YUTU|900|
|1622|2016|HAIMA|900|
|1419|2014|VONGFONG|900|
|1825|2018|KONG-REY|900|

### 最大風速ランキング（全台風）
最大風速を降順に並べると、以下の通りです。
|台風番号|年|台風名|最大 / 最大風速|
|:-:|:-:|:-:|:-:|
|1330|2013|HAIYAN|125|
|1013|2010|MEGI|125|
|2019|2020|GONI|120|
|2102|2021|SURIGAE|120|
|1614|2016|MERANTI|120|

### 中心気圧ランキング（上陸編）
上陸・通過地点に限るとどうでしょうか？まずは中心気圧です。

トップは2003年の[台風14号](https://www.bousai.go.jp/updates/pdf/2004_0312taifuu1000.pdf)で、上陸地点は宮古島です。直近だと2022年の[台風14号](https://www.bousai.go.jp/updates/r4typhoon14/r4typhoon14/pdf/r4typhoon14_09.pdf)がランクイン。
|上陸|台風番号|年|台風名|最小 / 中心気圧|
|:-:|:-:|:-:|:-:|:-:|
|1|314|2003|MAEMI|910|
|1|613|2006|SHANSHAN|919|
|1|712|2007|WIPHA|925|
|1|418|2004|SONGDA|925|
|1|2214|2022|NANMADOL|930|
|1|1215|2012|BOLAVEN|930|
|1|1216|2012|SANBA|935|
|1|1515|2015|GONI|940|

### 最大風速ランキング（上陸編）
次は、最大風速です。

トップは2006年の[台風13号](https://www.bousai.go.jp/updates/pdf/taifu04.pdf)で、最大風速約110ノットで石垣島付近を通過し、その後、九州へも上陸しています。

ちなみに、2006年の台風13号は中心気圧ランキング（上陸編）で2位で、そこの1位の2003年の台風14号は最大風速だと2位です。それ以下も似たような顔ぶれが並びます。2022年の[台風14号](https://www.bousai.go.jp/updates/r4typhoon14/r4typhoon14/pdf/r4typhoon14_09.pdf)もランクイン。
|上陸|台風番号|年|台風名|最大 / 最大風速|
|:-:|:-:|:-:|:-:|:-:|
|1|613|2006|SHANSHAN|110|
|1|314|2003|MAEMI|105|
|1|712|2007|WIPHA|100|
|1|418|2004|SONGDA|95|
|1|1216|2012|SANBA|90|
|1|1515|2015|GONI|90|
|1|2214|2022|NANMADOL|90|

## レポジトリ
CSV から GeoJSON への変換コードや、ウェブ地図のコード等を置いています。言語は JavaScript メインですが、解析用の R スクリプトも置いています。

https://github.com/mghs15/typhoon-route-overview

## 感想

今まで、特定の台風のみに注目して調べ物を行っていましたが、こうして全体像を見ることができて勉強になりました。

便利なデータが提供されていたおかげで、時間をかけずに簡単な観察を行うことができました。感謝です。

今回は、R、ウェブ地図（JavaScript）、Excel とそれぞれの得意分野ごとにツールを変えて分析を行ってみました。データがきれいだと、色々なツールに取り込むのにも便利です。