tabpyで相関係数を計算しよう!

tabpyで相関係数を計算しよう! | Tableau-id Press -タブロイド-
tableau-logo-1200x630-960x504-1-e1628055423558

こんにちは、ひめのです。

Truestarで勤務した後、今は関連会社のDeepblueでプロジェクトマネジメントをしています。

tableauを使ってお仕事をすることも多かったので、今回ゲスト寄稿させてもらうことになりました。

◆Deepblueって?
 株式会社Deepblueとはtruestar HDグループのひとつで、統計解析・機械学習・ディープラーニングなどの手法を用いたデータ分析を専門とした会社です。

deepblueも技術ブログやってます!

 

はじめに

今回のテーマは「tabpyを使って相関係数を計算してvizの中で使おう!」です。

散布図を作って、分析タブから傾向線を表示して、マウスオーバーすると出てくるR^2。

フィルタで条件変えたり、メジャーを入れ替える度にマウスオーバーするか、傾向線の説明ポップアップを表示するの面倒だと思ってたんです。

なぜメジャーになってくれないのか!!なってくれ!の気持ちを同僚のおかげで実現することができました。

相関係数はR^2の二乗する前の数字です。

 

従来はこんな感じですよね↓

tabpyを使えば一覧表示にできます!しかもフィルタも効く!

0.4683を2乗すれば0.2193なのでしっかり相関係数を計算できています!

早速方法を順を追って解説していきます!

実装の前に…

  • tabpyがインストールされている必要があります(よろしければdeepblueブログをご参照ください)
  • tableauのバージョンは2021.4で作成しました。
  • データはtableauのサンプルデータのRegionalからObesityを使用しました。

いざ実装!

まずはデータを確認し、相関係数を計算したい列にNULLが入っていないことを確認します。

(NULLがある場合はフィルタでNULLを含まないように調整してください)

次に、最も細かい粒度のディメンションを確認します。

ObesityのCountyは州をまたいで重複があるみたいなので、state_countyというフィールドを作成しました。

このフィールドを指定して表計算を実行することになります。

次に早速tabpyの関数を使います。

まずobesityとsmokerの相関係数を計算してみましょう。

_arg1にsum([Adult Obesity (% of pop)])、_arg2にsum([Adult Smokers (% of pop)])が代入されて

図のようなマトリックスが返ってくるのですが(数字はイメージです)、

[0, 1]はどの部分を返すか、を指定しています。

[0]で1番目の[]の中身、[1]で[]の中身の2番目の数字を取りに行け、という指示です。

Default Table Calculationで先ほど作成したstate_countyを指定します。

作成したので早速表示したいのですが、このままテキストにドラッグしてもエラーになります。

表計算を使用しているのでstate_countyを詳細(Detail)にドラッグします。

エラーじゃなくなりましたが、うじゃうじゃしています。state_countyが詳細に入ってるのでその数だけ出ますね…

新しくindex1というフィールドを作成します。

ここでもDefault Table Calculationをstate_countyに指定します。

このフィールドをフィルタに加え、真だけを指定します。

1つだけの表示になりました。念のため相関係数として正しいか確認します。

0.6129を二乗すると0.375646なので正しい結果が出ています。

フィルタをかけてみます。Alabama州だけだとどうなるでしょうか。

0.6426*0.6426=0.41293476(少数点をずらして、二乗したら0.41296になることを確認しています)なのでフィルタもきいているようです。

一覧で見るためにフィールドを複製していきます。

SmokerをChildren in Povertyに変更してみました。

いろいろ作成してみます。

せっかくなので地域性があるか見てみます。

一覧表示になりました!

おまけで地図色塗り

せっかく位置情報ありのデータなら州を色塗りとかしてみたいな~という好奇心でパラメータ(指標切り替え用)を作成します。

パラメータで切り替わるフィールドを作成します。

色塗り用のtabpyフィールドをもう1つ作成します。

地図を色塗りしてみましょう!

パラメータで切り替えられて楽しくなりました。(楽しさも必要)

今回作ったものをダッシュボードに詰め込むとこんな感じに…

相関係数が全体では高そうだけど、肥満率が高いところに絞ったらどうなる?

というような質問に答えられるようになりました。

今回は相関係数を出しましたが、そのまま2乗したメジャーにしたらR^2を一覧表示も可能です。

Tips

個人的に引っかかったところを挙げると…

  • 表計算の基準がずれていたため、おかしな結果が出て焦った
  • indexの関数に出会うまで同じ数字がうじゃうじゃ出ていて使い勝手が悪かった
  • 相関係数は2乗しないと傾向線のR^2にならないことを忘れて焦った
  • メジャーによってNULLが有る無いを同じパラメータに混ぜるのは危険。
    その場合は潔くシートを分けて都度メジャーのフィルタでNULLの行を除くこと。
  • tabpyのscript関数のお決まりを忘れがち。”や)がちゃんとあるか確認しよう!

終わりに

今まで相関係数はtableauの外でExcelやpythonを使って計算していたのですが、

vizの中に入れ込めて便利になりました!

社内でも便利という感想をもらえたのでより多くの方にも使っていただけると嬉しいです!

TruestarとDeepblueを今後ともよろしくお願いいたします!