「Metabase」はオープンソースでセルフホストも可能なデータ視覚化ツールです。前回の記事でその使い方を確かめられたので、早速GIGAZINE夏のプレゼント大放出企画で集めたアンケートデータを分析してみました。

Metabaseのセットアップや機能については下記の記事で詳しく解説しています。

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



GIGAZINEのアンケート結果を読み込むためにPostgreSQLのセットアップを行います。前回に引き続きDockerを利用するので、下記のコマンドでPostgreSQLを起動します。「パスワード」や「ディレクトリへのパス」は適宜書き換えて下さい。

docker run --name metabase-postgres -e POSTGRES_PASSWORD=[パスワード] -p 5432:5432 -v [アンケート結果が保存されているディレクトリへのパス]:/mnt/surveydata -d postgres

下記のコマンドでPostgreSQLのDockerイメージに接続します。

docker exec -it metabase-postgres bash

下記のコマンドでPostgreSQLに接続。

psql -h localhost -U postgres

まず下記のコマンドでMetabase用のデータベースを作成します。Metabase本体をデータベースに接続することでMetabaseのDockerイメージを消去してもダッシュボードなどのデータが維持されるようになります。

CREATE DATABASE metabaseappdb;

次にアンケートの結果を保存するためのデータベースを「gigazine」という名前で作成。

CREATE DATABASE gigazine;

作成したデータベースに接続します。

\c gigazine;

アンケートの項目を元にテーブルを作成します。今回は「Survey」という名前でテーブルを作成しました。

CREATE TABLE survey
("メールアドレスを入力してください。" varchar,
"性別を選択してください。" varchar,
"年齢を選択してください。" varchar,
...(途中省略)...
"UTMキャンペーンの詳細" varchar);

下記のコマンドで作成したテーブルにデータをインポート。これでPostgreSQL内で行う作業は終わりなので、「exit;」コマンドでPostgreSQLから切断します。

\copy survey from '/mnt/surveydata/survey.csv' delimiter ',' csv header;

続いてMetabaseのDockerイメージを下記のコマンドで起動します。Metabase本体をデータベースに接続するため、各種の設定を環境変数に設定する必要があります。

docker run -d -p 3000:3000 \
--add-host=host.docker.internal:host-gateway \
-e "MB_DB_TYPE=postgres" \
-e "MB_DB_DBNAME=metabaseappdb" \
-e "MB_DB_PORT=5432" \
-e "MB_DB_USER=postgres" \
-e "MB_DB_PASS=[パスワード]" \
-e "MB_DB_HOST=host.docker.internal" \
--name metabase metabase/metabase

前回の記事で詳しく記載している通りの手順でMetabaseの初期設定を行い、アプリが起動したら左のメニューから「独自データの追加」をクリック。



接続情報を入力します。



接続に成功すると、下記の通り同期が始まります。右上の「×」ボタンをクリック。



下記の通りデータベース名が表示されたら右上の「管理画面から離れる」をクリックします。



「データの閲覧」をクリックするとデータベースが追加されているので、「GIGAZINEアンケート結果」をクリック。



先ほどデータを保存した「Survey」テーブルが表示されています。「このテーブルを自動探査(X-ray)する」をクリック。



一部の質問についての回答がまとめられていました。項目数が多すぎるためか、気になる項目がかなり抜け落ちてしまっています。



というわけで、自動探査に頼らずにデータの中身を確認してみます。



項目・回答が一覧形式で並んでいます。



まず性別をグラフ化してみるとこんな感じ。



「ビジュアライゼーション」メニューで円グラフを選択してみました。GIGAZINEの読者の87%は男性とのこと。



せっかくMetabaseを使っているので、エディタを開いて性別と年齢を組み合わせてグラフを作成してみます。



年齢層は20代後半〜40代くらいが多いようです。女性の方がやや若い傾向にありそう。



職業の分布はこんな感じ。細かく分かれすぎていて傾向を読み取るのが難しくなっています。



そこで職業を大きな分類にまとめます。まず下記のコマンドでテーブルを作成。

CREATE TABLE occupation
("職業" varchar,
"分類" varchar);

そして下記のようにそれぞれの職業を「無職」「自営業」「会社員」「学生」「公務員」「アルバイト」という分類にまとめます。

INSERT INTO occupation VALUES
('無職', '無職'),
('ソフトハウス/情報処理サービス', '会社員'),
('自営業', '自営業'),
...(途中省略)...
('小学生', '学生');

更新したデータを読み込むため、Metabaseの右上の歯車マークから「管理者設定」をクリック。



「データベース」メニューから「GIGAZINEアンケート結果」をクリックします。



「今すぐデータベーススキーマと同期する」「今すぐフィールド値を再スキャンする」を両方クリックし、「管理画面から離れる」をクリック。



「データの閲覧」タブに先ほど作成した「Occupation」テーブルが表示されているのでクリックします。



エディタを開き、右外部結合でSurveyテーブルとJOINします。「職業」カラムと「職業を選択してください。」カラムを一致させるように設定して「ビジュアライズ」をクリック。



無事「分類」を追加できたので、早速「分布」をクリックして確認してみます。



結果は下記の通り。GIGAZINE読者の62%は会社員で、学生・無職・自営業の人が10%ずつ程度存在しているようです。



GIGAZINE読者の約60%は未婚です。



しかし、未婚の人のうち約20%は彼氏・彼女がいるとのこと。これらのデータを合わせると、未婚かつ付き合っている人も居ないという人は約半数ということが分かります。



毎月使えるお金は1万円〜5万円程度の人が多いようです。



未婚・既婚とお小遣いの金額を組み合わせてみます。



それぞれの属性の人ごとに分けて割合で表示してみると「3万円」のラインが見えてきました。子どもができると一気に自由に使える金額が減少することがうかがえます。



職業ごとのデータとお小遣いのデータを組み合わせると下記の通り。無職や学生の人は自由に使える金額が少ないという当然の結果を確かめることができました。



IT系の記事が多いこともあり、GIGAZINE読者の約17%はPCを自作しています。



Twitterのアカウントを持っている人は約80%と圧倒的です。



さらに、ブログやホームページを持っているという人も約15%存在しています。



なお、GIGAZINE読者のオススメマンガは圧倒的に「推しの子」が多数派でした。その他、「呪術廻戦」「ワンピース」「キングダム」「チェンソーマン」などが面白かったとのことです。



以上のようなデータをはじめとして、もっと詳しいデータと知見をフルに駆使することでGIGAZINEでは他メディアの追随を許さないレベルで記事広告を簡単に手間ひまかけず、とてもお得な予算で出すことが可能なので、「うちの製品をGIGAZINEの記事広告で宣伝すると実は効果が出るということなのだろうか?」という疑問や相談はこちらから今すぐどうぞ!