最終更新: 2023/02/22
将来的な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
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の情報を抜き出すことができます。
URL中の「?」以降で、取得する情報を制御します。
profileName: 情報取得するTableau Public ID
start: 何個目のWorkbookから情報を取得するか(0から開始)
count: Startから数えて何個のWorkbookから情報を取得するか
visibility: 隠されたWorkbookを情報取得の対象に含めるか(後述)
このAPIコールにより、yoshitaka6076アカウントの、一番最初に掲載されているWorkbookの情報が、以下のような文字列の形で取得できます。
{"current":0,"next":1,"contents":[{"workbookRepoUrl":"TableauPublicPortfolio","title":"Tableau Public Portfolio by Category","defaultViewName":"Portfolio","viewCount":1390,"numberOfFavorites":9,"authorProfileName":"yoshitaka6076","defaultViewRepoUrl":"TableauPublicPortfolio/sheets/Portfolio"}]}
この文字列の中身を見てみると、例えば以下の情報が分かります。
タイトル:"title":"Tableau Public Portfolio by Category"
閲覧数:"viewCount":1390
お気に入り数:"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を選択します。
上記のような画面が出てきます。
出てきた画面の中に、以下をコピペしてください。
ただし以下2点のみ情報の記入をお願いします。
冒頭の「username_array」には自分のTableau Public IDを記入する
末尾の「sheet」には、データを格納したいGoogle Sheetのシート名を入れる
function GetTableauPublicData() {
// Initial Settings
// ================
var options = {
method: "GET"
};
var username_array = ["(Tableau Publicアカウント)"];
var today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
var count = 50;
// Get Workbook Counts and start position array
// ============================================
var url_profile_base = "https://public.tableau.com/profile/api/"
var url_profile_array = [];
for(i=0; i<username_array.length; i++){
url_profile_array.push(url_profile_base + username_array[i]);
}
var start_array = [];
for(i=0; i<url_profile_array.length; i++){
var responseApi_profile = UrlFetchApp.fetch(url_profile_array[i],options);
var workbook_count = JSON.parse(responseApi_profile)['visibleWorkbookCount'];
var loop_count = Math.ceil(workbook_count/count);
start_array[i] = [...Array(loop_count).keys()];
for(j=0; j<start_array[i].length; j++){
start_array[i][j] = start_array[i][j] * count;
}
}
// Get Workbook API Call URLs
// ==========================
var url_workbook_array = [];
var url_workbook_base = "https://public.tableau.com/public/apis/workbooks?profileName="
for(i=0; i<username_array.length; i++){
for(j=0; j<start_array[i].length; j++){
url_workbook_array.push(
url_workbook_base + username_array[i]
+ "&start=" + String(start_array[i][j])
+ "&count=" + String(count)
+ "&visibility=NON_HIDDEN"
);
}
}
// Get Workbook Detail Data
// ==========================
var stats = [];
for(i=0;i<url_workbook_array.length;i++){
var responseApi_workbook = UrlFetchApp.fetch(url_workbook_array[i],options);
var workbook_array = JSON.parse(responseApi_workbook)['contents'];
for(j=0;j<workbook_array.length;j++){
stats.push([
today
, workbook_array[j].authorProfileName
, workbook_array[j].workbookRepoUrl
, workbook_array[j].defaultViewName
, workbook_array[j].title
, workbook_array[j].viewCount
, workbook_array[j].numberOfFavorites
]);
}
}
// Populate Data to GSheet
// ==========================
// set output sheet
// ================
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("(情報を格納するシート名)");
// clean current data
// ===================
var LastRow = sheet.getDataRange().getValues().length;
sheet.getRange(2, 1, LastRow, stats[0].length).clearContent();
// Place the new 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の非表示設定(後述) (2023年2月以降、項目として取得できなくなりました)
viewCount:閲覧数
numberOfFavorites:お気に入り数
その後、実行または保存ボタンをクリックください。
初回実行のみ実行承認が必要ですので、以下ハイライト部をクリックし承認をしてください。
こちらに詳細ありますので、ご興味あればご参照ください。
実行後、下図のようにGoogle Sheetにデータが格納されます。
ということで、Tableau Publicのデータ取得が出来るようになりました。
スケジュール実行について
上記でデータ取得のスクリプトが用意できました。
こちらを日次で実行されるようにスケジュール設定しましょう。
最初にプロジェクトの名前だけ変更しておきます。
画面上部の「無題のプロジェクト」をクリックします。
(必須ではないですが、分かりやすい方が良いですよね)
画面左のタイマーマークをクリックし、トリガー画面を開きます。
画面右下の「トリガーを追加」をクリックします。
ここでは毎日0時に実行されるように設定します。
これでデータ取得の自動化が完了しました。
Tableau Public APIデータを可視化する
やっと本題に来ました。
Tableau DesktopまたはTableau Publicを起動し、先ほど作成したデータに接続します。
Tableau Publicでは抽出を作成する必要がありますが、このとき抽出フィルターをひとつ設定します。
(2023年2月以降、showInProfile項目は取得不可となりましたので、こちらの抽出フィルターの設定は不要です)
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]
これで可視化のための基本的な情報は揃いました。
項目も簡単なので、ここでは自分の利用例を紹介します。
詳細は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でお願いします。それでは。
Kommentare