見出し画像

Preppin Data Practice #03 (24年6月 - 2024: Week 21 Loyalty Points Percentages -)

Tableau Prepユーザー会のNakajima2です。
Japan Preppin Data Fam 第3回目のPreppin Data勉強会、24年6月のYouTube動画公開は、24年5月にPreppin Dataで出題された全4題(W 18 〜21、下表参照)から2024W21 の課題にチャレンジです。

24年5月 Preppin Data出題内容

以下、課題の内容、対応のポイント、参加者の解答例をご紹介します。
Preppin Data勉強会の配信動画(YouTube)も、以下リンク先からご覧ください。
 公開した動画はこちらです


1)課題の内容

Preppin Dataの課題は、下記を参照ください。
https://preppindata.blogspot.com/2024/05/2024-week-21-loyalty-points-percentages.html

・出題の背景、対応項目

今回のタスクでは、SuperBytesの新しいロイヤルティカード制度に関連するデータを処理し、特定のカテゴリーに資格のある顧客の割合を男女別に示すデータセットを作成します。
具体的には、消費金額に基づいてロイヤルティポイントを計算し、それを「MegaByte」、「Byte」、「No Byte」の3つのカテゴリに分類します。
次に、各カテゴリに属する顧客数を男女別に集計し、それをピボットして、各カテゴリにおける男女の割合を計算します。最終的なデータセットは、3つのフィールド(カテゴリ、女性、男性)と3つの行で構成されます。

・データソース、Outputデータ

Inputのデータソースは、CSVファイル。8フィールド、999行(ヘッダ除く)になります。文字列、日付、数値(少数)が含まれています。
Prep処理後のOutputデータは、3フィールド、3行(ヘッダ除く)となります。

・Requirements(要求事項のポイント)

  • データを入力する

  • ロイヤルティポイントを作成する :

    1. £50ごとに1ポイントを獲得

    2. ロイヤルティポイントを小数点以下1桁に丸める

  • ロイヤルティポイントをカテゴリ分けする新しいフィールドを作成する :

    1. ポイントが7以上の場合、「MegaByte」

    2. ポイントが5以上7未満の場合、「Byte」

    3. 残りは「No Byte」

  • 各バイトカテゴリに資格のある顧客の合計を見つける : 女性と男性別に

  • 女性と男性がそれぞれ独自のフィールドを持つようにピボットする

  • 各カテゴリにおける女性と男性の割合を計算する : 割合を小数点以下1桁に丸める

  • データを出力する

2)対応のポイント

カテゴリー分け ー 集計 ー ピボット ー  割合計算

Preppin' Dataの回答(Solution)でも示された模範的なフローは次の通りです。
勉強会では、回答者のYamaguchiさんから説明があったフローになります。

回答フロー例

Requirementsに従い処理を進めた場合、次の関数および処理ステップで作業を行います。

[Loyalty Points]
round([Sale Total]/50,1)

£50ごとに1ポイントを獲得

[Category]
if [Loyalty Points]>=7 then "MegaByte"
elseif [Loyalty Points]>=5 then "Byte"
else "No Byte" end

カテゴリ分け
集計 : Category と Gender でグループ分けし、Loyalty Points をカウントする
ピボット : Gender を横持ちにデータ分け(女性と男性)する
計算 : 女性と男性の割合を計算する

3)参加者の解答例、Tipsなど

利用しないデータフィールドは、フローの初期段階で削除する

Mr.もりた の教えですね。利用しないデータフィールドは、早い段階で削除して処理速度を軽くして、作業をわかり易くする配慮が重要です。

今回のケースでは、データソースで与えられたデータ中で、実際に処理に必要なのは [Gender] と [Sale Total] の2つのみ。これをデータソースの接続時点で不要なフィールドを削除しておくことで、以後の処理が容易になるメリットが生じます。
フロー作成中に一時的に作ったフィールドも、不要になった時点で早々に削除しておくことで、視認性が向上します。

なお、もし削除してしまったフィールドが途中で利用したくなった際は、フローの初期段階に戻りデータを復活させれば、直ぐに利用出来るようになります。
また、逆にフロー作成中に不要だと気づいたフィールドに対しては、フローの初期段階に戻りフィールドを削除しておくことで、認識性の向上のみならず、作業フローの動作速度向上にも寄与します。

条件式 : elseifで仕分け ーロイヤルティポイントをカテゴリ分けー

if ・・・ else if ・・・ else ・・・ end の条件式を利用して、上から順に範囲分けをして仕分けをする方法です。基本的な利用方法として、多くの場面で利用出来る条件式です。

if [Loyalty Points]>=7 then "MegaByte"  // 7 より大きい数値を分ける
elseif [Loyalty Points]>=5 then "Byte"    // 上残りデータから5以上の数値を分ける
else "No Byte" end            // 残っている全てのデータを扱う

FIXED計算を利用して、人数カウントが出来る

参加者 Rieko さんからのTipsです。
[Category] フィールドに該当するデータから、該当人数(データ数)を集計する際に、FIXED関数が利用出来ます。

{ FIXED [Category], [Gender] : COUNT ( [Category] ) }

FIXED関数は、式左側のフィールドでグループ分けし、右側の式で集計計算をさせる

このケースの場合、[Category] と  [Gender] の2つのフィールドを用いてグループ分けをしておいて、[Category] のフィールド データ数をカウント(集計)して という計算式になります。

FIXED関数は、指定したグループ化するフィールドで、データの集計を行える関数です。数値データ、文字データに応じた集計関数が利用出来、さまざまなケースで有効に利用出来ます。
Prepでの処理演習で、FIXED関数の役割理解がし易いと思います。是非、実務や演習の中で覚えて頂ければと思います。

集計処理において、文字列、集計済みの1つしかデータが無い重複したものの集計は、AVG、MIN、MAXを利用して作業が出来る

集計処理において、集計フィールド(下図の右側処理)で文字列や、集計済みの1種類しか無いデータに集計処理を行う際は、集計の設定はAVG、MIN、MAXを用いることで一つのデータを表示することが出来ます。
文字列の集計でAVGなどを利用する点は、最初感覚的に違和感があるかもしれません。ルールとして覚える内容と思います。

集計処理での文字列、集計済みの1つしか無いデータは、MINなどでデータを表示出来る

ピボット、アンピボット

Tableau Desktopで利用するピボットは、「列から行」にデータを縦持ちにするピボットのみが利用出来ます。
Prepでは、これに加え「行から列」へのデータを横持ちにするピボットも利用でき、それぞれのピボットがフローの中で何度でも利用することが出来ます。

2種類のピボットが何度も利用出来る

ピボット処理の呼び方は、「行から列」をピボットと呼び、「列から行」はアンピボットと呼ぶのが正式だそうです。
両方のピボットがPrepで利用出来ることで、目的に応じた柔軟なフロー処理を行うことが出来ます。

ピボットで集計出来る ー文字列は、最大値、最小値、平均で集計できるー

「行から列」をピボットにおいては、ピボット処理に伴い集計の作業を同時にすることが出来ます。
Mr.もりた のTIpsですが、「行から列」をピボットでは、ピボット設定対象外のデータは集計処理を行う仕様になっています(下図参照)。
今回の課題の解答事例として、この点を踏まえ あえて事前に集計ステップを用いず、このピボット処理で集計処理を同時に実施しています。
この方法で、集計とピボットの処理ステップ集約が図れています。

Mr.もりた のフロー : ピボットの処理において、、
集計処理が同時に行える (上の図 左下の [Sale Total] をカウントで集計している)

4)その他

1 Step フロー ー更なるPrep筋 強化に向けてー

6月13日に開催した第9回 Tableau Prep User Group イベントでも発表がありました 1 Step フロー。
1 Step 教 などと称して参加者は少し楽しんでいる趣旨がありますが、Prepで利用する基礎知識、関数知見の習得、PrepのみならずDesktopがどのような動作(特にSQLに関する点)をしているかを理解する意味でも、大変勉強になる取り組みです。

業務などにおいても、
 1)冗長になりやすいフローをコンパクトにする
 2)動作速度を良くするための工夫をする
など、1 Step で得た知識を活用出来るようにすることが出来るメリットがあります。
今回は、その趣旨で、2つのフロー事例をご覧頂ければと思います。

ピボットでの 1 Step

登壇した たっくん さん が作成したフロー。
通常のフローでピボットを使用している点と、Mr.もりた のTIpsで、「行から列」をピボットにで集計の作業を同時に実行する点を利用したフローになります。


ピボットでの 1 Stepフロー

通常のフローで処理される関数などを、ピボットのステップに全て詰め込んだと考えて頂けると理解しやすいかと思います。具体的なステップ内の処理内容は、次の通りです。

ピボットまでの計算処理、ピボットはFIXED関数で算出した集計しをAVGでカウントしている
ピボット後の計算 通常フローと同じく、女性と男性の割合を計算している

見かけはピボットだけのフローになっていますが、ピボットステップの中には通常のフローで行う作業と同じものが記載されている形になっています。
フロー全体をコンパクトに見せる効果があり、冗長になるフローの中で利用でフロー全体をわかり易くする効果があると思います。

クリーニングステップでの 1 Step

Nakajima2にてご説明したフローです。

クリーニングステップのみのフロー

クリーニングステップのみを利用したフローですが、処理内容がわかりやすいように、4つのステップに分解してご説明します。

左から順に[Loyalty Point] からの [Category] 作成、集計、ピボット、比率の計算を実施している

カテゴリ作成、割合計算のステップは、通常のフローと同じ作業をしています。集計とピボットの役割をする各ステップで、次の処理を行っています。
詳しい処理の流れは、勉強会の動画をご覧ください。

集計処理のステップ FIXED関数でカウント集計し、重複を削除してひとつのデータを残している
勉強会の動画では、重複チェックではなくROW_NUMBERを利用した並び替えを使っています
女性と男性のフィールドを作成し、列を整理(横持ち化)している

5)おわりに

今回で3回目の勉強会 公開配信(ビデオ解説)になります。
同じ課題を1度定例の勉強会で発表し、動画撮影の際に2度目の発表をしています。毎回感じることですが、他のメンバーから聞く2度目の発表でも新たな発見があり、知識の習得、定着が深く図れていると感じています。
Practice(練習する)の良い意味合いを素直に感じる勉強会。Prepだけでなく、Tableau Desktopの基礎動作理解にも役立っています。
よければ、是非ご一緒に学び合いの場にご参加頂ければと思っています。

Preppin Data勉強会(Japan Preppin Data Fam)では、新規参加者を募集しています。
初心者の方も大歓迎。Tableau Prepが使い慣れた中級以上の方も、目から鱗いっぱいありますので、よろしければご参加を検討ください。

参加希望の方は、下記までメールご連絡ください。
Tableau Prepユーザー会 : tableauprep.usergroup@gmail.com


この記事が気に入ったらサポートをしてみませんか?