カスタムジオコーディングや自作地図でTableauの沖縄の位置を工夫したい
はじめに
こんにちは。日本の国土って細長いですよね。(急
これを長方形の画面に移そうとすると,画面の多くが余白になってしまうので,ビジュアライズの観点でたまに気になります。
そこで,いいなと思ったのが,天気予報とかの工夫です。沖縄を本州の左上に配置したり,地図をデフォルメ化してスペースを有効活用しているものです。
これをTableauでやろうと思いました。この記事はそれの記録です。つまりカスタムコーディングやその他の方法について書きます。
やり方概要
結局沖縄の緯度経度を変えるだけっちゃだけなんですが,実現方法には以下があると思っています。
- 方法A:緯度経度の値をCSVなどにして外部データソースとし,リレーションシップやジョインを使ってグラフに使用する
- 方法B:カスタムジオコーディングを使う
- 方法C:もう自分で地図を書いちゃう
難易度は方法Aが簡単で,方法Cがもっとも面倒です。方法Aは普段のTableauの操作の延長線上にあるので。
ただし方法Aはリレーションシップやクロスデータベース結合を利用するので,その制約下でデータをもっておかないといけないということがネックになりえます。
その点,方法Bはデータピルに対して地理的役割としてその緯度経度情報を与えてしまうので,そういった制約はありません。
方法Cは,実際の緯度経度に頼らず,自分で面データとしてポリゴンを用意する方法です。カスタムポリゴンマップなどと呼ばれているようです。模式的に日本地図を表すことができるので,スペースを有効活用できます。難点としてはその面データの準備に時間がかかる点です。今回作ったデータは別記事に置いておくので,良いように使ってください。
なお,方法A, Bに関する公式ドキュメントはこちらです。
事前準備(方法Aと方法Bのみ)
白紙から作り上げるのは面倒なので,Tableauではどういった緯度経度情報を使っているか,というのを出力します。
やり方は簡単で,
- 47都道府県の一覧をもつデータをTableauに読み込ませて,
- 緯度経度を自動生成させて,
- エクスポートします。
まずTableauのデフォルトの緯度経度情報を取得します。このとき使うデータはExcelファイルでもテキストでもよく,ただ都道府県名を羅列するだけです。
文字列データとして読み込まれるので,地理的役割として「都道府県/州(State/Province)」を与えます。
なお,右下に表示されているように,これだけでは日本の地理情報に紐づかずにNULL値になるので,アイコンをクリックして「場所の編集」をする必要があります。
デフォルトでは「国/地域」が「米国」になっているので,これを「日本」に変換すると,認識してくれるようになります。(これ勝手に日本のものだと判定してくれればいいのになと毎回思います。Tableauさんお願いします)
無事日本の都道府県を表示できたら,データをエクスポートしましょう。
すると,各都道府県の緯度(Latitude)と経度(Longitude)が取得できます。これを元にいろいろ加工していきましょう。
今回は日本海あたりに沖縄をプロットしたいので,緯度を39.2031, 経度を135.0017にしました。また,これを書き換えると同時に,列名も変えておきました。一列目は国名,二列目は都道府県,三列目は緯度,四列目は経度です。
方法A:外部データソースを使う
こちらはそこまで複雑ではないのでさくっと書きますが,先ほど準備したCSVファイルを結合もしくはブレンディングでグラフに使用します。
今回元データをCSVで準備しているので,利用するデータによってはクロスデータベース結合になる可能性があります。結合できるかどうかはこちらの公式ドキュメントで確認してください。
結合を使えるのであれば都道府県をキーにこのように。
ブレンディングを使うのであればこんなふうに設定しましょう。
すると,沖縄のプロットが日本海に浮かぶようになります。
方法B:カスタムジオコーディングを使う
カスタムジオコーディングとは,上記の緯度経度情報を自分なりにカスタマイズして,それをTableau上で活用しよう,というものです。つまり,地理的役割にある「空港」や「市町区村」に,オリジナルのものを加えてしまいます。
公式ドキュメントはこちらです。
必要なものは以下の2つです。これらを,任意のフォルダにまとめて保管し,インポートします。まずはこれらの編集から進めます。
- CSVファイル; 文字情報と緯度経度情報の紐づけを担当します
- schema.ini; CSVファイルがどういう構造のファイルなのかということを定めます。
CSVファイルはまっさらな状態から作成してもよいですし,事前準備の章で書いたものを使用してもいいです。ここでは事前に準備したものを使います。
次にschema.iniですが,テキストエディタでこのように作成しました。内容はカスタムジオコーディングで読み込ませるCSVファイルの列構成の読み取り方を指定するものです。フォーマッティングは下記公式ドキュメントを参照してください。
これらをひとつのフォルダに格納し,以下の手順でインポートします。
これにより,データピルに対する地理的役割として,インポートしたカスタムジオコーディングデータが選択できるようになります。
これを適用すると,アイコンも地球儀マークにドキュメントのような四角がつき,グラフ上でも使えるようになります。
方法C:もう自分で地図を書いちゃう
そんなことできるんだ。。。ということを執筆中に知ったのでプラスして書いておきます。下記ブログを参考にさせていただきました。
そして,今回作成したポリゴンデータは別記事としてこちらに書いておきました。
デフォルメの地図を書くにしても,どうやら複数の表示方法があるようで,今回は2種類のデータをまとめてひとつのCSV形式のデータとして作成します。ひとつは,複数の座標を一筆書きの要領で順番を指定しながら複数レコードを使って書いてあげる「線データ」のやり方,もうひとつは,その複数の座標をひとまとまりのポリゴンデータとして指定してあげる「面データ」のやり方です。ともにほぼ同じ手順をたどることになるので,まとめて紹介します。
全体の流れとしては以下のとおりです。
- お絵かきして日本地図のデフォルメを書く。これにより都道府県がすべて多角形で表せるはず。
- 各都道府県を表す多角形の頂点のX,Y座標を書き起こし,番号をつけてリストアップする。これが線データとなる。
- 多角形各頂点のX,Y座標を面データ(ポリゴンデータ)として一都道府県に対してひとつずつ作成する
- Tableauにて,線データなら多角形グラフ,面データならマップグラフにて描画する
やっていきましょう。
手順C-1:お絵かきして日本地図のデフォルメを書く
地道に書きます。自分はExcelを使ってこんな感じになりました。図に1とか2とか書いてあるのは,prefecture id
です。47個なので1番からal(エーエル)番までつけています。つけた文字自体に意味はありません。
手順C-2:各都道府県を表す多角形の頂点のX,Y座標を書き起こし,番号をつける
ここでは線データを作成するために,その都道府県の多角形を一筆書きするときにたどる頂点の座標と,たどる順番(ここではsequential number
と列名をつけました)をいちレコードずつ書き起こします。
画像で説明すると次のような感じになります。(ここでは左上の頂点から時計回りに順番をつけていますが,Open Geospatial Consortium (OGC)標準定義によると外側の頂点は反時計回りにつけるものとされているようです。)
どこか基準点を決めて,そこからX方向・Y方向それぞれいくつ離れた場所にその頂点があるか,という情報を数値化していきます。仮に横に並んでいるなら,その複数点のY座標は同じですし,縦に並んでいるならX座標が同じです。今回作成したデフォルメ地図における,青森はこれら4点で表せる,ということが分かります。そして,それらを一筆書きする容量で,順番もつけていきましょう。
手順C-3:多角形各頂点のX,Y座標を面データ(ポリゴンデータ)として一都道府県に対してひとつずつ作成する
手順C-2で作成した各頂点のX,Y座標を,WKT形式で読み取れる文字列データにします。多角形をひとつの面データとして認識してもらうので,WKT形式でもポリゴンタイプのデータになるわけですが,書き方は次のとおりです。また,WKT形式に関する詳細は上述のWikipediaのリンクを参照ください。
POLYGON((x_1 y_1, x_2 y_2, x_3 y_3, …, x_k y_k))
地道に作成したポリゴンデータは次の画像のようになります。今回は手順C-2で作成した線データと同じファイルにまとめていますので,都道府県の行すべてに「polygon wkt」列が重複していますが,面データだけならこのように重複させる必要はありません。
手順C-4:Tableauにて線データなら多角形グラフ,面データならマップグラフにて描画する
さて,描画してみましょう。
まず線データですが,これを描画する際はマークタイプを「多角形」にします。そして,パスとしてsequential number,列シェルフにx,行シェルフにyを配置します。多角形同士の境界が見えるように枠線の色を変えると,日本地図が見えてきました。こちらの難点としては,ラベルカードが使えないことです。たとえば多角形上に都道府県名などを表示したい場合は,面データを使う必要があります。
その面データは,手順C-3で紹介したWKT形式の文字列データを,Tableauでは「空間(Spatial)」データとして認識させる必要があります。
これをワークシートの詳細カードに持ってくると,ポリゴンデータが地図上にプロットされます。こちらだと,都道府県名やメジャーの値を表示することができます。
このとき,X,Yの座標は緯度経度としてプロットされるので,座標の絶対値が大きすぎると,メルカトル図法の影響を受けて,お絵かき通りの表示にならないことに注意が必要です。上の図は座標を0〜0.1あたりの数値を使っていますが,下の図は,座標を0〜100あたりの数値を使って描画したときの様子です。表示ラベルの位置も各都道府県の形も,少し歪なことが分かります。
サンプルダッシュボード
試しにサンプルダッシュボードを作ってみました。単純に,面データと線データとで,どういう座標プロットデータを準備したか,というのを可視化したものになります。
おわりに
思ったより長文になって反省しています。小分けにすればよかったですね。ただこのデフォルメ地図はいろいろ使い道がありそうで,インポートさせるフロアマップと組み合わせれば混雑状況や稼働状況をダッシュボード化できそうですし,厳密さはときにデータの見にくさにつながるので,デフォルメもTableauで可視化できるということは覚えておきたいです。
余談
現在,弊社Rakutenではモバイルの社員紹介キャンペーンを実施しております。
下記リンクから,Rakuten会員でログインいただくと,回線変更で最大14,000ポイントがもらえるので,ご興味ある方はぜひアクセスしてみてください!
Discussion