🍊
DATA Saber挑戦中にハマった技術的な話を紹介する
はじめに
- 2023年2月末からDATA Saber認定制度というものに挑戦しています。Tableauを使っている人は耳にしたことがあるかもしれませんが,Tableau操作テクはもちろん,組織内・ひいては世界にデータ利活用の文化を広めるために何ができるか,ということを学び実践し伝えることをミッションとしています。
- そしてDATA Saberになるためには2種類の課題をクリアする必要があります。
- ひとつが10個の技術試験。
- もうひとつがコミュニティポイント50ptというもので,イメージだと伝承試験。身の回りのコミュニティを成長させる活動が求められます。
- この後者のコミュニティ活動にブログ執筆が含まれていまして,ここでは備忘録兼道標として,DATA Saber認定制度挑戦中に自分が沼にハマった技術的な話を書き残したいと思います。
- DATA Saber認定制度に挑戦する方々に少しでも参考になれば幸いです。
Tableau Desktopの操作についての話
- 各問題に関わるテクニックについてはDATA Saber制度創始者のKTさんのチャンネルを見ていただいたほうが丁寧に知識を得られるのでおすすめです。
- 以下ではその前段階のようなところで自分がつまずいたことを3点書こうと思います。
地理的役割を階層的に与える方法
- Tableauは地理の区域ごとに色分けができます。これぞVisualizeって感じですね。サンプル - スーパーストアでいう都道府県ピルに地理的役割(Geographic Role)を与えて,緯度経度を自動生成して地図を背景にしてプロットする,というイメージです。
- で,ここから都道府県別でなく"地域"別に色分けしたい,とします。
- そのとき,"都道府県"と同様,"地域"(近畿地方とか)にも地理的役割を与えたいのですが,Tableauにデフォルトで入っているものの中に"地域"に当てはまるものがありません。
- デフォルトで選択できる「地理的役割(Geographic Role)」
- 「国/地域」を選択しても認識不可となってしまいます。
-
公式ドキュメント: Tableau マップについてでも,都道府県と市区町村はあれど,地域は対応していない,とあります。(2023/04/17時点)
- デフォルトで選択できる「地理的役割(Geographic Role)」
- ではどうやって"地域"にも地理的役割をもたせるか,ですが,まず"都道府県"に地理的役割を与えて,それを引用する形で,各"地域"に地理的役割をもたせます。
- この順序の通り,先に"都道府県"に地理的役割を与えていると,"地域"に地理的役割を与える際,デフォルトにはない項目が追加されています。
- これを選択して地理的役割を与えると,自動的に階層が作成され,地域ごとに区切った地図上の表示ができるようになります。
- ここで"地域"と"都道府県"の関係を表で見てみると,各"地域"に"都道府県"が内含されている状態です。
- つまり,各"都道府県"を各"地域"に振り分けてまとめて,地図上に表示できる形(上の写真)にしている,ということになります。
- これを活用すれば,自分の好きな振り分け方でまとめることができます。例では,グループ機能を使って海に面している/いない都道府県をまとめています。
- かつ,"地域"と"都道府県"が階層関係になるため,Date型のピルを年->四半期->月->日と深堀りしていくように,最初は地域でみていて,そこから都道府県へと深堀りすることができるようになります。
上で書いた公式ドキュメントがこの記事の執筆中に見つかったので,遠回りにはなりましたがこの記事書いてよかったなと思います。
テーブルの結合とリレーションをどう構築するか
- 複数のテーブル同士をつなげるときに特に使用頻度が高い(と思う)のが,結合とリレーションです。違いを理解するのも難しいしどう操作してそれを実現するのかもつまずきました。
- これらは正直(公式ドキュメント: 関係と結合の違い - Tableau)をじっくり読んだほうが為になります(というか解決します)。
- で,ここでは結合とリレーションをどうTableau上で実現させるかを書きます。
- まずリレーションですが,
- ExcelやCSVのようなファイルであればファイル内のシートが併記されるので,1つ目のシートをドラッグアンドドロップ,2つ目のシートをその横にドラッグしてきます。
- ちなみにすぐ下に置くとユニオンといってまさしく縦方向にならべるつなげ方になります
- ちなみにすぐ下に置くとユニオンといってまさしく縦方向にならべるつなげ方になります
- すると橙色の線が出てくるのでそこでドロップして,そのあと下側でどうリレーションさせるかを定義します。
- つまり,1つ目のテーブルと2つ目のテーブルが何をもって関係しているかを指定します。例えば違う列名をもったものだと自動でくっつかないので,ここで指定できます。
- ExcelやCSVのようなファイルであればファイル内のシートが併記されるので,1つ目のシートをドラッグアンドドロップ,2つ目のシートをその横にドラッグしてきます。
- では結合はどうするのか,ですが,
- 1つ目のシートをドロップしたあと,「開く(Open)」を選択します。
- そのあとテーブルをリレーション同様もってこようとすると,橙色の線ではなく枠が登場するので,ここにドロップします。
- そのあと,結合を考える際にはお馴染みのベン図が登場し,リレーションのときと同様に,どうテーブル同士をつなげるか,を定義します。
- 1つ目のシートをドロップしたあと,「開く(Open)」を選択します。
- 自分の勘違いは,2つ目のシートをドロップしたあとの操作でこの結合画面が出てくるものだと思いこんでいたことで,かなり時間を費やしました。
- 個人的には「開く(Open)」っていう書き方が結合の画面にいくものだと認識しにくいので別のものにしてほしいです。すみません次からちゃんと説明書読みます
Date型ピルと裏で動いている関数について
- 結論から述べると単に
DATEPART()
とDATETRUNC()
の話なのですが,まずは次の画像を御覧ください。同じピルで同じ折れ線グラフなのに,異なるグラフになっています。- Aのパターン
- Bのパターン
- Aのパターン
- ここに
DATEPART()
とDATETRUNC()
の違いが効いてきます。- 公式ドキュメントは日付関数 - Tableauです。
- まず
DATEPART()
ですが,- こちらは不連続(Dimension)タイプのDate型ピルをシンプルに列もしくは行シェルフにもってきて,プラスボタンで深堀りしたあと,ピルをダブルクリックしてみます。
- すると,内部では
DATEPART()
関数が使われているようです。 - 「PART」というとおり,日付の一部分を切り出してくるもので,たとえば"2020年10月10日"も"2021年10月10日"も,「月」部分は「10月」です。ピルもデフォルトが青色で不連続型(Discrete)です。
- ではこの
DATEPART()
の代わりにDATETRUNC()
を使うとどうなるのでしょうか。-
DATEPART()
のときの最初の手順でもってきたピルをダブルクリックして関数を入力してみます。 - するとピルが緑色,つまり連続型(Continuous)に変わり,シェルフの末尾に移動しました。
- ただしTableauのにくいところは,連続型のデータであっても不連続に変更できる(できてしまう)ことです。
- すると見た目が
DATEPART()
と同じ名前のついた青色のピルになりました。 - ただこれらを比べると,情報量が違います。
DATETRUNC()
に書き換えたピルは月の情報だけでなく年の情報も持っています。 -
DATETRUNC()
の"TRUNC"はプログラミングする人や英語圏の方は馴染みが深いのだと思うのですが,"truncate"の略で,「切り捨てる」という意味だそうです。 - 例えば,"2020年10月10日"を月で切り捨てると"2020年10月(の初日)"になり,"2021年10月10日"を月で切り捨てると"2021年10月(の初日)"になり,異なるデータになります。
- (データソースによっては一番最初のピルの時点で連続(Continuous)タイプの日付データですが,この場合,シェルフにもっていった時点で
DATETRUNC()
関数が使われます。)
-
- この話は関数に触れなくても実現できます。その話をするべく,冒頭の話に戻りましょう。
- まず売上を分析するとして,売上ピルをシェルフにもっていき,そのあとDimension型の日付ピルをシェルフにもっていき,日付ピルのほうはドリルダウンして月ピルだけにします(ここでは
DATEPART()
が使われている)。すると横軸は月のみになり,年の情報がなくなります。 - ここで月(オーダー日)ピルを右クリックして,2種類あるうちの後半のほうの「月」を左クリックします。(「5月」と「2015年5月」と注釈が書かれているうちの後者です。年の情報が維持されているので
DATETRUNC()
が使われそうなのが伺い知れます)。 - すると月(オーダー日)ピルが緑色になり,グラフも元の12点から48点に増えます。これは年の情報が加わったためです。
- さらにこのピルを不連続型(Discrete)にしてみましょう。すると横軸が再び変化しました。これが一番最初に示したもう一つのグラフです。
- ちなみに,
DATEPART()
によって抜き出してきた年と月をそれぞれ文字列にしてつなげることで,DATETRUNC()
を使ったときのような出力はできますが,できるならDATETRUNC()
を使ってスマートにVizを作りたいですね。 - というわけで,
DATEPART()
とDATETRUNC()
の違いをお話ししました。デフォルトの操作ではどうにもならない部分は,やはり知識を身に着けていく必要がありますね。
おわりに
- Tableau,上のことでつまずかずにいろんな機能使えるようになれればもっと使い道も広がると思うのでもっと触っていければと思います。
Discussion