ブログ

Pythonと連携したTableau分析

この記事では、Tabpy ServerによるTableauとPythonの連携方法を紹介します。Pythonによるデータ解析の結果を、Tableuaを利用することでより閲覧性が高いアウトプットに仕上げることが可能です。加えて、Pythonで実行可能な機械学習ライブラリを活用することができるようになります。
TableauとPythonの連携では、Tabpy Serverを利用します。この記事ではTabpy ServerとTabpy Clientの利用方法について説明をしていきます。

Tabpyとは

Tabpyとは「Tableau Python Server」の略称です。Tableauの計算フィールドにおいてPythonのスクリプトを実行できるおものです。

Tabpyのインストール方法

Tabpyを利用するには、こちらのGithubからダウンロードするかAnaconda経由でインストールすることができます。以下では、Anacondaを利用した方法を紹介します。
Anacondaをインストールするとpipコマンドが利用できるようになっています。

以上の操作でTabpyを起動させることができます。Tabpyを起動しただけでは、Tableauと接続できていないので、Tableau側からTabpy側に接続設定を行う必要があります。
Tableauのヘルプタブから「分析の拡張機能接続の管理」を選択し、ホスト名、ポートの情報を入力します。ローカル環境でTabpyを立ち上げているので今回は、ホスト名はlocalhost、ポートは9004を設定します。

Tabpyの実行の流れ

TableauとTabpyの連携の流れとしては、3つのステップで計算が実行されます。第1ステップは、集計したフィールドの入力です。例えば、sum([売上高])のようなものも計算フィールドへの入力フィールドになります。計算フィールドには、Pythonで実行するスクリプトを記載します。_arg1, _arg2と記載しているものは、TableauからPythonのスクリプトに渡す引数を示しています。SCRIPT_REATは、Pythonのスクリプトの戻り値がREAL型(浮動小数点数)であることを宣言するものです。

計算フィールドにスクリプトを記載すると、Tabpyの方にデータが出力され計算が実行されます。ここの段階で、操作をする必要はありません。
計算が終了するとTableauの方で計算結果が出力可能になります。

Tabpy Clientの利用

Tableauに複雑な計算フィールドを記載したり、作成済みのモデルや関数を再利用したい場合には、Tabpy Clientを利用します。Tabpy Clientとは、定義しておいた関数をTabpy Serverに保存しておくというものです。
Tabpy Clientを利用するには、Tabpy Serverを起動した上で、Jupyter notebookで関数を定義し、Tabpyにデプロイする必要があります。Tabpy Clientを利用するにはterminal(Macの場合)画面から下記のコマンドを実行します。

次に保存したい関数を記述するためのJupyter notebookを起動します。Anaconda NavigatorからJupyter notebookを起動します。
tabpy_clientをインポートした後にclientを定義します。

その後、定義したい関数を記述します。この例では引数x、yを足し算するための関数を定義します。戻り値を記載するreturnのところでは、tolist()を適用することで、リスト型に変換しています。Tableau側で戻り値を処理する場合には、ndarray型では処理できないためlist型に変換する必要があります。

上記のコマンドを実行したことで、Tabpyには関数がデプロイされています。Jupyter notebook上で関数の確認をすることも可能です。

Tableauの計算フィールドで定義した関数を利用する場合には、上記のようにresultsを確認したのと同じように関数の実行をスクリプトとして記述します。

Tableau計算フィールドでの記述

このようにJupyter notebook上でのモデルや関数を定義を行うことで、Tableau側での操作を簡略化することが可能となります。

Tabpy Server、Tabpy Clientの利用事例

ここでは、Titanicの生存データをサンプルに利用して、Tabpy ServerとTabpy Clientをの使い方を示します。大まかな流れとしては、以下の4つになります。

  1. トレーニング用のデータを用意
  2. 重要と思われる特徴量を取得し、モデルを作成
  3. モデルから入力値に対する予測値を返す関数を定義
  4. Tabpy Serverにデプロイ

Titanicのデータでの目的変数は、生存を示すフラグであるserviveを利用します。説明変数は、客室の等級(pclass)、性別(sex)、年齢(age)、タイタニックに同乗している兄弟/配偶者の数(sibsp)、タイタニックに同乗している親/子供の数(parch)、料金(fare)、客室番号(cabin)を利用してみます。モデルとしては決定木を使って生存のフラグを分析します。

モデル作成までのPythonのスクリプトは下記のようなものを利用しています。

 
上記のスクリプトを実行すると決定木のグラフを得ることができます。結果から見ると、sex_female、pclass、age、sibspが重要と思われる変数なので、この4つのダミー化された変数を抽出して、再度モデルを作成・フィッティングするという作業を最後に行うことで、モデルを作成しています。

モデルが完成したら次にTabpy Serverにデプロイします。デプロイのためのコード例は下記のような形です。モデルの引数として、ダミー化された引数を渡す想定で、sex、pclass、age、sibspという引数を関数に渡して、モデル内で処理できるようにしています。

関数のデプロイまで完了した後は、Tableauからの操作になります。「②Tabpyとは」にてご紹介した手順からTabpy ServerとTableauの接続を行います。
接続後は、計算フィールドから下記のような形で今回デプロイした関数であるclf5dを呼び出します。引数としては、決定木のモデルに対応するものを順番に指定しています。ここでの計算フィールドの名称として「tabpy_query_clf5」と名付けられたこの計算処理は、生存/非生存の予測を返すものになります。

予測値自体は色々な使い方ができるのですが、例えば、テストデータでみたとき、男女ではやはり女性の方が生存のフラグの予測がより1に近い濃い水色なっていることが分かります。


他にも乗船客の詳細な属性データが利用可能な場合では、属性に対して生存/非生存の予測値がどのように関係しているのかなど生存確率を踏まえた分析が可能となります。

まとめ

Tabpy ServerとTabpy Clientを利用することでTableauの可視化の機能とPythonの機械学習の機能のいいとこ取りをした分析環境を作ることができます。特に特徴量に基づく分類や予測の数値を含めてダッシュボード作成と共有を行うことができますので、機械学習結果をより事業部での判断などに利活用するという目的でも使いやすいツールと言えます。

投稿者プロフィール

杉山 真吾
PowerBI、TableauなどのBIツールの導入を支援するフロッグウェル株式会社のシニアコンサルタント。データ分析基盤設計やデータモデル・レポート設計、運用コンサルティングなど、多岐にわたるサポートを経験。

CONTACT
お問い合わせ

ご相談やご依頼、病院マスタなどについてのお問い合わせはこちらのお問い合わせフォームから。

サービスなどについてのお問い合わせ 病院マスタについてのお問い合わせ

メールお問い合わせ