見出し画像

私の場合…WOW2025 Week3

今回のお題は、3つのレベルに分かれています。
▼今回のお題

「Begginer」をベースに「Intermediate」と「Advanced」があるので、自分のレベルに合わせたところからスタートできます。
「Begginer」がベースになっていますが、私の場合「Intermediate」がなかなか解けず、その後の「Advanced」はすんなり、といった感じでした。
3つのレベルが等間隔というよりは、「Begginer」と「Intermediate」「Advanced」の2段階といったイメージです。
正直、かなり苦戦したので、一旦完成した後にいろんな人のシートを覗かせてもらいました。手順はほんとに十人十色!!
なので、いつものことですが、ぜひいろんな方のシートを覗いてみてほしいです。
▼いつも勉強させてもらっている、Donnaさんの神ブログはこちら

以下、私の手順です。


Begginer

1.全体を眺める

・各シーズンのポイントが累計で表示された折れ線グラフ
・線のタイプはカクカク
・最新シーズンとそれ以外のシーズンで太さと色がちがう
・チームでフィルター
・タイトルの一部が選択したチーム名に変わる(こちら、最初気づかなかったのですがXでつぶやいている方がいて気づきました!)

2.データを取り込む

ダウンロードしたCSVファイルを開いてみると、チーム名が「Home」と「Away」の2行に分かれています。
チーム名でフィルターしたり、シーズン別の累計ポイントを計算たりするのには、チーム名のフィールドが必要です。
お題のヒントにもあるように、チーム名を1行にするために、データを取り込むタイミングで「ピボット」します。
「ピボット」は簡単に言うと、横に並んだデータを縦に並べる機能です。
今回の場合は、「ピボット」を使ってチーム名が入っている「Home」と「Away」の縦横を入れ替えます。

さっそくやってみます。
Tableauを開き、データソースを読み込みます。
「データソース」の画面で、「データグリッド」(右の下側にある横にデータが並んでいる場所)にある「Home」と「Away」を選択し、右クリックし「ピボット」を選びます。

ピボットの画面

<ピボットの原理>
元データでは、「Home」と「Away」の下に(縦に)チーム名が並んでいます。

元データ

ピボットすると、「Away」や「Home」とチーム名が横一列に並びます。
1行だったデータが、「Away」と「Home」の2行になっているのが分かります。それ以外の「Season」や「Wk」といったデータは同じデータが格納されます。

ピボットした後のデータ

ピボットが完成したら、「データグリッド」に新しくできたフィールド名を以下のように変更します。
・ピボットのフィールド名→「Home/Away」
・ピボットのフィールド値→「Team」
これでデータの準備は完了です。

3.獲得ポイントを計算する

獲得ポイントは以下のルールで計算することになっています。
・勝利チーム:3ポイント
・負けたチーム:0ポイント
・引き分け:両チームに1ポイント

一度データを眺めてみて、どんな計算式にすればいいかを考えてみます。
左側のデータペインから[Wk][Date](不連続、正確な日付)[Team][Home/Away][FTR]を「行」に配置します。
「マーク」の「テキスト」に[メジャーバリュー]を入れます。
続いて、「列」に[メジャーネーム]を入れます。
「マーク」の下にできた「メジャーバリュー」から[カウント(…)]を削除します。

データを眺める

元のデータと見比べてみると、1行目と3行目が同じ試合のデータだということが分かりました。
この2行のデータから、法則性を見つけます。
「Away Goals」と「Home Goals」から「FTR」はAwayチーム、Homeチームのどちらが勝ったか(もしくは引き分け)を表しているのが分かります。
<FTR>
・A:Awayチームが勝利
・H:Homeチームが勝利
・D:引き分け
[FTR][Home/Away]を組み合わせることで、勝利したチームが分かりそうです。

獲得ポイント
新しく計算式を作り[Points]と名付けます。

//Points

IF [Home/Away]='Home'    //チームがHomeの時
THEN IF [FTR]='H' THEN 3     //H=Homeが勝利なら 3ポイント
     ELSEIF [FTR]='A' THEN 0     //A=Awayが勝利なら 0ポイント
     ELSE 1     //それ以外=引き分けなら1ポイント
     END

ELSEIF [Home/Away]='Away'      //チームがAwayの時
THEN IF [FTR]='A' THEN 3      //A=Awayが勝利なら 3ポイント
     ELSEIF [FTR]='H' THEN 0     //H=Homeが勝利なら 0ポイント
     ELSE 1     //それ以外=引き分けなら1ポイント
     END

END

[Points]を「マーク」の下の「メジャーバリュー」に入れて確認してみます。
[Home/Away][FTR]が一致している時は3、不一致の時は0になっていて指定通りの計算ができています。

計算式の結果を確認

累計ポイント
今回の折れ線グラフは、週を横軸にした累計ポイントになっています。
新しく計算式を作り[Comurative Points]と名付けます。

//Comurative Points

RUNNING_SUM(SUM([Points]))

4.線グラフを作る

新しくシートを開き、左側のデータペインから[Wk]を「列」に配置します。
[Comurative Points]を「行」に配置します。
「マーク」の「詳細」に[Season End Year]を入れます。
「フィルター」に[team]を入れ「Nott'ham Forest」にチェックを入れます。
自動でグラフの種類が「線」になっていると思いますが、違う場合は「マーク」でグラフを「線」にします。
「マーク」の「パス」をクリックし「線のタイプ」を真ん中(カクカク)にします。
これで、線グラフの基本形が完成です。

5.見た目を整える

線の太さと色を変える
今回のお題では、最新シーズンだけが太い線で濃い紫、それ以外は細い線で薄い紫という指定です。
最新シーズンとそれ以外を識別するための計算式を作ります。
新しい計算式をつくり[Is Latest Season]と名付けます。
※チームによってデータが格納されているシーズンが違うので、[Team]でFIXED計算します

//Is Latest Season

{ FIXED [Team]:MAX([Season End Year])}=[Season End Year]

[Is Latest Season]を「マーク」の「サイズ」と「色」に入れます。
これで、最新のシーズン(画面上では2025)だけが太く、違う色になります。
右側の色の凡例の「▼」をクリックして「色の編集」を選びます。
「色の編集」画面でお題の指定の色に変更します。(真:#3d1053、偽:#b07aa1)
「マーク」の「サイズ」で線の太さを細くします。(私の場合、15%くらい)

デフォルトの状態だと太い線よりも上に細い線がきているので、この順番を変更します。
右側の色の凡例で「真」と「偽」の順番を入れ替えます。(「真」が上)

線の上下を変える

そうすると、色の順番に連動して、線の太さが逆転(最新シーズンが細く、それ以外が太く)なってしまうので、線の太さを再調整します。
右側のサイズ凡例の「▼」をクリックして「サイズの編集」をクリックします。「サイズの編集」画面で、「反転」にチェックを入れ「適用」をクリックします。これでもとに戻ります。

サイズの編集画面

ラベルを付ける
ラベルは一番最後のデータにだけ、線と同じ色になっています。
「マーク」の「ラベル」に[Season End Year]を入れます。
続けて「ラベル」をクリックし、「フォント」でサイズ「8」の「太字」にし、「マークカラーの一致」をクリックします。
「配置」で「水平方向」を「右」に、「垂直方向」を「中」にします。

軸を整える
縦軸をダブルクリックし、「軸の編集」画面で「軸のタイトル」を「Points」に変更します。
同じく横軸もダブルクリックし「軸のタイトル」を「Week」に変更します。

線を整える
上部メニューの「書式設定」をクリックし「枠線」を選びます。
「枠線の書式設定」で「行の境界線」「列の境界線」をすべて「なし」にします。
続いて「線の書式設定」に移動し、「ゼロライン」以外のすべての線を「なし」にします。

ツールヒントを設定する
ツールヒントでは「Season」として[Season End Year]からマイナス1年した年と[Season End Year]を組み合わせた表示(例:2023-2024)があります。
それを表示するための計算式を作ります。
新しく計算式を作り[Season]とします。

//Season

STR([Season End Year]-1) + '-' + STR([Season End Year])

[Season][Team]を「マーク」の「ツール」に入れます。(自動で「属性」になります)
「マーク」の「ツール」をクリックし以下の画像のように設定します。
※<>のついた部分は太字、最初の「<属性(Team)>|」は少し大きめ
※私の場合、ツールヒントで意図しない操作がされるのを防ぐために「コマンドボタンを含める」のチェックを外すようにしています。

ツールヒント

文字の色を変更する
条件に「テキストはすべて濃い紫」とあるので、文字の色を変更します。
上部メニューの「書式設定」で「ワークブック」を選び、「ワークブックの書式設定」画面で「フォント」「すべて」の色を濃い紫(#3d1053)に変更します。

6.タイトルを変更する

ダッシュボードのタイトル1行目は、選択したチーム名が表示されるようになっているので、シートのタイトルをそのままダッシュボードのタイトルとして使うことにします。
タイトル文字(「シート2」)をダブルクリックし、「タイトルの編集」画面で、お題のVizを参考にタイトルを記入します。
1行目のチーム名(Nott'ham Forest)を削除し、左上にある「挿入」をクリックして「Team」を選び、差し替えます。

タイトルの編集

最後にシート名を「begginer」と変更すれば初級は完成です。

Intermediate

1.Begginerとの違い

BegginerとIntermediateとの違いは、線グラフに重なっている丸印です。
・最新シーズンは、最後に丸があり、その中に累計ポイント数、色は線と同じ、シーズンのラベルなし
・その他シーズンは、最新シーズンの総獲得ポイントと同数もしくは最初にその数を上回ったところに少し小さめの丸、色は線と同じ

2.丸印を計算する

今回のお題で私的に一番苦戦したのが、その他シーズンの丸を表示させるところでした。
本来なら線として表示される累計計算の結果を、点としてピンポイントで表示させるために、いろいろ、ほんとにいろいろ試してたどり着いたプロセスが以下のとおりです。

①最新シーズンの累計ポイント数をWINDOW_MAX関数を使って全週(横一面)に展開する
★どの週で上回るか分からないので、すべての週に基準となる数値を配置しておく必要がありました

②そのラインを基準(緑の線)とし、ラインを超える累計ポイント(丸印)の中で、ラインを超える累計ポイントのひとつ前の累計(四角印)がラインを超えない場合(黒丸)にだけ累計ポイントを計算する
★文章ではわかりづらいので、以下の図と合わせてみてもらえると少しは分かりやすいかなと思います。
★「基準ラインを最初に超えたポイント」という状態を分解して再構築すると上のようなロジックになります。この、分解→再構築はWOWでちょくちょく求められる思考なのですが、私はとても苦手です…

プロセス②の図解

基準ラインを計算する
「begginer」シートを右クリックし「複製」をクリックします。
新しくできたシートで、新しい計算フィールドを作り[Latest Point]と名付けます。

//Latest Point

WINDOW_MAX(RUNNING_SUM(IF MIN([Is Lateset Season]) THEN SUM([Points]) END))

[Latest Point]を「行」に配置します。
「マーク」で「Latest Point」を選び、色、サイズ、ツールヒント、ラベルとして設定されているピルをすべて削除します。(詳細に[Season End Year]だけが残った状態)
「行」にある[Latest Point]を右クリックし「表計算の編集」を選びます。
「表計算」の画面で「特定のディメンション」を選び「Wk」と「Season End Year」の両方にチェックを入れます。
すると、すべての週に2025年の累計値「37」が展開されます。

すべての週に2025年の累計値が展開

基準ラインを超えた点を計算する
新しい計算式を作り[Point of arrival]と名付けます。

//Point of arrival

IF MIN([Is Lateset Season]) and LAST()=0 THEN [Comulative Points]

ELSEIF NOT MIN([Is Lateset Season])
THEN IF [Comulative Points]>=[Latest Point] and LOOKUP([Comulative Points],-1)<[Latest Point]
 THEN [Comulative Points] END

END

<計算式の解説>
・最初のIFは、最新シーズンの場合を指定しています。最新シーズンの場合は、基準ラインとは関係なく一番最後のポイントを累計計算します。
・次に、ELSEIFで、最新シーズン以外を指定します。最新シーズン以外は、次のIFで、基準ラインを超えたもののうち、ひとつ前が基準ラインより下回っている場合を指定し、累計計算をします。(前述のプロセス②で説明しているとおり)
LOOKUP関数は、現在の行から指定されたターゲット行(今回:-1=ひとつ前)にある式の値(今回:Comurative Points)を返す関数です。

3.丸印を配置する

[Point of arrival]を「行」に配置します。
これで、基準ラインを最初に超えたところに、累計ポイントが表示されます。

累計ポイントが表示!

3つのグラフのうち、真ん中の基準ラインのグラフは不要なので、「行」にある[Latest Point]を削除します。
下の方の縦軸を右クリックし「二重軸」を選択します。
次に、右側の縦軸を右クリックし「軸の同期」を選択します。
もう一度、右側の縦軸を右クリックし、「ヘッダーの表示」のチェックを外して軸を消します。
グラフの右下にあるグレーのインジケーター(「93個のNULL」と表示)を右クリックし「インジケーターを非表示」を選びます。
これで、グラフの基本形は完成です。

4.丸印の見た目を整える

折れ線同様、丸印も最新シーズンが大きく、それ以外のシーズンは小さくなっています。また、色も、濃い紫と薄い紫です。

サイズを整える
線と同じように[Is Latest Season]をサイズに入れてもいいのですが、そうすると線の太さと丸の大きさが連動してしまって、微妙な調整ができなくなります。
なので、今回は、新しくもうひとつ丸の大きさ用に同じ計算式を作って別の名前にします。
左側のデータペインにある[Is Latest Season]を右クリックし「複製」をクリックします。コピーされた計算式を右クリックし「名前の変更」を選び、[Is Latest Season2]に変更します。

「マーク」で「Point of arrival」を選び、グラフの種類を「円」に変更します。
「サイズ」に[Is Latest Season2]を入れます。

この時、そのまま[Is Latest Season2]を入れると、右側の2023シーズンについていた丸印が消えてしまいます。
これは、[Point of arrival]が表計算になっていて参照する計算式に変更が発生したためです。(今回の場合、[Is Latest Season2]という新しい計算式が追加)
「行」にある[Point of arrival]の表計算を編集しなおしてもいいのですが、表計算の編集ってとにかくややこしいので(今回はネストされた計算式もあって特にややこしい)、今回は別の方法で回避します。
別の方法はとても簡単です。
「サイズ」にある[Is Latest Season2]を右クリックし「属性」を選びます。
★「属性」とすることで計算式ではなくなるため、表計算に影響を及ぼしません。注意点としては、「属性」とすることで逆に一意の情報を持たなくなってしまったので、ラベルやツールヒントで「*」となってしまう場合があります。そんな場合は、表計算の編集を使う必要があります。

右側のサイズの凡例の「▼」をクリックして「サイズの編集」を選びます。
「サイズの編集」画面で、サイズを調整します。

サイズ調整完了

色を整える
「マーク」の「色」に[Is Latest Season2]を「属性」にして入れます。
※ここでも、そのまま入れると2023シーズンの丸印が消えてしまいます。
右側の色凡例の「▼」をクリックして、「色の編集」を選びます。
「色の編集」画面で、真:濃い紫、偽:薄い紫に変更します。

ラベルを整える
ラベルは、以下のようになっています。
・最新シーズン:丸印の中に累計ポイント数&年の表示なし
・その他シーズン:丸印のみ、年の表示あり

まずは、丸印の方です。
新しい計算式を作り[Label_Latest Season]とします。

//Label_Latest Season

IF MIN([Is Lateset Season]) THEN [Comulative Points] END

「マーク」で「Point of arrival」を選び、「ラベル」に[Label_Latest Season]を入れます。
「ラベル」をクリックし、「フォント」で12ポイントの太字にし、色を「白」に変更します。
続いて、「配置」で「水平方向」「垂直方向」ともに真ん中にします。
「ラベルがその他マークをオーバーラップするのを許可」にもチェックを入れておきます。

次に、年の方です。
新しく計算式を作り[Label_Season]と名付けます。

//Label_Season

IF NOT [Is Lateset Season] THEN [Season End Year] END

「マーク」で「Comurative Points」の方を選び、[Label_Season]を「ラベル」に入れます。
「マーク」にある[Label_Season]を右クリックし「ディメンション」を選びます。
次に既にラベルとして設置されている[Season End Year]を削除します。

ツールヒントを整える
丸印にマウスオーバーしてもツールヒントが表示されません。
「Point of arrival」の「マーク」で「ツールヒント」をクリックしてみると、
線グラフと同じ情報が既に記入されています。
「マーク」に情報が不足しているのでうまく表示されていない状況です。
なので、不足している情報を「ツールヒント」に入れていきます。
左側のデータペインから以下を「ツールヒント」に入れます。
[Team](自動で属性になる)
[Season](自動で属性になる)
[Comurative Points]

最後にシート名を「intermediate」に変更します。
これで、Intermediateは完成です。

Intermediate 完成

Advanced

1.Intermediateとの違い

IntermediateとAdvancedとの違いは2点です。
・最新シーズン以外の丸印のツールヒント:最新シーズンの累計ポイントを超えた週が最新シーズンと比べて早いのか、遅いのか、同じなのか、によってコメントを出し分ける必要があります。
・2025シーズンでプレーしているチームのみフィルターで選択できるように吸う必要があります。

2.最新シーズンの最終週を計算する

まずは、基準となる最新シーズンの最終週を計算します。
「intermediate」シートを右クリックし、「複製」を選びます。
新しくコピーされたシートで、新しい計算式を作り[Week of Latest Season]と名付けます。

//Week of Latest Season

WINDOW_MAX(IF MIN([Is Lateset Season]) THEN MAX([Wk]) END)

<計算式の意味>
今回も、累計ポイントと同様に、どの週で基準ラインを超えるか分からないので、WINDOW_MAX関数を使って全週に展開します。

3.その他シーズンの基準ラインを超えた週を計算する

新しく計算式を作り[Week of Other Seasons]とします。

//Week of Other Seasons

IF [Point of arrival]=[Comulative Points] THEN MIN([Wk]) END

4.差分を計算する

先ほど作った2つの計算式を使って、最新シーズンの最終週との差分を計算します。
新しく計算式を作って[Dif]と名付けます。

//Dif

[Week of Othe Seasons]-[Week of Latest Season]

5.ツールヒント用の計算式をつくる

差分表示をするのは、最新シーズン以外のシーズンだけなので、出し分けの計算式が必要です。
新しく計算式をつくり[Tool Dif]とします。

//Tool Dif

IF NOT MIN([Is Lateset Season])
THEN
 IF [Dif]=0
 THEN 'It took the same amount of weeks to accrue at least the same number of points as the current season'

 ELSEIF [Dif]>0
 THEN 'It took '+STR([Dif])+' weeks more to accrue at least the same number of points as the current season'

 ELSEIF [Dif]<0
 THEN 'It took '+STR(-[Dif])+' weeks less to accrue at least the same number of points as the current season'
 END

END

「マーク」で「Point of arrival」を選び、「ツール」に[Tool Dif]を入れます。
次に「ツール」をクリックして、既に設定されている情報の下に一行改行します。「挿入」から「集計(Tool Dif)」を選んで追加します。

この状態で、最新シーズン以外のシーズンの丸印にマウスオーバーしてみると…うまく表示されていません。
これは、表計算の編集が必要だからです。
表計算の編集、ややこしくて、私自身、いったいどういう原理になっているのか明確に説明できません。
なので、今回はなんで?という思いは置いておいて、以下のとおり設定してください。

「マーク」にある[Tool Dif]を右クリックして、「表計算の編集」をクリックします。
「ネストされた計算」で4つの計算式を選べるようになっています。
「Point of arrival」「Latest Point」「Week of Latest Season」の3つについて、「特定のディメンション」で「Wk」と「Season End Year」のすべてにチェックをつけます。

表計算の編集

6.フィルターの編集

いろんなやり方があると思うのですが、私の場合、セット機能を使いました。
左側のデータペインにある[Team]を右クリックし、「作成」で「セット」を選びます。
「セットの作成」画面で「条件」タブをクリックし、「式の指定」にチェックを入れます。
その下の空白部分に、以下の計算式を書きます。

{FIXED [Team]:MAX([Season End Year])} = {MAX([Season End Year])}

<計算式の意味>
左側:Teamごとの最新のシーズン
右側:すべての中で最新のシーズン:2025
これが一致するチームが今シーズンプレーしているチームとなります。

セットの編集画面

[Teamセット]を「フィルター」に配置します。
続けて「フィルター」に設置した[Teamセット]を右クリックし「セットのIn/Outを表示」を選びます。
「フィルター TeamセットのIn/Out」の画面で「In」にチェックを入れ「OK」をクリックします。

「フィルター」にある[Team]を右クリックして「フィルターを表示」を選びます。
右側に「Team」のフィルター情報が表示されます。
この右側の「Team」フィルター情報の「▼」をクリックして「関連値のみ」を選びます。
すると、微妙にチーム数が少なくなります。
「関連値のみ」とすることで、先ほど「フィルター」に追加したセット情報(In=最新シーズンプレーしているチーム)に当てはまる情報だけが表示されるようになります。

「すべて」を表示せず選択できるのは一つのチームだけなので、書式を合わせます。
右側のフィルターの凡例で「▼」をクリックし、「カスタマイズ」を選び、「「すべて」の値を表示」のチェックを外します。
もう一度「▼」をクリックして「単一値(ドロップダウン)」を選択します。

最後にシート名を「advanced」に変更すれば完成です。

ダッシュボードに配置する

3パターンとも手順は同じです。

新しくダッシュボードを開き、「ダッシュボード」の「サイズ」を「固定」にし、幅:1000px、高さ:800pxにセットします。
「begginer」シートをダッシュボードに配置します。

右側に凡例等が自動追加されるので、その中から「Team」のフィルターだけを選択し、グレーのタブの「▼」をクリックして「浮動」を選びます。
残りはコンテナごと削除します。
※もし、自動で表示されていない場合は、「begginer」シートをクリックして表示されるグレーのタブの「▼」をクリックして、「フィルター」から「Team」を選びます。

「すべて」を表示せず、選べるのは1つのチームだけなので、書式を合わせます。
浮動になっている「Team」フィルターをクリックし、表示されるグレーのタブの「▼」をクリックします。「カスタマイズ」を選び、「「すべて」の値を表示」のチェックを外します。
もう一度「▼」をクリックして「単一値(ドロップダウン)」を選択します。

下段にタイトルの「*」に対する注釈があるので、テキストオブジェクトを使って配置します。
「Advanced」だけコメントが違うので気を付けてください。

ダッシュボードの名前を変更して、Tableau Publicにパブリッシュすれば完成です。
長い説明になりましたが、最後まで読んでいただきありがとうございました。

トラッカーはまだ2024年のままなので、登録できなさそうです。(2025年1月19日現在)


いいなと思ったら応援しよう!