21
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PyGWalker超入門【Streamlit編】

Last updated at Posted at 2023-11-04

PyGWalkerとは

PyGWalkerはPandasのDataFrameをTableau風のGUIで探索・可視化できるPythonライブラリです。
オープンソースソフトウェアとして開発されていてソースコードはGitHubで公開されています。

なお、READMEによると、

"Pig Walker"のように発音

…だそうです。

インストール

インストール手順は公式ドキュメントに記載されています。

pip install pygwalker

自分はAnaconda環境で構築しましたが、Anaconda環境が古すぎて失敗してしまったので、そのアップデートから実施しました。
また、今回はStreamlit上でPyGWalkerを起動させるので、Streamlitもインストールしておきます。

conda update -n base conda
conda install pandas
pip install pygwalker
pip install streamlit

Streamlit上でPyGWalkerを起動させる

以下のようなプログラムを作成します。

pygapp.py
import pygwalker as pyg
import pandas as pd
import streamlit.components.v1 as components
import streamlit as st
import random
import datetime

# 今回のデータ生成に使う関数
def distance(x, y):
  # 東京タワーの座標を基準に値を生成する
  _x = 139.745433
  _y = 35.658581
  return ((x - _x)**2 + (y - _y)**2)**0.5

# ランダムなデータをnum_rows行を生成する
num_rows = 3000
df = pd.DataFrame(index=range(num_rows), columns=['名称', '緯度', '経度'])
df['名称'] = [''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', k=7)) for i in range(num_rows)]
df['緯度'] = [random.uniform(34, 38) for i in range(num_rows)]
df['経度'] = [random.uniform(135, 141) for i in range(num_rows)]
df['距離'] = [distance(df['経度'][i], df['緯度'][i]) for i in range(num_rows)]
df['カテゴリ'] = [random.randint(1, 10) for i in range(num_rows)]
df['バリュー'] = [random.random() * 100 for i in range(num_rows)]

# Streamlitページの幅を調整する
st.set_page_config(layout="wide")

# Pygwalkerを使用してHTMLを生成する
pyg_html = pyg.walk(df, env='Streamlit', return_html=True, dark='light')
 
# HTMLをStreamlitアプリケーションに埋め込む
components.html(pyg_html, width=1300, height=1000, scrolling=True)

PyGWalkerに分析したいデータソースをPandasのDataFrameとして渡してあげる必要があります。TableauのようにデータソースをGUIで柔軟に選択するものではないということですね。

pygapp.py (抜粋)
pyg_html = pyg.walk(df, env='Streamlit', return_html=True)

また、PyGWalkerそのものにはWebアプリをホスティングする機能はありません。その代わりにGUIを実現するHTMLのソースコードを出力してくれるので、これをStreamlit上に埋め込んであげることで、ユーザにGUIを提供することができます。

pygapp.py (抜粋)
components.html(pyg_html, width=1300, height=1000, scrolling=True)

起動方法は通常のStreamlitアプリと同様にstreamlit runします。

streamlit run pygapp.py

GUIの操作例

PyGWalkerのGUIの操作方法(の一部)は以下の通りです。

pygwalker-manual.png

例えば、初期状態から、
pygwalker-train1.png
(1) 地図へのプロットに切り替えて
pygwalker-train2.png
(2) 緯度経度をDimensionsに変更して
pygwalker-train3.png
(3) 緯度をLatitude、経度をLongitudeに指定して
pygwalker-train4.png
(4) 地図を日本にスライドさせて
pygwalker-train5.png
(5) プロットする点の色を距離の値に応じて変えて
pygwalker-train6.png
(6) バリューの値が50以上の点のみプロットするようにフィルタする
pygwalker-train7.png

簡単ですね。

もっと詳しく使い方を知りたい!

インストール手順でも紹介した公式ドキュメントにある程度記載されています。

また、PyGWalkerを紹介しているいくつかの動画で具体的な操作を確認することができます。

PyGWalkerのアップデート

GUIの右上の方に半透明で「UPDATE (バージョン番号)↑」という表示が出ることがあります。
pygwalker-update.png

新しいバージョンがリリースされているので、必要に応じてアップデートしてあげましょう。
アップデートは一般的なPythonライブラリと同様にpipを使います。

pip install -U pygwalker

追記

大規模なデータセットを扱う場合はwalkの代わりにuse_kernel_calc=Trueオプションを指定したinit_streamlit_htmlを使うことで高速化できるとのことです。
このオプションを使うときにはinit_streamlit_commという初期化関数を呼んでおく必要があります。
ObservedObserverさん、コメントありがとうございます。

参考:Streamlit API

また、より大規模なデータセットを扱う場合は、Snowflakeに処理をプッシュできるプラグインがあるとのことです。(内部的にはSQLAlchemyを使っていそう)
Snowflake上のテーブルをPyGWalkerで探索できる、ということですね!

参考:PyGWalkerとSnowflake API

21
25
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?