📊

PyGWalkerとStreamlitでBigQueryからデータを取ってきてごにょごにょする簡易EDAツールを作ってみた

2024/12/18に公開

モチベーション

  • PyGWalkerをColabratory上で実行してBigQueryのデータをいじるのが便利だったが、ColabのUIがちょっと煩わしくに感じるときもある
    • ColabとPyGWalkerUIが別々にスクロールする
    • PyGWalker以外のUIがEDAをするにあたっては不要
  • StreamlitでシュッとPyGWalkerを動かせるっぽいので、勉強がてら作ってみたくなった
  • 結局作ってみた結果個人的には「Jupyterでいいや」となったが、そう思った理由の整理等をまとめておきたい

要素技術

PyGWalker+Streamlitの事例はすでにいっぱいあるので、簡単に記載します。

  • PyGWalker: Dataframeを与えるとTableauライクなUIで可視化をできるPythonライブラリ
  • Streamlit: 簡便なWebアプリを構築・ホストできるPythonライブラリ
  • BigQuery: Google CloudのDWHサービスで、今回のデータソース

想定ユースケースと完成イメージ

想定ユースケースとしては、BigQueryで取得したデータをPyGWalkerでアドホックに可視化する場合を想定しました。

  1. 何らかの画面でクエリを入力してデータをロードする
  2. 1.でロードしたデータをPyGWalkerでEDAできる

完成イメージとしては公式ページや先行記事等にあるPyGWalker+Streamlitの構成をベースにBigQueryからデータをロードできるようにするだけ。

実際に作ってみた

https://github.com/sisimaimai/EDA-pygwalker-streamlit

使い方

  1. READMEの環境構築を済ませてstreamlitを起動し、localhost:8501にアクセスすると、トップページに飛びます

  2. loaderに移動し、クエリを入力して「ロードする」を実行します。

    pygwalkerのspec(後述)をJSONとして保存している場合は、復帰用にロードできるようにしています。

  3. explorerに移動してPyGWalkerに触れるようになります。

    この画面で「export_code」から取得できるJSONが2.で利用できるspecになります。

工夫した・躓いた点

StreamlitのSession State

(理解がまだ浅いので間違っていたらすいません)Streamlitでは、ページをロードするたびに変数は基本的にリセットされてしまうようです。
なので、「loaderページでBigQueryからデータをロードしたは良いけど、その後explorerページに遷移するとデータが消えてる。。。」という状態が発生してしまいました。
このような場合に、セッション内で変数を保持しておく機能がSession Stateで、それを利用してBigQueryから取得したデータを保持するようにしました。
https://docs.streamlit.io/develop/api-reference/caching-and-state/st.session_state

ページ分け

もともとPyGWalkerのUIだけに集中したかったので、他のUIが混じらないようなページ構成にするようにしました。
1ページにUIだけ表示されて個人的には満足しました。

作ってみた感想

なんだかんだColabで良い気がしてきた。。

下記点がColabのほうが優れているので、なんだかんだ良い気がした

GoogleCloudへの認証が楽

Colabでは↓を実行するだけで、認証を通せます。

from google.colab import auth
auth.authenticate_user()

対して、今回作ったツールはgcloudを入れてログインする必要があります。。

Colabのほうがファイル管理が楽

ColabであればGoogleDrive上でよしなに管理できます。
今回作ったツールではJSONとクエリをどこかにいい感じに保存しておく必要があります。

試していないですが、ついでにColabの自動保存を考えるとブラウザが落ちた場合の復旧もColabが有利だったり。。?

とはいえ勉強にはなった()

  • Streamlitに触れた
  • 業務内だとなかなか試しづらい

使えそうなところメモ

PyGWalker+Streamlitには簡易EDAツールのほか、簡易的なBIツール/ダッシュボードツールとしての利用もありそうな気がした。

  • (EDAツール)SQLやシステムに不慣れなユーザー向けに、各種KPI等を自由に組み合わせて可視化できる環境
  • (EDAツール)アナリストが高速にEDA・可視化を行うための環境(これは上述の通りColab/Jupyterで良い気もする)
  • (ダッシュボード)可視化内容まですべてをコード管理したダッシュボード環境

Discussion