top of page

Tableau Public APIを使ってTableau Portfolio Vizをつくる


最終更新: 2022/11/27
将来的なTableau Public APIの仕様変更により、本記事で実装されている内容が動作しない場合があります。ご注意ください。
参考資料
https://github.com/wjsutton/tableau_public_api
https://www.dataplusscience.com/TableauPublicAPI.html
https://www.flerlagetwins.com/2021/04/tableau-public-api.html
https://www2.kobe-u.ac.jp/~tnishida/programming/GAS-01.html

本記事で作成するViz
Tableau Public Portfolio by Category

Tableau Publicを皆さんお使いでしょうか。

Tableau Publicは、端的に言えばTableau作品を公開し共有するための無料プラットフォームです。

Tableau Publicの説明: https://www.tableau.com/ja-jp/community/public

Tableau Publicホーム: https://public.tableau.com/app/discover


もちろん世界中のTableauユーザーの作品から学ぶこと、着想を得ることもできますし、自分の作品を公開して、自分のTableauポートフォリオを作成することもできます。

例:自分のTableau Public

https://public.tableau.com/app/profile/yoshitaka6076

https://public.tableau.com/app/profile/yoshiwow


Tableau Publicの個人ページでは、更新日順で自分の作品が並びます。

例えば以下は自分のWorkout Wednesdayアカウントですが、新しく更新(Publish)された順に上から並んでいます。


少ないうちは良いのですが、公開作品が増えてくると、特に自分の代表作のような「評価された作品」が埋もれていきます。


また作品投稿を続けていくと「よく見られた作品は何だろうか」と気になるかもしれません。

Tableau Publicのページ上では作品数やフォロワー数は出ますが、閲覧数や自分の作品に付けられた「お気に入り」の総数は分かりません。


上記の問題を解決するために、本記事では以下について解説します。

  • Tableau Public APIについて

  • Google Apps Script(GAS)を使用し、Google SheetにTableau Public APIデータを格納する方法

  • 上記のGASをスケジュール実行する方法

  • Tableau Public APIデータを使用したViz作成

 

Tableau Public APIについて


詳細は参考資料にありますので、概要だけ。

以下のようなAPIコールから、Tableau Publicの情報を抜き出すことができます。

https://public.tableau.com/profile/api/yoshitaka6076/workbooks?count=1&index=0


このAPIコールにより、yoshitaka6076アカウントの、一番最初に掲載されているWorkbookの情報が、以下のような文字列の形で取得できます。

{"hasMore":true,"workbooks":[{"workbookRepoUrl":"TableauPublicPortfolio","title":"Tableau Public Portfolio by Category","defaultViewName":"Portfolio","viewCount":1220,"numberOfFavorites":9,"showInProfile":true,"authorProfileName":"yoshitaka6076","defaultViewRepoUrl":"TableauPublicPortfolio/sheets/Portfolio","description":"","searchIndexable":true}]}

この文字列の中身を見てみると、例えば以下の情報が分かります。

  • タイトル:"title":"Tableau Public Portfolio by Category"

  • 閲覧数:"viewCount":1220

  • お気に入り数:"numberOfFavorites":9

要は上記のようなAPIコールから返ってくる文字列情報を処理することにより、Tableau Publicに関するデータを得ることが出来ます。


ちなみに自分のTableau Public IDは、例えばマイプロフィールを開いた際のURLから確認できます。 以下は筆者のプロフィールID確認方法です。

https://public.tableau.com/app/profile/yoshitaka6076

Tableau Public APIは他にも指定されたアカウントのプロフィールやフォロワー情報などを取得できますが、本記事ではWorkbookについて扱います。

どのような情報が取得できるかは参考資料をご覧ください。

 

Google Apps Scriptについて


Tableau Public APIを使用してTableau Publicのデータを取得できることが分かりました。

次にこのデータを何らかの形で格納したいとします。

PythonやRなどを使用しつつ、何らかのデータベースを用意して、そちらに格納する方法も良いのですが、本記事では個人レベルで可能な方法を紹介します。


使用するものはGoogle Sheetです。

ちなみにGoogle Sheetを今回採用した意図として、Tableau PublicにはGoogle Driveコネクタがありますので、Google Sheetでデータ作成しておけば、Tableau Publicでもデータが自動更新されるVizを作成することができます。


サンプルシート: Tableau Public API Data


お手元で新規Google Sheetを作成し、1行目にヘッダーを作成します。

サンプルシートを参照ください。


その後、拡張機能からApps Scriptを選択します。


上記のような画面が出てきます。

出てきた画面の中に、以下をコピペしてください。

function GetTableauPublicData() {
  
  // Initial Settings
  var options = {
    method: "GET"
  };
  var account = "(Your Tableau Public ID)" // 例: yoshitaka6076
  var targetsheet = "(Your Target Sheet Name)" // 事前作成したシート名
  var url = "https://public.tableau.com/profile/api/" + account + "/workbooks?count=300&index=0";
  var today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
  
  // Get and process the stats
  var stats = [];
  var responseApi = UrlFetchApp.fetch(url,options);
  var array = JSON.parse(responseApi)['workbooks'];

  for(j=0;j<array.length;j++){
    stats.push([
        today
        , array[j].authorProfileName
        , array[j].workbookRepoUrl
        , array[j].defaultViewName
        , array[j].title
        , array[j].showInProfile
        , array[j].viewCount
        , array[j].numberOfFavorites
    ]);
  }

  // Set the sheet to store the output
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(targetsheet);
  
  // Clean up the current data
  var LastRow = sheet.getDataRange().getValues().length;
  sheet.getRange(2, 1, LastRow, stats[0].length).clearContent();
  
  // Store the data
  sheet.getRange(2, 1, stats.length, stats[0].length).setValues(stats);
}


上記のスクリプトでは、指定されたTablaeu Public IDユーザーのWorkbook情報を取得しています。

項目としては以下を取得しています。

  • authorProfileName:Tableau Public ID

  • workbookRepoUrl:Workbook URLの一部

  • defaultViewName:Workbook表示時に開くシートURL

  • title:Workbookのタイトル

  • showInProfile:Workbookの非表示設定(後述)

  • viewCount:閲覧数

  • numberOfFavorites:お気に入り数


その後、実行または保存ボタンをクリックください。

初回実行のみ実行承認が必要ですので、以下ハイライト部をクリックし承認をしてください。

こちらに詳細ありますので、ご興味あればご参照ください。


実行後、下図のようにGoogle Sheetにデータが格納されます。


ということで、Tableau Publicのデータ取得が出来るようになりました。

 

スケジュール実行について


上記でデータ取得のスクリプトが用意できました。

こちらを日次で実行されるようにスケジュール設定しましょう。


最初にプロジェクトの名前だけ変更しておきます。

画面上部の「無題のプロジェクト」をクリックします。

(必須ではないですが、分かりやすい方が良いですよね)


画面左のタイマーマークをクリックし、トリガー画面を開きます。


画面右下の「トリガーを追加」をクリックします。

ここでは毎日0時に実行されるように設定します。


これでデータ取得の自動化が完了しました。

 

Tableau Public APIデータを可視化する


やっと本題に来ました。

Tableau DesktopまたはTableau Publicを起動し、先ほど作成したデータに接続します。


Tableau Publicでは抽出を作成する必要がありますが、このとき抽出フィルターをひとつ設定します。


showInProfileカラムについて説明します。

Tableau Publicでは自分の作品を非表示にする機能があります。

設定方法は以下いずれかです。



非表示設定についての項目がshowInProfileカラムです。

非表示にしているVizに関しては、情報を公開したくない場合が多いと思いますので、上記の抽出フィルター設定を手順に含めました。

注意
Tableau Publicで非表示にしたとしても、アクセス自体は可能なままです。
Tableau Public APIなどでURL等が第三者に伝わった場合、非表示Vizについても閲覧される可能性があることはご留意ください。
特に”Allow Access”をオンにしている場合、Workbook自体もダウンロード可能です。

もし第三者に見られて困る作品がTableau Publicにある場合はお気を付けください。


取り込まれたデータをTableauで見てみましょう。


Workbookの基礎的な情報は取得できています。

強いて言えば、WorkbookのURLがあれば、URL Actionを使用して簡単にWorkbookを表示できそうです。


そのために以下の計算フィールドを作成します。

URL
'https://public.tableau.com/app/profile/'
+ [authorProfileName]
+ '/viz/'
+ [workbookRepoUrl]
+ '/' + [defaultViewName]

これで可視化のための基本的な情報は揃いました。

項目も簡単なので、ここでは自分の利用例を紹介します。

Tableau Public Portfolio by Category


詳細はWorkbookの中身を見て頂くとして、以下のように「よく見られている、お気に入りを頂いているViz」が何か簡単に分かるようにし、また特定の作品を探すための検索ボックスも作成しています。


上記のようにTableau Publicのポートフォリオを作成することがTableau Public APIのデータを用いて可能です。


最後にパブリッシュ時にGoogle Driveの認証情報を埋め込み、またデータ更新を許可しておきましょう。

実行時間はTableau Public側で勝手に設定されるので、こちら側で設定できませんが、日次でデータ更新が実施されます。


データ更新の実行時間について、Tableau PublicのWorkbook個別ページの最下部に記載があります。

この時間に合わせて、先ほどのスクリプト実行スケジュールを設定する必要があるにはありますが、どこまで厳密に実施したいかによりますので、お好みでどうぞ。


またTableau Publicは1つだけVizをプロフィールトップに固定することが可能です。

自分は上記Vizを固定表示させています。


ということで、Google Apps ScriptとGoogle Driveコネクタを使用し、Tableau Publicのデータを自動取得&自動更新させたVizを作ることができました。

 

最後に


今回はTableau Public APIを利用し、Tableau Publicポートフォリオを作成する方法について解説しました。

Tableau Publicと相性がいいのでGoogle SheetおよびGoogle Apps Scriptを使用しましたが、特にGoogle Apps Scriptは色々と面白いことができますので、Tableauと合わせて学習してみても良いかもしれません。


今回の内容は、特にTabelau Publicで積極的に作品投稿をしている方にオススメです。

ぜひTabelau Public Portfolio作ってみてください。


質問などありましたらTwitterかLinkedinでお願いします。それでは。

bottom of page