📈

Streamlit と Tableau ライクな PyGWalker を試す

2024/03/20に公開

はじめに


データ界隈でよく名前を聞くStreamlitと
TableauライクなPyGWalker(Tableauって高いっすよね)が良さげなんで試す

Streamlit とは

機械学習とデータ サイエンス用の美しいカスタム Web アプリを簡単に作成して共有できるオープンソースの Python ライブラリです
https://streamlit.io/

PyGWalker とは

データを視覚的な探索インターフェースに変換するPythonライブラリです
https://docs.kanaries.net/ja/pygwalker

検証環境

# 作業前
$ system_profiler SPSoftwareDataType | grep "System Version" # OSのバージョン
System Version: macOS 13.3 (22E252)

$ code --version # VSCodeのバージョン
1.87.2

$ python --version # Pythonのバージョン
Python 3.10.13
# 作業後
$ pip show pygwalker | grep "Version"
Version: 0.4.7

$ pip show streamlit | grep "Version"
Version: 1.32.2

$ tree
.
├── data
│   └── sales.csv
├── gw_config.json
└── src
    └── streamlit_app.py

環境構築

新規プロジェクト作成

$ mkdir streamlit_pygwalker_project  # ディレクトリを作成
$ cd streamlit_pygwalker_project # プロジェクトフォルダに入る
$ python -m venv .venv  #.venvという仮想環境を作成
$ source .venv/bin/activate  #仮想環境の有効化
$ pip install --upgrade pip # pipアップデート
$ pip install pygwalker # ライブラリインストール
$ pip install streamlit # ライブラリインストール

pyファイル作成

$ mkdir src
$ touch src/streamlit_app.py
  • streamlit_app.py
from pygwalker.api.streamlit import StreamlitRenderer, init_streamlit_comm
import pandas as pd
import streamlit as st

# Streamlitページの幅を調整する
st.set_page_config(page_title="StreamlitでPygwalkerを使う", layout="wide")

# PyGWalkerとStreamlitの通信を確立する
init_streamlit_comm()

# タイトル
st.title("Data Analysis with PyGWalker.")

# データフレームの用意
df = None

# ファイル選択
with st.sidebar:
    uploaded_files = st.file_uploader("Choose a CSV file")
    if uploaded_files is not None:
        df = pd.read_csv(uploaded_files)

# dfがNoneでない場合にpygwalkerで表示
if df is not None:
    # PyGWalkerのレンダラーのインスタンスを取得する。このインスタンスをキャッシュすることで、プロセス内メモリの増加を効果的に防ぐことができます。
    @st.cache_resource
    def get_pyg_renderer() -> "StreamlitRenderer":
        # アプリをパブリックに公開する場合、他のユーザーがチャートの設定ファイルに書き込めないように、デバッグパラメータをFalseに設定する必要があります。
        return StreamlitRenderer(df, spec="./gw_config.json", debug=False)

    renderer = get_pyg_renderer()

    # データ探索インターフェースをレンダリングする。開発者はこれを使用してドラッグアンドドロップでチャートを作成できます。
    renderer.render_explore()
else:
    st.warning("Please upload a CSV file.")

テストデータ作成

$ mkdir data
$ touch data/sales.csv
  • sales.csv(ChatGPT作)
日付, 商品名, 価格, 数量, 合計
2024-02-26, 商品A, 1000, 5, 5000
2024-02-26, 商品B, 1500, 3, 4500
2024-02-27, 商品C, 2000, 2, 4000
2024-02-27, 商品A, 1000, 4, 4000
2024-02-28, 商品B, 1500, 6, 9000
2024-02-28, 商品C, 2000, 1, 2000

実行確認

実行コマンド

$ streamlit run src/streamlit_app.py

起動画面

  • 「Browse files」ボタンから作成したデータ取り込み
  • Dataタブ
  • Visualzationタブ
  • 終了処理
    • アプリ終了 : 「Control + C」
$ deactivate  #仮想環境の無効化

おわりに

Power BI 育ちにはTableauライクなUIに戸惑った
ダークモードで下に謎の白空白出来るのがイマイチ
それ以外は、可能性を感じる、可能性しかない
Tableauには高くて手を出せない人向けかな

参考

https://docs.kanaries.net/ja/pygwalker
https://zenn.dev/naiq112/articles/f57cc333ee8b3c
https://zenn.dev/0msys/articles/34a380d0af1269

Discussion