kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

MetabaseでBIことはじめ③

引き続きMetabaseやっていきます。

前回は以下の記事で紹介されているお題に沿ってMetabaseでデータソースの追加と可視化を行いました。

データソースはこちら。

qiita.com

お題はまだ続くのですが、その前に少しMetabaseの機能を使って前回のダッシュボードを便利にしてみたいと思います。

目次

前回のあらすじ

前回作成したダッシュボードはこんな感じでした。

Film ActorテーブルをActorテーブル、FilmテーブルとJOINさせて、ActorテーブルのFirstNameが"Nick"という条件でフィルタしたものです。

ただ現実的に考えると

  • 俳優名を名・姓で検索できる
  • フィルタ条件は適宜変更できる

ほうが便利ですよね。

ということで、カスタムカラムとダッシュボードフィルタを試してみたいと思います。

カスタムカラム

Metabaseでは、データソースのカラムを組み合わせて独自のカスタムなカラムを追加することが出来ます。カスタムカラムでは関数なども使えるので、ELT(Extract・Load・Transform)になるわけですね。

まず、前回の質問を開きます。

こんな表示が出ます。保存しない限りはいろいろ試行錯誤できるということですね。「確認しました」をクリック。

エディターを開きます。

質問のエディター画面が開きます。

一旦フィルタは削除しちゃいましょう。

カスタム列をクリックします。

こういう画面が表示されます。フィールド計算式がExcelでいうところの数式のようなものです。

ここに以下のような数式を入力します。

concat([Actor → First Name] ," ",[Actor → Last Name] )

concatはExcelでいうCONCATENATEですね。カラムは[ ]で囲んで指定します。JOINさせている場合は上記のように[JOIN先テーブル → JOIN先テーブルのカラム名]になります。

ちなみにインクリメンタルに補完もしてくれてヘルプも表示されます。が、なんかこう微妙に入力しにくいです。日本語だからかな?私の場合はテキストエディタに書いてコピペすることが多いです。

使える関数などは公式のドキュメントを参考にしてください。

最後に名前をつけます。これがビジュアライズしたときのカラム名になります。最後に「完了」をクリック。

プレビューしてみましょう。

俳優名というカラムが追加されているのがわかりますね。

ビジュアライズするとこんな感じで、これまでの姓と名に加えて、フルネームのカラムが表示されていますね。

姓と名はもう不要なので非表示にしておいて順番を入れ替えるとこんな感じですね。

保存しておきましょう。

質問を保存する場合、上書き保存も別名での保存の両方が選べます。上書きすればダッシュボードの表示も自動で変わりますし、すでにある質問から派生させていったり、みたいなことができるわけですね。今回は上書きします。

ダッシュボードフィルタ

さきほど質問からフィルターを削除しましたが、フィルターはダッシュボードからインタラクティブにできるとよいですよね。次にダッシュボードフィルタを試してみましょう。

ダッシュボードを開きます。

「編集」(鉛筆のアイコン)をクリックします。

右上の「フィルター」をクリックします。

フィルター対象のデータの性質みたいなものを選択します。この性質によってフィルター時の条件指定の仕方やインタフェースが変わるようです。今回は「俳優名」なのでテキストですね。

次にフィルターの種類を選択します。今回の場合は、俳優名を自由に検索するような感じになるので「含む」を選択します。

こんな感じの画面が表示されます。実際のダッシュボードでの表示イメージみたいな感じですね。

ではもう少し設定を。まず、フィルタ対象のカラムを選択します。もちろん「俳優名」ですね。

フィルタの細かい設定です。この設定項目はデータの性質やフィルタの種類によって変わります。「テキスト」の場合はラベルとデフォルト値が設定できます。ラベルはGUIで表示される際の文字列です。デフォルト値を設定する必要があれば設定することが出来ます。今回はラベルだけ設定しておきました。

ちなみにリンクフィルターは、複数のフィルター条件がある場合にどちらかのフィルタ結果に応じて絞り込みを行うような場合に設定します。今回はひとつだけなので設定できません。

ダッシュボードを保存します。

試してみるとこんな感じです。

できましたね。

まとめ

今回はMetabaseの機能を少し紹介する感じになりました。次回は残りのお題をやっていきたいと思います。

MetabaseでBIことはじめ②

Metabaseの続きです。

前回はデータソースの追加までやりました。今回は追加したデータソースを使って可視化していきたいと思います。

目次

サンプルデータベースについて&可視化のお題

サンプルデータベースの詳細は以下。

元をたどるとこちらですね。

知らなかったんですが、サンプルで用意したDVDレンタルのデータベース、これMySQLもPostgreSQLも同じものなのですね。見た感じ元々MySQL用が最初っぽい。MetabaseはMySQLも使えるのでMySQLでいきたい人は参考までに。

で、なにか練習用にお題ないかなーと思って探してたら、こういう記事がありました。

ありがたいですね。ではこの記事と同じことをMetabaseでやっていきたいと思います。

お題1: 特定の俳優が出演する映画

Qiitaの記事にある通り、

  • Actorテーブルは映画のタイトル情報を持っていない
  • Filmテーブルは出演者の情報を持っていない
  • 出演者IDとタイトルを多対多で紐付けているのはFilm Actorテーブル

ということで、Film ActorテーブルにActorテーブル、FilmテーブルをJOINさせれば良さそうです。

右上の「+New」をクリックします。

SQLクエリを直接叩いてもいいのですが、SQLさっぱりわからんマンなので、GUIでやりましょう。「質問」をクリックします。

開始するデータとしてDVD Rentalデータベースを選択。

そしてFilm Actorテーブルを選択します。

Film Actorテーブルが選択された状態になります。ここで右の方にある再生ボタンのようなものをクリックしてみます。

Film Actorテーブルの内容が表示されましたね。再生ボタンのようなものをクリックするとこのようにプレビューが表示されます。まだ何も条件を設定していないので、選択したテーブルの内容がそのまま表示されているだけですね。あくまでもプレビューなので「✕」をクリックして消しておきます。

ではJOINしましょう。「結合」をクリックします。

Film ActorテーブルとJOINするテーブルを選択します。まずはActorテーブル。

次に、テーブル間で結合させるカラムの組み合わせを選択するのですが、Film ActorテーブルとActorテーブルの各Actor IDがもう選択されていますよね。Metabaseではこのあたりもある程度類推して設定してくれるようです。もちろん自分で個別に設定することも出来ます。プレビューしてみましょう。

結合されたテーブルが表示されていますね。

JOINで重複している項目がありますね。これを表示しないようにも出来ます。開始となるテーブル側でもJOINさせたテーブル側でもどちらでも設定できますが、今回は結合させたテーブル側のActor IDを表示しないようにしてみましょう。「結合」のところにあるActorテーブルの右の下向きのアイコンをクリックします。

ここで表示しない項目のチェックを外せばOKです。

プレビューが消えましたね。「更新」をクリックしてみましょう。

チェックを外した項目が消えていますね。

また、JOINの種類を変更することも出来ます。Film ActorテーブルとActorテーブルが結合されているところのアイコンをクリックします。

現在はLEFT JOINになっていますが、これをINNER JOINにしてみましょう。

変更するとアイコンが変わっているのがわかりますね。変更後のプレビューを更新しましょう。Actor IDはActorテーブルでユニークなのであまり意味はないですけどね。

このようにして結合していけばOKです。ということで、再度「結合」からFilmテーブルも結合します。わかりやすくするためにいろいろ非表示にしました。こんな感じになります。

次に特定の俳優で絞り込んでみましょう。「フィルター」をクリックします。

First Nameが"Nick"なレコードを絞り込みたいので、JOINされているActorテーブルのFirst Nameを選択します。

First Nameカラムのすべての値が表示されていますので"Nick"を選択すればOKです。絞り込み検索もできますね。「フィルターを追加する」をクリックします。

プレビューしてみるとこんな感じで絞り込みが出来ていますね。

ではプレビューではなく最終形としてビジュアライズしましょう。「ビジュアライズ」をクリックします。

はい、これで表のビジュアルができましたね。

とはいえプレビューとはそんなに変わらないですよね。少し表をカスタマイズしましょう。下のほうにある「設定」をクリックします。

左に各カラムが表示されていますね。ここで順番を変えたり、表示・非常時を切り替えたり、また表示上のカラム名を変更することが出来ます。

少しいじってみました。カラムの名前が変わっていて、あといくつか非表示になっているのがわかりますでしょうか。

あと下の「設定」の横にある「ビジュアライゼーション」をクリックすると、他の表示形式に切り替えることが出来ます。ただし切り替えれるのはデータをどのように抽出したか?に依ります。今回のデータだと表敬式以外を選択するためにはいろいろ設定が足りないので選択できないということですね。

では最後にこれを保存していつでも呼び出せるようにしましょう。右の上の「保存」をクリックします。

呼び出すときにわかりやすい質問の「名前」を設定します。説明は必要なら入力します。コレクションはフォルダのようなものですね。ここではデフォルトの「分析」にしておきます。最後に「保存」をクリック。

質問が保存されると、ダッシュボードに追加するかを聞いてきます。ダッシュボードは質問で作成した複数のビジュアルをひとまとめにして見やすくするためのものですね。せっかくなので追加してみましょう。「追加する」をクリックします。

どのダッシュボードに質問のビジュアルを追加するかを聞いてきます。今回は新しく作ってみましょう。「新ダッシュボードを作成する」をクリック。

ダッシュボードの名前と保存先のコレクションを選択します。適当に設定して「作成する」をクリックします。

ダッシュボードが表示されます。作成した質問のビジュアルの場所や表示サイズなどを変更できます。質問を作成してビジュアル化、ダッシュボードに追加していくことで、ひと目でデータを確認することができるというわけですね。

最後に保存を忘れず。

保存した質問やダッシュボードはトップページからコレクションをたどるといつでも参照・編集できます。元のデータを更新したり、質問を編集すれば、ダッシュボード内の表示も自動で変わります。

とりあえず今日はここまで。次回は別のお題もやりつつ、ダッシュボード上で条件を選択しやすくしたり、他のビジュアライズについても試してみたいと思います。

MetabaseでBIことはじめ①

年末年始は故あってずっとBIツールいじってたので一旦まとめ。

BIツールっていろいろありますよね。

  • Amazon QuickSight
  • Google Looker Studio
  • Microsoft Power BI
  • Tableau

で、どれもだいたい有料だったりして、初心者が個人で使ってみる分にはちょっと敷居があるかなーって感じです。

上記の中には無料で利用できるものもありますが、公開するには有償 or 公開が前提(クローズドなものはできない)だったりして、限られた人にだけ見せたい、みたいな用途だとちょっと使いにくいと思いました。

ということで、まずはOSSでできるものを試してみようということで、Metabaseがなかなか良さげなようです。

早速試していきます。

目次

インストール

Metabaseはクラウド版(有料)もありますが、ローカルで動かす場合はjarファイルを直接実行する方法とDockerで起動する方法があります。今回はjarファイルを直接起動する方法にしました。

ということでJREが必要です。

$ java -version
openjdk version "11.0.8" 2020-07-14 LTS
OpenJDK Runtime Environment Corretto-11.0.8.10.1 (build 11.0.8+10-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.8.10.1 (build 11.0.8+10-LTS, mixed mode)

Metabaseをダウンロードします。以下のURLにアクセスすると自動でjarファイルがダウンロードされます。

jarファイルを適当なディレクトリに移動して実行します。

$ java -jar metabase.jar

起動時のメッセージがズラズラ出力されますが、以下のように表示されればとりあえずOKっぽいです。

2023-01-02 15:48:26,803 INFO metabase.core :: Metabase Initialization COMPLETE

ブラウザでhttp://localhost:3000/にアクセスすると初期設定画面が開きますので進めていきます。「開始しましょう」をクリック。

上から順番に設定していきましょう。

まず言語設定。デフォルトで多分日本語になってると思いますので、そのまま次に。

次にユーザ設定。ローカルのMetabaseにログインするための設定っぽいので特に気にすることはなさそうです。必要事項を入力して次へ。

BIで使用するデータソースの設定です。ここはとりあえず後でいいと思うので、「後でデータを追加する」で。

よくある統計情報の収集確認です。気になる人はトグルをオフにすればいいでしょう。「フィニッシュ」をクリック。これで完了です。

最後にMetabaseのニュースリリースを購読するかを聞かれますが、まあ後でもいいかなと思います。「Metabaseを使い始める」をクリック。

Metabaseのトップ画面が表示されました。データの解析はここから始めます。

データソースの追加

予めMetabaseが用意したサンプルのデータも用意されていますが、せっかくなので自分のデータを使う流れをやってみましょう。

ちょうどこういう記事がありますので、PostgreSQLにこのサンプルデータベースをデータソースとして使うことにします。DVDレンタルのトランザクションっぽいデータのようですね。

PostgreSQLが予めローカルにインストールされているものとして上記のサンプルDBを用意します。詳細は割愛。

$ mkdir pg_sample_db && cd pg_sample_db
$ wget https://www.postgresqltutorial.com/wp-content/uploads/2019/05/dvdrental.zip
$ unzip dvdrental.zip
$ ls
dvdrental.tar   dvdrental.zip
$ createuser postgres     # Macの場合、OSユーザがsuper userになっていてpostgresユーザがいないので追加
$ createdb dvdrental
$ pg_restore -h localhost -U postgres -d dvdrental ./dvdrental.tar
$ psql -h localhost -U postgres dvdrental -c "\dt;"
             List of relations
 Schema |     Name      | Type  |  Owner
--------+---------------+-------+----------
 public | actor         | table | postgres
 public | address       | table | postgres
 public | category      | table | postgres
 public | city          | table | postgres
 public | country       | table | postgres
 public | customer      | table | postgres
 public | film          | table | postgres
 public | film_actor    | table | postgres
 public | film_category | table | postgres
 public | inventory     | table | postgres
 public | language      | table | postgres
 public | payment       | table | postgres
 public | rental        | table | postgres
 public | staff         | table | postgres
 public | store         | table | postgres
(15 rows)

ではMetabaseから接続します。「独自データの追加」をクリック。

データベースの設定画面が表示されます。

ちなみに、データソースとして選択できるタイプの一覧はこんな感じです。ここにはないですが、プラグインでCSVも使えるようです。

今回はPostgreSQLを使うので、こんな感じで設定して「保存」をクリック。

エラー等なく設定が追加されると、こういう画面が表示されますが、ここの「サンプルデータ」はMetabaseのデフォルトで用意されたものを指していて追加したデータベースではないです。クリックして「あれー、追加したものと違う?」となりそうですね。なので迷わないようにベタに戻っていきましょう。右上の「✕」をクリックします。

右上の「管理画面から離れる」をクリック。

トップ画面に戻りました。よく見るとさっき追加したデータベースに関連するような表示が見えますね。Metabaseには、データベースのスキーマから「こういうデータが見たいよな―」というのを自動で解析してグラフ化してくれる「X-Ray」という機能があり、どうやらそれが表示されているようです。

これを使ってもいいんですが、今回はウォークスルー的に使い方を学ぶためにX-Rayは使わずにベタにやっていきたいと思います。いったん先ほどのデータベースが追加されているか確認だけしておきましょう。

「データの閲覧」をクリック。

追加した「DVD Rental」をクリック。

テーブル一覧が表示されます。どれでもいいのですが、DVDタイトルのテーブルっぽい「Film」をクリックしてみます。

ちゃんと追加できているようですね。

では次回はこれらのデータを使ってグラフを作っていきます。