無料で大量のデータを自動で見やすいグラフなどで可視化し定期的に更新反映されるダッシュボードをオープンソースでセルフホスト可能なアプリ「Metabase」を使ってみた

さまざまなデータに対応して自動でいい感じにデータをまとめてくれる「自動探査」機能を搭載したデータ視覚化ツールが「Metabase」です。オープンソースでセルフホストも可能とのことなので、さっそく使い勝手を試してみました。
Metabase | Business Intelligence, Dashboards, and Data Visualization
https://www.metabase.com/
公式ページの「Get started」をクリック。

Metabaseの開発元が運営する有料のクラウドサービスに登録する画面になりますが、下部に無料でセルフホストする方法へのリンクが用意されています。「Get Installation instructions」の部分をクリック。

Dockerを利用する方法と、Javaを利用する方法があるとのこと。今回はDockerを利用します。

というわけで、下記のリンクから自分の環境に合った方法でDockerをインストールします。
Install Docker Engine | Docker Documentation
https://docs.docker.com/engine/install/
今回はDebianを利用するため、下記のコマンドを入力しました。
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Dockerがインストールできたら、先ほどインストールガイドに記載されていたコマンドを入力してMetabaseを起動します。
docker run -d -p 3000:3000 --name metabase metabase/metabase
サーバー起動後、「http://localhost:3000」にアクセスすると下図の通り「Metabaseへようこそ」という画面が表示されます。「開始しましょう」をクリック。

言語を設定します。初期状態で日本語が選ばれているので「次へ」をクリックします。

氏名・メールアドレス・会社名またはチーム名・パスワードを入力し、「次へ」をクリック。

どのデータベースへ接続するかを選択する画面になりました。今回はサンプルデータベースを利用するので「あとでデータを追加する」をクリックします。

「フィニッシュ」をクリック。

「Metabaseを使い始める」をクリックします。

下図の画面になりました。機械翻訳の部分が残っているのか、やや日本語が怪しい部分が存在しています。

最初にサンプルデータベースの中身を確認してみます。左のメニューから「データの閲覧」タブを開き、「Sample Database」をクリック。

テーブルの一覧が表示されます。「Accounts」をクリック。

「ID」「メールアドレス」「氏名」「プラン名」「流入元」など、よくありそうなアカウントデータが並んでいました。

テーブル一覧画面へ戻り、Accountsの「このテーブルを自動探査(X-ray)する」をクリック。

自動探査機能によって「合計アカウント数」「過去30日間に登録したアカウント数」「ユーザー増加数」「月間の新規アカウント数のグラフ」などが自動で生成されました。自動探査はテーブル単位だけでなくフィールド単位でも利用できるようで、右側には自動探査可能なフィールドが並んでいます。「Planフィールド」をクリックしてみます。

Planの中身を分析して表示してくれました。

流入元のデータと組み合わせて「どの流入元から入ってきた人がどのプランを契約しているのか」という表も生成されています。

自動探査機能によって生成されたダッシュボードを保存するには右上の「保存する」をクリック。

左のメニューの中にダッシュボードが保存され、アクセスしやすくなりました。

他のテーブルについても確認してみます。「Orders」の自動探査ボタンをクリック。

注文のデータがさまざまな図表にまとめられています。

地域ごとの注文件数も生成されていました。どうやらテキサス州からの注文が圧倒的な模様。

地図をクリックするとメニューが表示されるので、「このOrdersを見てほしい。」をクリックしてみます。

するとテキサス州からの注文のみが表示されました。

列のヘッダーにカーソルを合わせると平均値・最低値・最大値が表示されます。

ヘッダー部分をクリックし、「分布」をクリックしてみます。

一発でグラフを作成することができました。1件あたりの売上としては40ドルから80ドルのものが多いようです。今後もテキサス州からの注文の動向を追跡するため、「保存」をクリックします。

「保存」をクリック。

グラフをダッシュボードに追加するか聞かれるので、「追加する」をクリックします。

「新ダッシュボードを作成する」をクリック。

今回はダッシュボードを「オーダー調査」という名前にしました。「作成する」をクリックします。

ダッシュボードが作成され、先ほど保存したグラフが配置されました。「保存」をクリック。

ダッシュボードが保存できました。ダッシュボードを購読することで、定期的にメールやSlackで様子を確認できるというわけ。

ダッシュボードの自動更新を設定することも可能です。

そのほか、「…」のメニューではフルスクリーン表示したり、PDF形式でエクスポートしたりできる模様でした。

続いて、どんなレビュー評価の製品の売上がいいのかを確認してみます。右上の「+ New」ボタンから「質問」をクリック。

「Sample Database」をクリックします。

「Orders」テーブルをクリック。

Ordersテーブルには製品のレビュー評価のデータがないので、Productsテーブルと結合(Join)します。「データ」の下部にある「結合」ボタンをクリック。

「Products」テーブルをクリックします。

これで結合の設定が完了しました。「プレビュー」をクリック。

プレビューが表示されるので、ちゃんと欲しいデータが適切に結合されているか確認します。

レビュー評価は製品ごとに細かい数値に分かれていますが、今回はざっくり「高評価」「低評価」で区別してみます。「カスタム列」をクリック。

カスタム列では関数や方程式を用いて新たな列を作成することができます。

関数を入力するとすぐ上に説明が出るという親切設計。

また、「[」を入力すると列のオートコンプリートが出現して入力しやすいようになっています。

下記のように、レビュー評価が4以上かどうかを判別する列を追加しました。列の名前を「レビュー評価」にして「完了」をクリック。

これでカスタム列の設定完了です。

最後にグラフとして描画するデータを設定します。縦軸は売上金額にしたいので、まず「…の合計」を選択。

続いて「Total(税込売上金額)」を選択します。

横軸は日付にしたいので、「集約するためのキー列を選ぶ」をクリックして「Created At」をクリック。

さらに、レビュー評価の高低でデータを分けてほしいので「+」マークのボタンをクリックして「レビュー評価」をクリックしました。

設定できたら「ビジュアライズ」をクリック。

グラフが生成されました。レビュー評価が4以上の製品の合計売上金額の方が4未満のものより少し多いことが分かります。

「ビジュアライゼーション」をクリックするとグラフの種類を変更できます。「範囲」をクリックして「完了」をクリックしました。

また、グラフの一部をクリックしてドラッグで範囲選択することでその部分だけに絞り込んで表示できます。

左上に絞り込みの情報が表示されました。「保存」をクリックします。

「保存」をクリック。

「追加する」をクリックします。

「オーダー調査」をクリック。

先ほどのダッシュボードに新たなグラフを追加できました。「保存」をクリックします。

なお、「+ New」ボタンのメニューには「SQLクエリ」という項目が存在しています。

SQLの組み立てに自信がある人や既にSQL文が用意できている人はSQLを実行することでも同様にデータの抽出・視覚化を行う事ができるようです。

実際のデータを利用するには左側のメニューから「独自データの追加」をクリックします。

すると下図の画面になるので、ここにデータベースへの接続情報を入力するだけでOK。

Metabaseの使い方が分かったので、次回はMetabaseを使ってGIGAZINE夏のプレゼント大放出企画で読者の皆様から頂いたアンケートの結果を分析してみます。お楽しみに!
・関連記事
SNSの台頭以前から人々の使う言葉が「データ」「分析」などの論理的なものから「信じる」「考える」などの感情的なものにシフトしていたことが明らかに - GIGAZINE
1万組以上のカップルを機械学習で分析して判明した「恋愛における満足度を高める要因」とは? - GIGAZINE
「素晴らしい作品を書くメソッド」をミステリーの巨匠アガサ・クリスティのベストセラーを分析して導き出したムービー - GIGAZINE
イグノーベル賞を受賞した「法的文書が読みにくい理由の分析結果」をわかりやすくまとめるとこうなる - GIGAZINE
OpenTelemetry対応でさまざまなアプリからデータを取得&追跡できるオープンソースなシステム監視・分析ツール「SigNoz」を使ってみた - GIGAZINE
・関連コンテンツ
in レビュー, ソフトウェア, ウェブアプリ, Posted by log1d_ts
You can read the machine translated English article I tried using the open source self-hoste….