天体の軌道をTableauで可視化する方法など

# 概要

先日のJTUG総会、オープンデータ祭りのインフォグラフィックコースに投稿した以下のVizの作り方を簡単に紹介します。こちらのVizは、流星群の元となっている彗星や小惑星の軌道と地球の軌道の重なり具合を表現したものになります。

https://twitter.com/unbosoms/status/1576583519337615360?s=20&t=xSq-GnTNbXNqssF-TU2Hpg

# なぜこのVizを作ろうと思ったのか

ある日家族と行ったプラネタリウムで以下のコンテンツに出会いました。とても美しい映像とストーリーを通じて、流星群の仕組みを教えてくれました。とても感動したためなんらかVizとして作り上げたい!と思い作成しました。

https://www.goto.co.jp/planetarium/program/hoshinouruyoruni/

ちなみに流星群の仕組みについては国立天文台の以下のページが分かりやすいです。簡単にいうと、彗星の軌道上に彗星が噴出したチリが分布しており、地球がこの彗星の軌道を通るタイミングでチリが降り注いで流星群となっています。ちなみに流星群の元となっている彗星（や小惑星）のことを母天体と呼ぶそうです。

https://www.nao.ac.jp/astro/basic/meteor-shower.html

# 作り方

作成において苦労した以下の流れを順にご説明します。

- NASAから天体の軌道データをダウンロードしてくる
- 軌道データを３次元座標（x,y,z座標）に落とし込む
- ３次元データを２次元平面に落とし込む

## NASAから天体の軌道データをダウンロードしてくる

データは以下からダウンロードしました。探すのは一苦労でした。いろんなキー話お度でググって、NASAのサイトも検索して、Wikipediaの参照元もみたりしながらなんとかたどり着きました。

**彗星および小惑星の軌道データ**

https://data.nasa.gov/Space-Science/Near-Earth-Comets-Orbital-Elements/b67r-rgxc

**太陽系惑星の軌道データ**

https://ssd.jpl.nasa.gov/planets/approx_pos.html

ちなみに余談ですが、「太陽系惑星の軌道データ」については利用規定をみるとWebなどに公開する場合はNASAに確認する必要がある様です。そのため問い合わせフォームから、このデータを使いたい旨はお伝えしたのですが、特段返信はありませんでした。否定はされていないと判断して公開＆提出に踏み切りました。

## 軌道データを３次元座標（x,y,z座標）に落とし込む

軌道データは軌道要素と呼ばれる以下の要素で記述されており、３次元座標の点を得るにはいくつか計算が必要でした。

(参考)https://ja.wikipedia.org/wiki/%E8%BB%8C%E9%81%93%E8%A6%81%E7%B4%A0
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/3a0a15eb-34e2-96b2-4c1a-ce52994373f9.png)

ここが最高に難しかったのですが、以下のドキュメントを参考にPrepを使って３次元データを作成しました。
http://www.infra.kochi-tech.ac.jp/takagi/Geomatics/5Estimation2.pdf

詳しい説明は骨が折れそうなので、余力があればいつか追記したいと思います（ごめんなさい）。興味がある方は以下にPrepファイルを置いているので参考にしてみてください。
https://drive.google.com/file/d/1PEOKD50P9IlkaNY3AWVd30GcjeqOTMgs/view?usp=share_link

## ３次元データを２次元平面に落とし込む

３次元のデータの用意ができましたが、Tableauは２次元の平面でしか描画できませんので、　２次元に投影してあげないといけません。ここもかなりの難所だったのですが、色々ググりながら以下のドキュメントにたどり着き実装しました。

http://www.ed.u-tokai.ac.jp/takakura/jp/lecture/lecture_NOKO/cp2/LL10print.pdf

計算式は以下の通り一見難しそうですが、行列計算のやり方を思い出しながら、数式の通りに変換１→変換２→変換３と順に計算を展開していけば実装できました。こちらもよければワークブックをダウンロードしてご確認ください。[ワークブックへのリンク](https://public.tableau.com/app/profile/yuta1985/viz/MeteoShower/MeteoShower)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/a8ff022b-e637-076c-e80f-a2d461431686.png)

イメージとしては以下の様に　「視点」を決めて２次元のスクリーンに座標を変換します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/a5e82cfa-6d62-96f2-3121-ad71441cac64.png)

ドキュメントでは並行投影と中心投影(奥にあるものほど小さくなる)の２種類が紹介されていますが、今回は平行投影で投影しました。ただし線の太さを視点に近いほど太くするようにして立体感を出しました。太さのコントロールには先ほどの計算で得られたd(奥行き)を使っています。

「視点」を決めるためにパラメータとして以下の３つをセットしています。
- 原点からの距離（R)
- Z軸周りの回転角度（Theta）
- Y軸周りの回転角度（Phi)

実際にTableauPublicからワークブックを開いていただくと以下の様にそれぞれのパラメータをいじることも可能です。ぜひ触ってみてください。[TableauPublicへのリンク](https://public.tableau.com/app/profile/yuta1985/viz/MeteoShower/MeteoShower)
![スクリーンショット 2022-10-29 22.42.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/905dab64-05bb-8434-c813-c2ad1857efd0.png)


# デザイン面のこだわりについて

一番苦労したのは上記の部分なのですが、デザイン面のこだわりも少しお話ししたいと思います。

- １枚絵として印刷されることが前提なので、掲載する情報量の取捨選択はかなり気を使いました。
    - 全ての流星群の母天体の軌道を示すとゴチャゴチャしてしますので、三大流星群とよばれている３つに絞りました。([参考](https://www.nao.ac.jp/astro/basic/major-meteor-shower.html]))
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/fab62ea7-9b4a-1976-2748-fcb9547c59ec.png)

    - とはいえ他の流星群も載せたかったので地球軌道上に灰色の丸として表示し日付のみラベルで出すことにしました。
    - Tableau Publicで見ていただければカーソルをのせることで具体的な情報を見ることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/fb80d607-47ca-7f69-8d6b-ade726c9e2d6.png)


- 各流星群の母天体の名前がわからないと、青で示している母天体の軌道との関係が読み解けないため注釈として流星群の説明を入れました。加えて母天体の名前の表記と、流星群の注釈の場所はなるべく近くなる様に調整しました。
![スクリーンショット 2022-10-29 22.52.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/cd6e0447-fcdf-592a-0080-e55ea60dab40.png)


- 色味は宇宙らしく暗い背景とし、重要な地球の軌道と母天体の軌道はそれぞれ緑と青で表現しました。ちなみに背景色は真っ黒(#000000)ではなく少し青みがかった色（#02001B）にしているのはこだわりポイントです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/fa76588e-4e61-c507-5b20-bd31e9a42b96.png)


- 太陽と太陽系惑星の軌道をいれたのは立体感を理解しやすくするためです。この惑星の軌道はガイドラインとしてよく機能したと思っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/e2a81b7e-5220-d89a-4906-768f31351ae1.png)

- このVizの意図を伝えるには、流星群の仕組みから説明する必要があるので左上に説明文をいれまいた。 ここの文章は必要最小限の文章量で、過不足なく情報を伝えることを意識して何度も推敲して作成しました。文章力をもっと鍛えないといけないなと痛感しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/fc3c3a06-ade8-5691-e08d-776cabc1921f.png)

- 最後にタイトルについてですが、かっこいい名前にしたいけど、かっこつけてる感がでると恥ずかしい。。。という悩みと闘いながら付けました。ちなみに恥を忍んで没案をご紹介すると「星降る夜を探して」、「流星の生まれる場所」、「流れ星の見つけ方」などなど。。。ワーディングセンスはもっと鍛えたいものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200471/80b87723-b3f8-0fa6-d500-c08186d8e743.png)

# 最後に：作ってみての感想

とにかく[作り方](#作り方)に記載した３つのポイントに相当骨が折れました。ですが調べながら数式を理解して計算フィールドに落とし込んでいく作用はとても楽しかったです。図書館で宇宙の図鑑を借りてきて読んだりして、宇宙についても興味が湧いてきたので、また宇宙に関するVizを作れればなと思っています。データ可視化を通じて興味の幅が広げることができるので、Tableauは良い趣味だなぁと改めて思いました。