2連続のPyGWalker関係の話です。そして、相変わらずStreamlit関係の記事です。
発展著しい両ライブラリですが、StreamlitにPyGWalkerを埋め込んで動かすこともできます。そして、使用感としてはJupyterよりStreamlitに埋め込んだ方が使い勝手がいいですね。
使用するメソッドですが、streamlitがPyGWalkerを埋め込むメソッドを持っているわけではなく、PyGWalker側がStreamlit上で動作するメソッドを持っているので注意が必要です。Streamlit側のドキュメントを読み込んでも本機能についての記述は出てきません。(少なくとも今日時点では。)
こちらを読みます。
参考: PyGWalkerとStreamlitを使ったデータの探索と情報共有 – Kanaries
StreamlitRenderer というのを使えば良いのですね。そして、設定を保存するspec引数もあります。
1点、Jupyterで動かす場合との違いなのですがセキュリティ上の理由なのかわかりませんがデフォルトではspecで指定したjsonファイルへの書き込み、要するに保存ができません。すでにどこかで保存されたダッシュボードの読み込みだけが可能という挙動になります。
これは、spec_io_mode 引数がデフォルトで”r” (読み込みモード) になっているためです。Streamlit上で作ったビューをそのまま保存したい場合は、”rw” を指定する必要があります。
注意点はこれだけなので、早速やってみましょう。データは何でもいいのでまたワインです。
from pygwalker.api.streamlit import StreamlitRenderer
import pandas as pd
import streamlit as st
from sklearn.datasets import load_wine
st.set_page_config(layout="wide")
# データ読み込み
wine = load_wine()
# 特徴量名を列名としてDataFrame作成
df = pd.DataFrame(
wine.data,
columns=wine.feature_names,
)
# target列も作成する。
df["target"] = wine.target
df["class"] = df["target"].apply(lambda x: wine["target_names"][x])
pyg_app = StreamlitRenderer(
df,
spec="./st_config.json",
spec_io_mode="rw"
)
pyg_app.explorer()
一番最後の、explorer()を忘れないように注意してくださいね。
これでStreamlit上でもTableau風のUIでグラフを描けるようになりました。