Apache SupersetとPostgreSQL®を始めよう

<font color="Grey">*[Get started with Apache Superset and PostgreSQL®](https://aiven.io/blog/get-started-with-apache-superset-and-postgresql)の翻訳です。*</font>

2021年8月4日

# ApacheスーパーセットとPostgreSQL®を始めよう

Apache Supersetを使用して、Aiven環境でPostgreSQLテーブルからデータ可視化を作成し、ビジネス上の意思決定に活用する方法をご覧ください。

## Apache SupersetとPostgreSQLを始めよう


「百聞は一見にしかず」は多くの言語でよく使われることわざです。同様に、データの世界では、視覚化は膨大な量の生のポイントを画像に凝縮し、ビジネス上の意思決定を促す洞察に満ちたストーリーを作成するために使用することができます。datavizのエコシステムにはいくつかのツールが存在し、中でも[Apache Superset](https://superset.apache.org/)は、オープンソースであることと、データ探索、視覚化、共有のための高度な機能リストによって、多くの支持を得ている。


このブログポストでは、[既存のPostgreSQLテーブル](https://aiven.io/blog/the-pursuit-of-happiness-with-python-and-postgresql)を基にApache Supersetで素晴らしいビジュアライゼーションを作成する方法を紹介します。


今すぐPostgreSQLフリープランを入手する

PostgreSQLをもっと深く知る準備はできましたか？[PostgreSQLの無料プランにサインアップ](https://console.aiven.io/signup)してください。
## Apache SupersetをDocker上で動かす


Dockerはここでは心強い味方です！Dockerのおかげで、手動でセットアップを理解し実装する必要なく、複雑なソフトウェア・インフラを数分で立ち上げることができます。新しいツールをテストしているこのようなケースでは、Dockerは完璧にフィットします！


まずはApache SupersetのGitHubレポをクローンして、ターミナルから`superset`フォルダに移動します：



```
git clone https://github.com/apache/superset.git
cd superset`クリップボードにコピーする
```

次に `docker-compose` を使って Apache Superset に必要な全てのコンテナを作成する：



```
`docker-compose -f docker-compose-non-dev.yml up`クリップボードにコピーする
```

ブームだ！Apache Supersetの準備が整いました。


では、ブラウザで `localhost:8088` にアクセスして、最も安全なデュオでログインしてみよう（ユーザは `admin`、パスワードは `admin`）。


![Apacheスーパーセットのデフォルト画面](https://cdn.sanity.io/images/sczeoy4w/production/2a46de465187689c2cae42f6c6a6273317eb2348-1335x444.png?q=80&fit=min&auto=format&dpr=1.5 "Apache Superset default screen")


気になる方は、[Apache Superset docker page](https://superset.apache.org/docs/installation/installing-superset-using-docker-compose) をチェックしてみてください。


## データセットをPostgreSQLにプッシュする


このブログでも以前、[Pythonを使ってKaggleの関連データセットをPostgreSQLにプッシュする方法](https://aiven.io/blog/the-pursuit-of-happiness-with-python-and-postgresql)を紹介しました。今回の例では、そこで言及されている出力を使うこともできますし、独自のものを使うこともできます。この例の最終結果は `demo-pg` という名前の PostgreSQL インスタンスで、以下のような内容の `happiness` というテーブルを含んでいます：



```
survey_yr｜country｜overall_rank｜score｜gdp｜generosity｜freedom｜social_support｜life_exp｜gov_trust。
----------+---------+--------------+---------+--------+------------+----------+----------------+----------+----------
 19｜フィンランド｜1｜7.7690｜1.3400｜0.1530｜0.5960｜1.587｜0.9860｜0.3930
 19｜デンマーク｜2｜7.60｜1.3830｜0.2520｜0.5920｜1.573｜0.9960｜0.4100
 19｜ノルウェー｜3｜7.554｜1.4880｜0.2710｜0.6030｜1.582｜1.0280｜0.3410`クリップボードへコピー
```

## Apache SupersetをPostgreSQLに接続する


Apache Supersetは[幅広いソースデータベース](https://superset.apache.org/docs/databases/installing-database-drivers)をサポートしており、PostgreSQLには[psycopg2ライブラリ](https://superset.apache.org/docs/databases/postgres)を使用しています。PostgreSQLのサポートは、デフォルトのDockerセットアップに既に含まれています。


Apache Superset UIにアクセスして、PostgreSQLデータベースを指す新しいデータソースを定義するだけです：


1.Data**を選択し、次に**Databases**を選択します。
2.+DATABASE**ボタンをクリックします。
3.モーダルウィンドウの一番下で、**Connect this database with a SQLAlchemy URI string instead** を選択します。
4.4. **DISPLAY NAME** として `demo-pg` を挿入します(あるいは独自のインスタンス名)。
5.PostgreSQL URI を **SQLALCHEMY URI** として使います。PostgreSQL URIはAivenのコンソールのサービス詳細ビューの**Overview**タブで確認できます。
6.接続を確認し、「Connection looks good!
7.ADD**をクリックして、`demo-pg`データベース定義を永続化します。


![demo-pgデータベースエントリ](https://cdn.sanity.io/images/sczeoy4w/production/14e957124f319e2ac691f18cd923fc4bdaf87dce-1328x257.png?q=80&fit=min&auto=format&dpr=1.5 "データソースの定義")


さて、いよいよ`happiness`テーブルをインクルードする番だ。


1.Apache Superset UIに戻って、**Datasets** タブに切り替えます。
2.DATASOURCE**に`demo-pg`を、**SCHEMA**に`public`を、そしてテーブルに - 驚くことなかれ - `happiness`を入力してテーブルを作成する。
3.ADD**をクリックしてデータソースの定義を永続化する。


じゃじゃーん！


![幸福のデータセット入力](https://cdn.sanity.io/images/sczeoy4w/production/af34034e41c5143f91a211fdd89756b1f5efdbba-1328x260.png?q=80&fit=min&auto=format&dpr=1.5 "幸福のデータセット入力")


## データを可視化する


さて、芸術的なスキルを使って、データのビジュアライゼーションを作成する準備が整いました。このようにデータを表現することで、処理が非常に簡単になります。


1.Apache Superset UIに戻って、**Charts** タブに移動しましょう。
2.+CHART**をクリックします。
3.ポップアップウィンドウで、先ほど作成した`public.happiness`データセットを選択し、**Pivot Table v2**を可視化として選択します。


このデータセットを使って、長年にわたって最も幸せな国トップ10のヒートマップを作成してみましょう。以下のような設定で可能です：


* ROWS** に `country` を指定する。
* COLUMNS** には `survey_yr` を指定する。
* METRIC**では、集計関数として `AVG` を使用し、`overall_rank` カラムに基づく **SIMPLE** 計算を選択します。
* FILTERS**セクションでは、`overall_rank`のメトリクスが`<=`から`10`であることに基づく**SIMPLE**フィルタを追加します。
* 一番下の**AGGREGATION FUNCTION**を`Average`に設定すると、ピボット・テーブルの行/列全体の集計が行われます。


Query** パラメータの概要を確認してください：


![クエリーパネルの設定例](https://cdn.sanity.io/images/sczeoy4w/production/6c8ca5f069ea6f6a290621992583fef104b7c94d-317x623.png?q=80&fit=min&auto=format&dpr=1.5 "クエリーパネルの設定例")


次に、**CUSTOMIZE** タブで以下のオプションを設定します：


* PIVOT TABLE TYPE** では `Table Heatmap` を選択する。
* ROWS SORT BY** は `value ascending` を選択します。
* COLS TOTALS** の選択を外します。
* 可視化の名前を `Country ranking heatmap` とする。


CUSTOMIZE**の上にある**RUN**ボタンを押す準備ができました。


そして、過去5年間に少なくとも1度トップ10に入った国を、全体の平均順位で並べた赤い網掛けのヒートマップが完成した。


![国別総合ランキングを含むヒートマップ付きピボットテーブル](https://cdn.sanity.io/images/sczeoy4w/production/19688dae33d41052dc42c44430fe743d2e5bd74c-381x438.png?q=80&fit=min&auto=format&dpr=1.5 "国別総合ランキングを含むヒートマップ付きピボットテーブル")


これらの国が世界のどこにあるのかを見るために、同じデータを使って地図を作成することができます。以下の設定を試してみてください：


* 可視化タイプとして **世界地図** を設定する。
* COUNTRY COLUMN** としての `country`
* フルネーム`を **COUNTRY FIELD TYPE** とする。
**METRIC FOR COLOR** パラメータに `AVG` 集計を使用した `score` 列に基づく **SIMPLE** 計算を使用します。
* COUNTRY COLOR SCHEME**を選択してください。スクリーンショットは`赤/黄/青`ですが、選択はあなた次第です。ワイルドに！


出来上がった地図は、南半球の幸福度を上げるために多くの仕事が必要であることを明確に示している。


![世界のヒートマップの写真](https://cdn.sanity.io/images/sczeoy4w/production/d4da9df6310cad87bf2cbbae94fdb07bcc08a1dd-979x397.png?q=80&fit=min&auto=format&dpr=1.5 "世界のヒートマップの写真")


## データセットに計算フィールドを追加する


ソースデータセットに必要なフィールドがすべて含まれていないことがある。この例でもそうで、`survey_yr` フィールドには年の下2桁（つまり `18`、`19`）しか含まれていない。これは Apache Superset がタイムスタンプとして認識しないことを意味し、トレンドの可視化ができなくなる。


恐れることはない！Apache Supersetでは、計算カラムを追加することで、元のテーブルを変更することなくデータセットの形状を変更することができます。


1.Apache Superset UI で、**Datasets** パネルに切り替えます。
2.happiness**データセットの**Action**セクションの下の**Edit**鉛筆アイコンをクリックする。
3.CALCULATED COLUMNS** タブを開き、以下の設定で新しい項目を作成する：

\* SQL EXPRESSION** として `2000+survey_yr` を設定する。

\* LABEL** を `Year` に設定します。

\* DATETIME` を **DATA TYPE** に設定します。

\* データ形式**として`%Y`を設定します。

\* チェックボックスを選択します。


これで`Year`カラムが利用できるようになり、上位5位を時系列で折れ線グラフにしたようなトレンドビジュアライゼーションを作成できるようになりました。


![Top 5 trendline](https://cdn.sanity.io/images/sczeoy4w/production/223c57e29a9416a043e0fe7b8826f5441ead1f16-1205x389.png?q=80&fit=min&auto=format&dpr=1.5 "Top 5 trendline")


チャレンジして、このチャートをアパッチ・スーパーセットとして自分で作ってみてください。


ご覧の通り、フィンランドはとても幸せな国です！


## まとめ


データセットは、適切に保存され、クエリに利用できるようになって初めて役に立つ。データセットは、洞察が発見され、全社的に伝達されることで意味を持つようになります。PostgreSQLとApache Supersetの組み合わせは、データの保存、発見、可視化のためのクラス最高のソリューションを提供し、企業が効果的かつデータ駆動型になることを可能にします。


詳細はこちら


* [Aiven for PostgreSQL](https://aiven.io/postgresql): 管理されているPostgreSQLインスタンスを取得します。
* [Apache Superset Documentation](https://superset.apache.org/docs/intro): 設定の詳細を閲覧できます。


--


まだAivenのサービスをご利用になっていませんか？<https://console.aiven.io/signup>から無料トライアルにお申し込みください！


また、[changelog](https://aiven.io/changelog)や[blog](https://aiven.io/blog)のRSSフィード、または[LinkedIn](https://www.linkedin.com/company/aiven/)や[Twitter](https://twitter.com/aiven_io)のアカウントをフォローし、製品や機能関連の最新情報をご確認ください。