
どうも、馬好きエンジニアです。
この記事は、【前編】Tableauを駆使して競馬場別の複勝率を分析!のつづきになります。
「競馬場別の複勝率を可視化する棒グラフ」の作り方について紹介していきます!
競馬が好きで、数字も得意な人
Tableauを学びたい人
競馬仲間と情報をシェアしたい人
X(旧Twitter)もやってます。毎日、騎手に関する分析データを投稿しているので、ぜひフォローして見に来てください!!
「複勝率×競馬場」棒グラフの構成
今回作成するグラフがこちらです。
シェルフは、次のようになっています。
それでは、次の章から棒グラフの作り方や複勝率ピルの作成方法など、Tableauを用いた分析グラフの作り方を解説していきます!
データソース
分析グラフで利用するデータソースの構成は次の通りです。
項目名 | 説明 |
id_record | データ固有の番号 |
場所 | 競馬場の名前 |
確定着順 | 何着だったか? |
馬場 | 馬場状態を表す |
芝・ダ | 芝 or ダート |
騎手名 | 騎乗した騎手の名前 |
私はデータベース管理に、PostgreSQLを利用しています。
そのため、厳密に言うと用途ごとにテーブルを分けて管理しています。(競走情報テーブル、騎手情報テーブルみたいな)
Tableauで分析をする場合、それらテーブルを結合してデータソースを作成します。
ただ今回は、そこら辺の詳細は置いといて、分析で利用する項目のみ紹介しています。
シェルフの設定
シェルフとは、データフィールドをドラッグし、視覚化の要素を設定するための領域です。
今回の棒グラフでは、列と行のシェルフにそれぞれ次のフィールドを設定しました。
列には「場所」を設定します。
列に設定することで、競馬場を水平方向に表示することができます。
行には「集計(複勝率)」を設定します。
データソースから条件ごとの複勝率を計算し、グラフ表示してくれます。
この複勝率は計算フィールドを使っており、データソースのフィールドだけでは表現できない値や項目の作成が可能です。
「複勝率」メジャーの作り方
複勝率メジャーは、「計算フィールド」を使って作成します。
計算フィールドは、分析したいフィールドが元のデータには無いとき、関数を使ってTableauの中に作成することができる便利な機能です。
四則演算を初め、Tableau独自の関数やIF文を使った条件式など、使用用途は多岐にわたります。
それでは、複勝率メジャーが計算フィールドを使って、どのように作成されているか見ていきましょう。
複勝率メジャーの計算フィールドがこちら!

うん。長い(笑)
オレンジ文字がフィールド、青文字が計算式になります。
やっていることは。。。
- 1~3着の数をカウントする
- 上記をすべて足し合わせる
- 対象であるレース総数で割って複勝率を求める
例えとして、以下のようなデータの場合について、複勝率を求めてみましょう。
まずは、1~3着の数をカウントします。
集計項目 | 該当数 |
1着 | 4 |
2着 | 1 |
3着 | 0 |
レース総数 | 10 |
複勝率フィールドでは、新しく「count_1st~count_3rd」という計算フィールドを作成しています。
代表してcount_1stの計算フィールドがこちらです。
「確定着順」=1のデータ、つまり確定順位が1着のデータのみ「1」というフラグを立てて、他はNULLとするようなIF文の計算式となっています。(2,3位の場合は=2、=3に書き換えます。)
こうすることで、count_1stをSum関数で集計したとき、フラグである「1」の数を数えれば1着データの件数を求めることができます。
「複勝率」フィールドで、IF文の条件分岐が複数ある理由はcount_1st~count_3rdを計算した際、集計過程にNull値が含まれるのを防ぐためです。
計算フィールドでの計算でNull値が含まれていると、正しい値が導出されません。そのため、Null値を含んだ計算を回避するため、Isnull関数とIF文による条件分岐を使っています。
次に、1~3着の数を足し合わせます。
1~3着までの総数 |
4+1+0=5 |
最後に、対象であるレース総数で割って、複勝率を導出します。
複勝率 |
5÷10=0.5(複勝率50%!) |
「複勝率」フィールドは、このように計算フィールドを用いて作成されています。
まとめ
「競馬場別の複勝率を可視化する棒グラフ」の作り方について紹介しました。
Tableauの計算フィールドを使うことで、既存データだけでは表現が難しいことも、グラフ化することができます。
今後もさまざまな分析グラフについて紹介していくので、乞うご期待!