気象データをもとに「天気図っぽい前線」を機械学習で描いてみる(1)

# 気象データをもとに「天気図っぽい前線」を機械学習で描いてみる　その１
## 全体の流れです
### はじめに
私は地球科学を学生時代にかじり、卒業後は技術計算系システムを長く担当してきたSEです。
数年前からの機械学習ブームに対して、勉強がてら何かやってみよう、ということで自宅のMac miniを用いて気象データをいじっていました。

今回、機械学習によって「前線」を描くということをやりましたのでまとめてみました（Qiita初投稿です）。

工程が複数あるので、何回かに分けて投稿を考えています。
本稿は、全体の流れと今後の予告的なものです。

### 今回やったこと

「天気図」は気象庁が気象観測データをもとに作成しています。
テレビや新聞でよく見る、等圧線に前線や高気圧・低気圧が描かれているものです。
下図は2019年11月25日UTC18時（JST 26日3時）の「速報天気図（SPAS)」です。

関東の南東海上から北東方向に向かって「停滞前線」、東経150°から東は「寒冷前線」がさらに延びています。

![SPAS_COLOR_201911251800.v8.256.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411112/c61b08b7-433b-493d-6f62-884e8f8ab7f6.png)

「前線」というのは、性質の違う気団の境界のことで、たいていは寒気と暖気の境界です。
しかし、この時の地表の気象データ（風、気圧、気温）を可視化してみると、

![gsm_wnd_srf_2019112518.v8.256.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411112/d17201ee-f326-b521-a0af-cf2227a015cf.png)

というような感じです（京都大学生存圏研究所からダウンロードしたGSMのGPVを利用しました）。
そこら中に寒気と暖気の境界がありそうで、「なぜ天気図にひかれた１本だけが前線なの？」という気持ちになります。
なお、この図は風が矢羽、太い等値線が気圧、細い等値線と色（赤から青にかけて暖かいから寒いに変わる）が気温を表しています。

前線を自動的に描くとすると、気温データをもとにして、差が大きいところを算出するというようなことになるのかもしれませんが、それだと天気図で描かれている１本が特定される気がしません。
そこで「天気図っぽい前線」を機械学習で描画させてみよう、ということをテーマにしました。

結論から言うと、最終的に機械学習が生成できたのは下の図のような前線です。
![tst_chart_ovlyd2019_112518.v8.256.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411112/205be981-2b50-796d-a764-675ab28b0439.png)

この図は、気圧をただ純粋に可視化した図に、機械学習で生成した前線を重ね描きしたものです。
まあ、それなりの位置に前線が生成されています。

実際には、これはわりとうまくいったケースでして、他のケースだといまいちなのもあります。

速報天気図（2019年9月19日6時UTC）
![SPAS_COLOR_201909190600.v8.256.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411112/e65e52c3-f3f8-0b2e-d822-eb2e6b291848.png)

機械学習の描画
![tst_chart_ovlyd2019_091906.v8.256.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411112/e7cb377d-5ccc-d38f-3a81-29a62a19d84d.png)

このケースでは南の停滞前線は生成されていますが、北海道の北、サハリン付近の閉塞した低気圧から延びている各種前線（閉塞、寒冷、温暖）は生成してくれていません。

## 機械学習の流れ

具体的には、数値気象情報（GPV）を用いて、いくつかの気象要素を可視化したものを入力とし、気象庁から発表されている「速報天気図」の前線図を教師データとして、U-NetライクなCNNによって学習させました。

### 入力するデータ

気象庁の全球予報モデル(GSM)の初期時刻データから、地表面データ（風・気温・気圧）、上空のデータ（気圧、気温、風、相当温位、湿数）を可視化した画像。

先ほどの2019年11月25日18時UTCを例にすると以下のようなものです。

地表面データ
![gsm_wnd_srf_2019112518.v8.256.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411112/0ff8f30a-6617-52a2-b00b-3eeb4d242cbc.png)

上空のデータ
気圧・風・気温
850hPa (上空1500m付近）
![gsm_wnd_850_2019112518.v8.256.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411112/394f876b-0be7-c302-498c-dfe4f47f6ffc.png)

500hPa (上空5500m付近）
![gsm_wnd_500_2019112518.v8.256.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411112/f5bc6235-149c-dc4f-3719-69b3b7d680c3.png)

相当温位（850hPa) 
相当温位は、水蒸気量と気温を組み合わせたような概念です。
この値が大きいと高温多湿なこと示します。
![gsm_ept_850_2019112518.v8.256.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411112/cce3b9c7-6bf5-15ea-b478-e7c191320ca8.png)

湿数（700hPa)　
湿数は気温と露点温度の差で、湿度が大きいほど値が小さくなります。
これが3度以内のところに着色しています。
![gsm_situ_700_2019112518.v8.256.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411112/bf5b54e5-6a8c-0832-abba-2308b5a53817.png)

鉛直流（700hPa)
鉛直方向の空気の動きを表し、対流活動（降水活動）の目安になります。
![gsm_vvl_700_2019112518.v8.256.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411112/c5516a98-7e88-ecbe-6754-b5f037df8923.png)

### 出力されるもの

上記の画像から、CNNは以下の図を生成します。

![tst_maskout2019_112518.v8.256.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411112/aa671290-2a67-0436-b143-a60811fe0298.png)

これと、気象データから可視化した気圧図
![gsm_prs_srf_2019112518.v8.256.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411112/157c3b49-9a1e-e0dd-e56d-f3fa3871b16b.png)

を重ね合わせ、ついでに時間を記入したものが最終出力です。

![tst_chart_ovlyd2019_112518.v8.256.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411112/39bcf2a6-cf76-9823-fd38-7fc9867dc21c.png)

つまり、CNN自体は複数の画像を見て、どこに「前線」を描くべきか？を学習していることになります。

##　今後の投稿の流れ（予定）

今回やった工程について、以下のような順で投稿していこうと思います。


[第２回：気象データをもとに「天気図っぽい前線」を機械学習で描いてみる（2）](https://qiita.com/m-taque/items/988b08185097dca5f5b5 "気象データをもとに「天気図っぽい前線」を機械学習で描いてみる（2）")
入力となる気象データ可視化の話です。GPV形式の数値データを可視化するまでの話（matplotlib, GRIB形式の取り扱い）


[第３回：気象データをもとに「天気図っぽい前線」を機械学習で描いてみる（3）](https://qiita.com/m-taque/items/4d5bb45e6b5dc42dc833 "気象データをもとに「天気図っぽい前線」を機械学習で描いてみる（3）")
教習データのためにカラー天気図から前線を抜き出す話、つまり気象庁のSPASから教師データを作るために、前線部分だけを抜き出す話


[第４回：気象データをもとに「天気図っぽい前線」を機械学習で描いてみる（4）](https://qiita.com/m-taque/items/80ba51b74167b2aa669e "気象データをもとに「天気図っぽい前線」を機械学習で描いてみる（4）")
カラー天気図を増やすために白黒天気図をカラー化するCNNを作った話
第２回のスピンアウト的な話で、カラー版天気図が少なかったので、白黒版天気図をカラー化するということをこれまたCNNを使ってやりました。

[第５回：気象データをもとに「天気図っぽい前線」を機械学習で描いてみる（5）機械学習編 Automatic Front Detection in Weather Data](https://qiita.com/m-taque/items/2788f623365418db4078)

前線描画CNNの話、つまり学習本体となるCNNの話です。



それでは。