Excelでハリケーンの進路を可視化

この前、はてなの人気記事に[Excelで路線図を描く](http://nenjin.hatenablog.com/entry/2019/06/12/134717)が出て、Excelがこんな用途に使われるかに驚いた方は多いのではないでしょうか。実際、Excelは想像以上に豊富な機能を持っています。
 
今回はアメリカ2017年の超大型ハリケーン「イルマ」の進路を、Excelで描いて可視化します。
![2019061901.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/fd41f1ef-f126-b96f-e11d-9d657c5b437d.gif)


以下は具体的な手順を説明します。

##1.データや背景画像の準備

①アメリカ-大西洋の地図

アメリカの国立ハリケーンセンターからNHC Blank Tracking Chartsをダウンロード。経度と緯度付きの地図を使わなければいけません。ハリケーンの移動は緯度と経度の列を地理上の点に変換して表すものだから。

https://www.nhc.noaa.gov/tracking_charts.shtml
![2019061902.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/8c09d987-9021-33a3-3ac7-7e6ee1aa13ff.png)


②Hurricane and Tropical Cyclones からハリケーン「アイマ」の経路データをダウンロード。
その中、日時、経度、緯度、風速、気圧などを含めます。

![2019061903.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/70ff0d73-0b66-f175-2558-dbad0439ff2d.png)

##2.データの前処理

①経度、緯度、風速、気圧の単位を削除し、そして日時をExcelで処理しやすいフォーマットに変換します。
 
②「アイマ」の経路データでは、最初は6時間ごとにデータを記録し、それから3時間になります。ここは6時間ごとのデータを利用します。
![2019061904.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/97d6dc40-0cb5-d21a-1d45-9ac193fded97.png)

##3.バブルチャートを描く
①アメリカ-大西洋の地図をExcelで挿入し、それを背景にバブルチャートを描きます。経度、緯度をX軸、Y軸とし、バブルの大きさを風速で表示します。
 
②実際のデータにより、X軸、Y軸の最大値を設定します。地図の経度と緯度の単位は5度なので、バブルチャートのX軸、Y軸の単位を5度にします。
 
③アメリカ-大西洋の地図の座標軸と重ねるように、バブルチャートの位置と大きさを調整します。それから、バブルチャートの座標軸を隠します。

##4.視覚効果
 
ハリケーンの進路を動的に表現するために、コントロール【スライドバー】を用いて、経過時間を制御できます。スライドするたびに6時間が増えていきます。スライドバーとリンクするセルがグラフの左側の表にデータを渡し、対応する緯度、経度と風速、気圧のデータを、時刻のクエリによって取得します。
 
時刻を基づき、グラフの2つのデータソースを生成し、スライドバーによるグラフの制御を実現します。
 
さらに、スライドバーの自動制御、つまりグラフを自動再生させるために、VBAを書きます。
![2019061905.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/2bde07bc-4aed-b8ff-f210-3da7aff0da02.png)

__具体的な手順は以下の通り：__
 
①VBAで開始と停止を制御する二つのマクロを書きます。
 
②開始、停止、繰り返す、スライドバーを指すコントロールを配置し、以上のマクロを指定します。
 
③スライドバーのコントロールの書式設定で、リンクするセルを左側のセルを指定します。左側のセルは時間の経過に伴いデータを表示します。
 
④データソースを生成する
 
動的な視覚効果を得るには、バブルチャートで2つのデータソースを準備する必要があります。1 つは、現在の時刻の前にハリケーンが移動してきたパスを示し、もう1つは、現在の時刻のハリケーンの位置をマークします。
 
LOOKUP関数を使います。
 
現在の時刻の前に、ハリケーンが移動してきたパスのデータ：
>=IF($A9<=LOOKUP(map!$C$3,$A$2:$A$55),data!D9,NA())

![2019061906.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/05dc78f6-7259-ff7e-6550-ffb4a8facf73.png)
現在の時刻のハリケーンの位置のデータ：
>=IF(A9=LOOKUP(map!$C$3,$A$2:$A$55),data!D9,NA())

![2019061907.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/35fd1b38-9068-4a48-257c-4d6fd808dfa6.png)

⑤バブルチャートのデータを選択する
![2019061908.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/54b17fdb-3d17-5d24-c0c8-afe3696188e2.png)
![2019061909.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/83f2b8a2-837d-daa8-2625-a15dc1e265c7.png)

チャート内のテキストボックスは、セルとリンクすることでポイントのデータを取得します。
 
そのほか、ここで風速を表示する縦棒グラフを挿入しました。データの紐づけはバブルチャートと同じです。

 

これで終わりです。一回Excelで[データの可視化](http://www.finereport.com/jp/products/?utm_source=Qiita&utm_medium=media&utm_campaign=excel&utm_term=davi_pro1)をやってみませんか？

![2019061911.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/3a9fdaf4-2811-3ff3-4bfa-c6c0266ff4d5.gif)

以上ははてねブログ__[id:KeisukeYoshino](https://keisuuuuke.hatenablog.com/)__に発表したものです。これからも更新していくので、よかったら、フォローお願いします。
![图片.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322606/745c54b6-9b18-83fd-835d-496c4168fdf9.png)