📈
Streamlit と Tableau ライクな PyGWalker を試す
はじめに
データ界隈でよく名前を聞くStreamlitと
TableauライクなPyGWalker(Tableauって高いっすよね)が良さげなんで試す
Streamlit とは
機械学習とデータ サイエンス用の美しいカスタム Web アプリを簡単に作成して共有できるオープンソースの Python ライブラリです
PyGWalker とは
データを視覚的な探索インターフェースに変換するPythonライブラリです
検証環境
# 作業前
$ 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には高くて手を出せない人向けかな
参考
Discussion