Tableauのパラメーターを使って疑似的なカテゴリーのフィルターを作ろう!

Tableau Tips
Tableau Tips

カテゴリーが/区切りで1列に記録されているのを何とかする

今日は少し軽めのTipsというか、特定の条件下での対処法の自分用のメモというか。

福岡市のオープンデータの中に屋台基本情報データセットがあります。
FUKUOKA HAKATA YATAIの基礎データでしょうか?)

こちらのデータは緯度・経度まで含まれていて、今後の題材に活用するに良さそうだなあと思っているのですが、カテゴリーの列には「ラーメン/焼きラーメン/焼き鳥/おでん/餃子」のように、複数のジャンルが1レコードとして記録されていました

その記録の仕方でも「ラーメンか焼きラーメンのどっちかが食べられればいいな」といったニーズには応えられるので、「明確に間違い」というわけではありませんが、私が近々作ってみようかなと思っているVizでは例えば「焼きラーメン」を出す屋台だけを絞って表示する、といった形にしたいなあと思ったので、Tableau側で何とかできないかと試してみた次第です。

なお、これから紹介する手法はデータ全体におけるカテゴリー数がそこまで多くない場合に有効です。

また、最初の方の手順はテキストエディタやExcel上で作業するので、純粋にTableau側だけで完結するものでもありません。

まずはカテゴリーがいくつあるのか数えてみる

  1. 先ほども書いたように、カテゴリーの値は「ラーメン/焼きラーメン/焼き鳥/おでん/餃子」という形になっているため、その列だけを別途テキストエディタに抜き出して、/を改行コードに置換します。
  2. 101軒の屋台のカテゴリー=101レコードが、394行のカテゴリー=394レコードに分解されました。
  3. このレコードをExcel上にコピーして、ピボットテーブルでデータの個数を数えることで、重複したカテゴリー名を12個のカテゴリーにまとめ直すことができました。

※テキストエディタなどの機能で重複レコードを削除するといった作業で代替してもかまいません。

※余談ですが、101軒のうち最も多くカバーされているのは「おでん」で81軒のようです。

パラメーターとCONTAINS関数でカテゴリーのフィルターっぽいものを作る

Tableauに屋台基本情報データセットから取得したsetai.csvを読み込みます。

この時点では、元のデータのとおりカテゴリーには「ラーメン/焼きラーメン/焼き鳥/おでん/餃子」といった形で値が格納されています。

……ということは、CONTAINS関数を使えば何とかなるのでは?と思いました。
途中の試行錯誤は省略しますが、最終的には

  1. パラメーターに、絞り込みたいカテゴリ名(12個)を用意しておく。ここではユーザーに選択させるためにパラメーター名を「食事ジャンルを選択」としました。
  2. 次に、計算フィールドで
    IF CONTAINS([カテゴリー(末尾/)],[食事ジャンルを選択])
     THEN [食事ジャンルを選択]
    END

    というものを作りました。

  3. これによって、ユーザーが[食事ジャンルを選択]パラメーターで「焼きラーメン」を選んだ場合、元データのカテゴリー列に「焼きラーメン」を含むレコードのみを絞り込む、ということを実現できます。

    ※ここではカテゴリーに「焼きラーメン」を含まない屋台はNULLとなっていますが、地図表現などに置き換えればNULLの屋台は表示されなくなります。

なお、少々アドホックな処理ですが、[カテゴリー(末尾/)]計算フィールドは[カテゴリー]+"/"という式にしています。

これは、パラメーターに/を用意することで「すべて」を表示するようにしたかったのですが、例えば「餃子」1本でやっているような場合にはカテゴリーの列の値に「/」が含まれていないので、カテゴリーが単一の場合でも「餃子/」という文字列になるようにして/を含めるようにしています。

※ちなみに、厳密にはこのCONTAINS手法だと、「焼きラーメンはあるが『ラーメン』はない」ところ(「明太中毒」など4軒の屋台が該当)も「ラーメン」で拾っちゃいますが、今回はあくまで手法の紹介・メモということでそのまま含めています。

軽めのTips……?

MK
MK

画像を除いたテキスト量はそんなに多くないから、軽めち言うたら軽めたい!

コメント

タイトルとURLをコピーしました