ねこ吸いたい

勉強と読書記録など

カジュアルVizつくりまShow!に参加してきたよ

日々黙々とVizを作っていてそういえばViz早づくりって苦手だな…と思い立ち、気軽に腕試しのできるイベントがあると聞いて参戦してきました。楽しいと同時に学びもある、ちょうどいい難易度のイベントでしたので、ぜひおすすめしたいです。

techplay.jp

なお本家はJapan Tableau User Group (JTUG)の本格的な高難度Viz早づくり大会(予選もある!)なのですが、今回のイベントは初心者でも自分のペースで挑戦できて解説付きという敷居の低さ。自分で解いて、できあがったらハッシュタグつけてツイートなので、人前に出る必要もなく気軽に参加できました。

当日の録画もYouTubeに上がっているので、見返しながらチャレンジもできます。更に5月に第2回もあるそうです!やったね!

 

www.youtube.com

 

今回の戦績

1時間で解説含め全4問構成でした。半分はサクサクいけましたが、残り半分はあと少しがうまくいかず、発想力を試されると同時に実務でもすぐ使える良問でした。

1問目

二重軸なら任せろ!これはさっくりクリア。

 

2問目

セットと表示順の合わせ技ですね。セットのIn/Outを非表示にするのを知っていれば解けますね。

 

3問目

時間内に解けなくなってきたものの、解説を聞きながら同時に手を動かせました。解説のわかりやすさも素敵です。

 

4問目

初見は厳しいけどKnowledge Baseにドンピシャな記事があり、知っていればすぐ作れそうです。検索すればテクニックが出てくるのもTableauのいいところですね。

 

反省&感想

10分あれば作れるけど5分だと間に合わないのが正直なところです。ぱっと見て工程を想像できるか勝負ですが、やはり日頃使い込んでいない機能は本番でも思いつきませんね。最近はPrep芸人と化しつつあるので、Tab筋つけなければ~

  • セットの使いこなしが甘かった
  • 背景色の存在をすっかり忘れていた
  • 運営のみなさまからいいねが飛んでくることを覚悟する
  • ツイート履歴から名前を読み上げられてもびっくりしない

ChatGPTでダミーデータを作る

TableauでHexbinマップを見せたくて、地道に座標データを集めていました。件数が多いとなかなか終わらないなあ…と思ったそのとき!素敵なツイートに出会いました。

 

 

とりあえずChatGPTにお願いする

よーしじゃあほしいカラムを指定して、100件くらい作ってもらおう!

Pythonのコードをおすすめされました。これはこれですごいのですが、違うんだよなあ…

 

コードはいらない

コードは要りませんって言ったらその通りにしてくれるのでしょうか。

…思ったより頑固らしいです。後ろにくっつけてきました。

しつこくお願いしていきましょう。

やっとデータだけになりました。もっと件数ほしいなあ…

 

行列を増やしてみる

一度アウトプットができれば件数は素直に増やしてくれるようです。

ではもっとダミーデータっぽく、売上を追加してもらいましょう。

いい感じに売上っぽい数値が出てきました。ランダムで数字入れる必要もなくて地味に嬉しい!

 

呪文の完成形

そんなわけで、出来上がった呪文がこちらです。扱いやすいようにカンマ区切りにしてみました。メールアドレスや電話番号もダミー用に条件指定すると便利かもしれません。

 

コードを使わずにダミーデータを5件作ってください。カラムは「市区町村」「会社名」「緯度」「経度」「売上」「営業担当者」です。「市区町村」は日本国内の市区町村名です。「会社名」は架空の会社の名称です。「会社名」「営業担当者」は重複して問題ありません。項目名を含め、カンマ区切りにしてください。

 

 

まとめ

詠唱方法や挙動のクセを覚えれば、ちょっとしたデータは簡単に作れそうです。ダメ出しも気兼ねなくできちゃうので、試行錯誤もしやすくデータの持ち方を検討できます。

【Tableau Tips】フィルターなしで別時期の数値を比較する

Tableauは最新の年月や相対日付によるフィルターができ、非常に便利です。

徐々にデータが更新される場合でも、常に最新月の数値を表示し続けるシートが簡単に作れます。

最新の単一日付にフィルタリングする | Tableau Software

 

フィルターなしで最新月の値を出したい

しかし一方で、フィルターをかけずに最新月のデータを表示したい!という時もあります。例えば、異なる時期の合計値の比較をしたい以下の場合などが該当します。

  • 新月の合計 / 今年度の合計
  • 今年の合計 / 前年の合計

どちらの数値も単体ならフィルターで簡単に出せますが、2つを比較しようとするとフィルターが邪魔になってきます。

 

フィルターの代わりにIF文を使う

というわけで、フィルターなしで数値を出すにはIF文による条件分岐を使います。今回は、もし所定の条件に合致したら数値、合致しなかったら0を返す、というシンプルな式を作ります。

まずは年月の項目を作っておきます。日付項目を右クリック > 作成 > カスタムの日付 を選びます。

 

これで年月を作っておきます。後から使い回せて楽です。

あとは最新年月なら数値を返す式を書きます。FIXEDはシート内の項目に関係なく、指定した項目を使って計算する関数です。ここでは、データ全体を通して最新の年月を計算させています。

FIXED 詳細レベルの式 - Tableau

 

//年月が最新(MAX)の年月と一致したら売上を表示

IF [オーダー日 (年/月)]= {FIXED : MAX([オーダー日 (年/月)])}
THEN [売上]
ELSE 0
END

 

これと同じ要領で[オーダー日 (年/月)]の部分を変えれば最新年、年度の値を求めることもできますし、IF以降の条件を変更して、指定カテゴリや地域の値だけ表示など様々な応用が可能です。

計算だけで簡単に年度を出す方法は以下記事をどうぞ。

neko-suitai.hateblo.jp

まとめ

フィルターなしで数値を出すときにはIF文が非常に便利です。ただし、裏では条件式に該当したかどうかの計算が走っていますので、件数やパフォーマンスは気にする必要があります。

今回はDesktopでの計算方法にしましたが、日付計算・FIXEDはもちろんPrep Builderでもできますので、あらかじめそちらで下処理してしまうのもありですね。

 

今さらAWSクラウドプラクティショナーを取った

今更ながらAWS Certified Cloud Practitionerを取りました。合格点が700なので、当社比余裕のある点数でゴールです。

f:id:neko-suitai:20230213071950j:image

きっかけ

日々AWS上にホストされたサービスを利用し、検証環境もEC2で建て、AWSありきの生活をしています。しかしAWS上のシステム構成図を見たときにさっぱりわからない、ということで基礎からやり直すことにしました。

何より他社クラウドを利用する会社も多い中、AWSのサービスがわかると共通言語的に使えて話が進みやすくなるはず、というのがねらいです。

 

かけた日数

大体10日ぐらいですが、応用情報の対策にウェイトを置いていたのと、大半は就業後だったため寝落ちしてあまり勉強できませんでした。どちらかというと記憶の定着のため、毎日やる、よく寝ることを優先しました。1週間前に試験予約をし、最後の2日は後述の問題集を通しで解きました。

 

使った教材

定番ですが、以下の問題集の基本・本番レベルを通しで95%取れるところまでやりました。応用レベルはやらなくてもOK、という合格体験記が多かったため手を付けませんでした。そのかわり本番試験で消去法ができるよう、マイナーなサービスや不正解の理由もざっと覚えておくと安心できます。

なお、Udemyの問題集は1問1答ではなく、全問完了してから答え合わせになるのが使いにくいので、テスト画面と見直し画面を並べて表示すると楽になります。更にこの方法は両窓を交互にスクロールしていくため、カーソルを動かす必要のあるPCよりタブレットが使いやすいです。

 

www.udemy.com

 

参考書はKindle版が無料の以下を問題集の補助として、辞書的に使いました。問題集を解きながら1回、試験当日にもう1回流し読みしました。

 

本番で気をつけること

ピアソンのテストセンターまたは自宅で受験できますが、今回はテストセンターを選びました。自宅は部屋の片付けや試験監督とのやり取りが面倒なので、人によっては余計緊張してしまうリスクがあります。

一方で、オンサイトは流れが分かればどこのテストセンターでも手続きはほぼ同じです。強いていうと予約の取りづらさがネックですが、粘って1週間後の土日の日程を確保できました。

今回は引っ越したのもあり初見のテストセンターを選びましたが、ちょっと待合がギチギチなのと、電車の音が聞こえました。何より静音デバイスに慣れた耳には有線マウスのクリック音が大変気になりました。

 

まとめ

IT系の職種やクラウドに馴染みのある方なら、1週間で取れそうな感触です。次のSAAは難化したとも聞いているので、むしろそちらが本番ですね…

【Tableau Tips】日付レベルを動的に変更する

グラフ上で見せる日付単位の細かさを年・月・日と変えたい、ということはありませんか?長期のトレンドが見たい場合もあれば、短期間での変化を見たいときもあります。そんなときに、日付レベルを動的に変えるテクニックが便利です。

 

基本:ドリルダウン/アップを利用する

Tableauの基本機能として、グラフの+−ボタンを押すと、見せる日付を細かくしたり粗くしたりすることができます。

この機能自体はシートを編集することなく使えるため、作成者側では非常に便利です。ただ、閲覧者がTableauに慣れておらずこの機能を知らない、使い方を伝える機会がない場合があります。その場合に、以下の応用編が役立ちます。

 

応用:パラメータで日付単位を切り替える

最初にイメージをお伝えすると、表示する日付単位をパラメータで選択し、選択した値に応じてグラフの粒度が変わるような計算フィールドを作ります。基本的には以下のKnowledge Baseの流れで作成します。

参照:日付レベルの動的な変更

 

パラメータを作成する

まずは閲覧者が見たい日付単位を選ぶためのパラメータを作成します。作成は計算フィールドと同じ以下の▼からできます。

作成画面から、ユーザが選択するためのリストを作ります。今回はわかりやすいように文字列のリストで年・月・日が選べるようにしておきます。

作成完了すると、パラメータは画面左下に表示されます。右クリック > パラメータの表示 でシート上に表示してみましょう。フィルタなどと同じく、画面右上に出てきます。この時点では、パラメータの値を動かしても特にグラフに変化はありません。

 

年月日の項目を作る

実際に表示する年月日の値を作成します。一番簡単な方法は、左の画像の通り元になる日付項目から「カスタムの日付」を生成することです。年、月、日を繰り返し作成しますが、このとき右画像のように「日付値」を選択します。

    

パラメータと連動する計算フィールドを作る

ここまでできたら、パラメータの値と連動して年月日を表示する項目を作ります。CASE という条件分岐の関数を使い、どの値を選んだら何を表示するかを記載します。ここでは、パラメータで年・月・日を選んだら先程作った項目を表示するようにしています。最後をENDで締めていなかったり、表示する項目たちのデータ型が異なるとエラーになりますのでご注意ください。

 

CASE [表示単位の選択]
WHEN "年" THEN [オーダー日 (年)]
WHEN "月" THEN [オーダー日 (月)]
WHEN "日" THEN [オーダー日 (日)]
END

 

パラメータを動かす

計算フィールドができたらあとはシートに入れて、項目を右クリックで出てくる「不連続」「正確な日付」にチェックが入った状態にします。パラメータを動かしてみましょう。項目によって、グラフの粒度が変化するはずです。

粒度は変化するのですが、どの項目を選んでもyyyy/mm/ddの形式になるので、月や日単位のシートだと軸が読めません。これは書式設定の日付型が「日付単位」の中で同一のためです。

 

簡単に見やすさを優先するならば、上に「年」を表示して、下の軸は 右クリック > ヘッダーの表示 のチェックを外して非表示でもいいかもしれません。

 
番外編:表示項目を自分で作る

正直なところ、年月日に対応して書式も2022年、2022年2月、2022年2月6日と適切な粒度になってほしいです。そんな場合は自分で式を作ってしまうのも一案です。

以下は年月日の必要な要素を文字列として取得し、無理やりくっつけた例です。DATENAMEで月を持ってくると英語表記(February)になってしまうので、月だけDATEPARTで数値取得後、文字列に変えています。*更なる改善案を考え中です。

 

CASE [表示単位の選択]
WHEN "年" THEN DATENAME('year', [オーダー日]) + "年"
WHEN "月" THEN DATENAME('year', [オーダー日]) + "年" + STR(DATEPART('month',[オーダー日])) + "月"
WHEN "日" THEN DATENAME('year', [オーダー日]) + "年" + STR(DATEPART('month',[オーダー日])) + "月" + DATENAME('day',[オーダー日])+ "日"
END

 

式はともかく、軸の可読性は上がりました。

 

まとめ

見せる日付の単位を変化させるには、ドリルダウン以外にもパラメータを使った制御ができるという例でした。2022.3からの動的ゾーン表示という、シートの表示非表示を切り替える機能も使えなくはないのですが、まずは基本機能でどう実現するかをまとめてみました。

【Tableau Tips】日付の書式変更方法いろいろ

使いたい日付項目をグラフの用途や見せる相手に合わせて、柔軟に変更したいことはないでしょうか。中でもよく伺うお困りごとは「年月日表示から/(スラッシュ)区切り表示に変えたい」です。

日付表示を変更するメリット

2022年2月6日と2022/02/06、どちらが見やすいと感じますか?また1項目の場合と、複数日が並んだ場合、縦横に並べた場合はどうでしょうか。

一般的には、2022年2月6日は年月日の文字が場所をとるうえ、海外の方に見せづらいことがあります。一方で、2022/02/06のスラッシュ区切りは汎用性も高く、月や日付が1桁でも見栄えよくまとまります。

人によって見やすい日付形式は異なりますが、必要に応じてすぐ変更ができると便利ですね。

年月日表示から/区切り表示への切り替え

日付表示の変更ですが、基本的には計算フィールドを使わずとも「書式設定」から様々な形式に変更ができます。ただし、Tableau上でどのような日付形式を使っているかで実現性が変わります。どの表示だとスラッシュ区切りになるのか、Tableauのデモデータであるサンプルスーパーストアでいくつか試してみました。

 

前提として、Tableauではフィールドをドロップするとき(Macだとoptionキーを押しながらドロップで以下の選択画面を表示)や、項目を右クリックしたときに、年月日の表示方法を切り替えられます。

   

・月/日/年:2019年1月1日

こちらは 右クリック > 書式設定 で表示方法を変えることができません。「自動」という書式設定がデフォルトになっており、変更不可です。スラッシュ区切りにできない場合は、こちらを選んでいる可能性があります。

 

・オーダー日(不連続):2019/1/1

一方こちらは右クリック > 書式設定 で表示方法を変えることができます。単純なスラッシュ区切りなら、標準の短い日付形式でOKです。また、以下のようにカスタム日付形式を使用して曜日を表示するなどの変更も計算不要で実現できます。書式設定の書き方は、以下のヘルプを参照してください。

参照:カスタム日付形式

 

・オーダー日(連続):2019年1月1日

デフォルトでは上記の表示になりますが、右クリック > 書式設定 で表示方法を変更できます。

 

まとめ

日付項目の表示方法によって、選べる書式設定が異なります。スラッシュ区切りにできない?という場合は表示方法をぜひ見直してみてください。

【Tableau Tips】xy平面に正確な円を描く

Tableauでは散布図で簡単に円のサイズで数字の大小を表すことができます。金額など大きい数値なら下のようにサイズ感がつかめれば事足りるため気にしてこなかったのですが、xy平面上に円を描くことはできるのでしょうか。

結論、できた

結論から言うとできました。SQRT(平方根)関数を使って、ひとつひとつの円について座標を計算します。できるまでの過程で色々気づきがあったため、試行錯誤の経緯を残しておきます。

 

散布図を試す:失敗

xyを円の中心、zを円の半径としてグラフをつくり、散布図にしました。

no x y z
1 5 5 10
2 0 0 5
3 -5 5 1

 

サイズ感が違う…そしてマークの「サイズ」で大きさを変えてもzの大きさ通りにはなりません。どうやらTableauは、サイズに入れた項目と比例して半径ではなく、面積が変わるようです。

参照:半径が比例した円

しかし面積を計算してサイズに入れても、正確な円の大きさにはなりませんでした。


SQRT関数を使う:成功

どうやらサイズを使って正確な円を描くのは難しそうなので、座標を計算することにします。関数グラフを描画するために、-1から1まで0.01刻みの値を用意しておきます。横の結合キーは、描画したい円一覧とくっつけるためのキーです。

・-1から1までの実数

N 結合キー
-1 1
-0.99 1
-0.98 1
-0.97 1
-0.96 1
1 1

・円一覧

そして円一覧も用意しておきます。これにも結合キーをつけておきます。

no x y z 結合キー
1 5 5 10 1
2 0 0 5 1
3 -5 5 1 1

 

2シートを物理結合する

ここまでできたら2つのシートをTableau Desktopで結合します。円の数(3つ)×実数の数(201)のデータが作成されるため、大量の円を描くときは注意しましょう。

X軸の値を計算する

ここまで来たらあとは座標を計算していきます。X軸は実数N×半径+中心点のX

座標です。X軸の値:[N]*[Z]+[X]

 

Y軸の値を計算する

一方でY軸は2つの式を作る必要があります。値1は円の上半分、値2は円の下半分のY座標を示しています。SQRT関数を使って求めた値に半径をかけて、円の中心のY座標を足しています。

Y軸の値1:SQRT(1-[N]^2)*[Z]+[Y]

Y軸の値2:-SQRT(1-[N]^2)*[Z]+[Y]

 

シート上に項目を配置する

必要な座標が揃いましたので、あとはシート上に配置します。

・X軸の値:列に配置し、右クリックでディメンションに変更

・Y軸の値1,2:行に配置し、二重軸でひとつのグラフに表示&軸の同期で揃える

・No:色に配置し、それぞれの円を別の色で描画。色分け不要なら詳細でもOK。

 

あとは円ごとのラベルやツールヒントなど、表示をお好みで変更するだけです。X軸Y軸をアナリティクス→定数線で入れてもいいかもしれません。

まとめ

普段は数値をサイズに入れて終わりのところ、正確な円を関数で描くことができました。結合でデータ量が増えるので、描画数や必要なグラフの正確さによって採用するかを決めるのがいいかもしれません。