最終更新: 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でお願いします。それでは。