Preppin Data Practice #09 (24年12月 2024: Week 48 - Cross Sport League Table Ranks)
Japan Preppin’ Data Fam 第9回目のPreppin’ Data勉強会、24年12月のYouTube動画公開は、24年11月にPreppin' Dataで出題された全4題(W 45〜48)から2024W48 の課題にチャレンジです。
11月の課題での、概要は次の通りです。
ぜひ、アーカイブ配信動画と合わせてご覧ください。
Preppin’ Data勉強会の配信動画(YouTube)はこちらです
https://youtu.be/VR7i04ukmXg?si=Z22xp3wAPvRnriQA
1)課題の内容
今回取り上げたW40のPreppin’ Data 課題は、下記を参照ください。
今年頻繁に取り上げられたスポーツに関する課題です。
要件をよく理解して、フローを作成しないと、結果の値となかなか合わない課題でした。
出題の背景、対応項目
今回のチャレンジは、4種類のスポーツに関するデータ比較を行うものです。
スポーツ界で「最強のチーム/アスリートは誰か」という議論は常にファンの間で話題になりますが、異なるスポーツ間での比較は難しいという課題があります。
次の4つのスポーツを対象に、標準化されたスコアを用いて大規模なリーグテーブルを作成し、最も活躍したチームを導き出すことを試みます。
プレミアリーグ
NFL リーグ
アビバ ラグビープレミアシップ
NBA リーグ
4種のスポーツは次の通りです。全て、2023年から2024年にかけてのシーズンの結果をデータとして用いています。
要件は次の通りです
1)[Ranking Field] の作成
各リーグテーブルで使用するランク付けフィールドを[Ranking Field] 作成
NBAとNFL: Wins(勝利数)
ラグビー・プレミアリーグとプレミアリーグ: Points(ポイント)
2)[Ranking Field] が同じ場合のタイブレーカーのフィールドを作成
プレミアリーグ
タイブレーカー1 = Wins(勝利数)
タイブレーカー2 = Goals Scored(得点数)
NFL
タイブレーカー1 = Points Differential(得点差)
計算式: Points For(得点) - Points Against(失点)
タイブレーカー2 = Points For(得点)
NBA
タイブレーカー1 = Games Behind(ゲーム差)
タイブレーカー2 = Conference Wins(カンファレンス勝利数)
Conference Recordフィールドの形式: Wins-Losses(勝敗)
ラグビー
タイブレーカー1 = Wins(勝利数)
タイブレーカー2 = Points Differential(得点差)
3)スポーツ内でのランク計算
タイブレーカーを使用して、各スポーツ内でチームごとのユニークな
ランクを計算。
4)Zスコアの計算
次の式を用いて、スポーツ間の相互評価をするZスコアを計算
5)スポーツ固有のパーセンタイルランクを計算
6)クロススポーツランクの計算
Zスコアを基準にランク付けし、同点の場合はスポーツ固有の
パーセンタイルランクを使用して順位を決定する
データ出力
出力1:
フィールド
Sport
Cross Sport Rank,
Team, z-score
Ranking Field
Sport Specific Percentile Rank
行数: 92行(ヘッダーを含め93行)
出力2:
フィールド
Sport
Avg Cross Sport Rank
行数: 4行
2)参加者の解答例、Tipsなど
[Ranking Field] 、タイブレーカー フィールド類の作成
要件に従い、フィールド名の変更、フィールドの型変更(文字列から数値へ など)、および指定されたフィールド間の計算式により必要なフィールドを作成します。
各スポーツのテーブルで、それぞれ上記の指定されたフィールドを作成してから、テーブルをユニオンで一緒にすることになります。
各スポーツでの指定されたフィールド作成例は次の通りです。
データソースへの接続時にワイルドカードユニオンを利用する(CASE関数の利用)
mitamuu さんは、各スポーツのテーブル起点のフィールド作成ではなく、共通するフィールドの視点からデータを集計する方法として CASE関数 を利用しています。
最初のポイントは、データソースへの接続時にワイルドカードユニオンを利用する点です。データソースのExcelファイル内のワークシートを全てユニオンで取り込んでいます。
各 Sport のデータを縦に並べた後、[Ranking Field] をCASE関数を用いて作成しています。
条件式のWHEN以下で指定するSportに準じる文字列から、データとして取り出すフィールドをSportの内容に合わせて指定しています。条件式を利用した上手い方法ですね。
Zスコアの計算
ここでのポイントは、
(A) X、σ、μのフィールド名や、計算方法を分かりやすく表現
(B) FIXED関数を用いたデータ算出
になります。
Xは [Ranking Field] を用いますが、他の2フィールドはFIXED関数を用いてデータを取得しています。
1)計算式への説明書き記載
yamaguxhiさんの工夫点は、各計算式の意味を // を用いて記載していることです。
// は、コメントアウトされて、計算には利用されない仕様になっている点を利用し、引き継ぎなどに使える記載をしています。
2)FIXED関数の利用
Preppin‘ Dataでテーブルのデータ並び順を見ながら、FIXED関数でデータの集計を行っています。
この様に、インプットペインでデータを表形式で確認作業を行うことで、FIXED関数の利用イメージが掴めるようになる方が多い様です。
3)その他
σの集計方法
通常、標準偏差を求める際は、標本標準偏差を求める STDEV 関数を利用します。
たっくんさんは、仕事柄 標準偏差には、母標本標準偏差を求める STDEVP 関数の利用を考えているとのことです。
母集団に関する考え方は、統計学の方に譲りますが、母集団の一部となる標本を一般的には利用して、STDEV 関数を利用するケースが多いと思います。
Round関数(少数点9桁目で丸める)
ここ最近のPreppin‘ Data課題の傾向として、小数点以下の数値が多い(割り切れないなど)の場合、小数点以下9桁目で丸めているケースが散見されています。
ROUND関数を用いて数値を丸める処理を行いますが、フローの中で実施するROUND処理のタイミングで、Outputのデータと微妙に数値が合わないことが発生しています。
数値を丸めるタイミングは、実務でも問題になるケースも多いと思います。今回の課題でも、数値を丸めるタイミングを試行錯誤で決めていく作業は発生していました。
実務の場合は、そのルールに従い対応していくべきですね。Preppin‘ Dataではこの点の指摘が無い場合がほとんど。回答と合わない、と苦労される方も多いかなと感じています。
4)参加者が回答したPrep フローファイル
勉強会に参加したメンバーが作成したPrepフローのファイルを公開致します。
このブログ、動画アーカイブをご覧頂いたみなさまで、ご自分で手を動かしフロー作成をされた方の少しでもご参考になればと思っています。
下記のリンク先にフローファイルを保存しています。みなさまのお役に立てれば幸いです。
https://drive.google.com/drive/folders/1N3UwE1UAqTs2K4INMjtRcYAD-rkC1OGK?usp=sharing
5)おわりに
今回で9回目の勉強会 公開配信(ビデオ解説)になります。
課題の回答まで導くフローの流れは、参加者間で大きな差は無いものとなりましたが、実務でPrepを利用している経験などから、参加者それぞれのこだわり、効率的な処理の視点が多くあったと思っています。
それぞれが他の参加者から得た気づきを持ち帰り、実務で応用する機会が得れたと感じています。
Preppin' Data勉強会では、新規参加者を募集しています。
・Prep使ってみたい
・仕事で使っているけど ちょっととっつきにくい
・Preppn' Dataの初心者向け課題を始めました
という方々、一歩踏み出してスタートすると想像以上に力がつきます。実務でも役立つTipsが 目から鱗いっぱいありますので、是非ご参加ください。
参加希望の方は、下記までメールご連絡をお願いします。
Tableau Prepユーザー会 : tableauprep.usergroup@gmail.com